本文主要是介绍8-k8s-污点与容忍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、概念
- 二、相关操作
- 三、实操污点NoSchedule
- 四、实操污点NoExecute
- 五、实操容忍
一、概念
-
污点与容忍
污点taints定义在节点之上的键值型属性数据。当节点被标记为有污点,那么意味着不允许pod调度到该节点。
容忍tolerations是定义在 Pod对象上的键值型属性数据。被打上污点的节点,如果同时被pod标记为可以容忍污点的节点,则允许pod调度到该节点。。
ps:在使用kubeadm部署的k8s集群的时候应该会发现,通常情况下,应用不会调度到master节点。因为默认给master节点加了污点。
1)污点一般打在节点上,且一个节点可以配置使用多个污点
2)容忍是标注在pod(资源控制器)上的。一个Pod(资源控制器)也可以有多个容忍度。启动pod一般不会调度在有污点的节点上,除非该pod标注了这些污点的容忍,才可以被调度。
-
污点配置类型
1)Noschdule:如果Pod不能忍受这类污点,则该污点节点后续不会进行pod调度,已经创建的pod不会受到影响。
2)NoExecute:如果Pod不能忍受这类污点,则该污点节点会马上驱除该节点上所有非kube-system空间的所有pod节点。3)PreferNoSchedule: NoSchedule的软约束,即该污点节点后续基本不会进行pod调度,但是无其他节点可供调度时,才允许调度到该节点。已经创建的pod不会受到影响。
二、相关操作
-
为节点打上污点:kubectl taint node kas-master key=value:Noschedule
-
移除污点:kubectl taint node k8s-master key=value:Noschedule-
-
查看污点指令:kubectl taint -h
-
pod配置容忍
# pod的 spec下面配置容忍 tolerations: - key: "污点的 key"value: "污点的value"offect: "NoSchedule" #污点产生的影响operator: "Equal" #1.Equal:pod和节点的key+value都要相等。2.Exists:pod和节点的key相等即可。tolerationSeconds: 时间(s) #tolerationSeconds不设置,则Pod会一直在满足容忍的节点上一直执行。
三、实操污点NoSchedule
-
给worker1节点打上污点:kubectl taint no worker1 key1=value1:NoSchedule
-
查看节点: kubectl describe no worker1
-
编写yaml清单:vi deployment-nginx.yaml
apiVersion: apps/v1 kind: Deployment metadata:name: deployment-nginx #Deployment 的名称labels:app: nginx spec:replicas: 3 # 创建 Pod 的副本数selector: #定义 Deployment 如何找到要管理的 Pod,与 template 的 label(标签)对应matchLabels:app: nginxtemplate: #字段包含以下字段:metadata:labels:app: nginx #使用 label(标签)标记 Podspec: #表示 Pod 运行一个名字为 nginx 的容器containers:- name: nginximage: nginx:1.15 #表示 Pod 运行一个名字为 nginx 的容器ports: #容器用于发送和接收流量的端口- containerPort: 80
-
创建:kubectl apply -f deployment-nginx.yaml
-
查看,发现worker1上面没有调度pod:kubectl get pod -o wide
-
移除污点:kubectl taint no worker1 key1=value1:NoSchedule-
四、实操污点NoExecute
-
删除所有pod:kubectl delete -f deployment-nginx.yaml
-
重新部署:kubectl apply -f deployment-nginx.yaml
-
查看:kubectl get pod -o wide
-
设置NoExecute:kubectl taint no worker1 key1=value1:NoExecute
-
查看节点:kubectl get pod -o wide
ps:可以看到,除了kube-system空间以外的其他空间,所有worker1上的pod都被驱除
五、实操容忍
-
在deployment-nginx上设置污点容忍,然后再次查看:vi deployment-nginx.yaml
tolerations: - key: "key1"operator: "Equal"value: "value1"effect: "NoExecute"
完整配置
apiVersion: apps/v1 kind: Deployment metadata:name: deployment-nginxlabels:app: nginx spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:tolerations:- key: "key1"operator: "Equal"value: "value1"effect: "NoExecute"containers:- name: nginximage: nginx:1.15ports:- containerPort: 80
-
更新:kubectl apply -f deployment-nginx.yaml
-
查看pod:kubectl get pod -o wide
-
测试完还原,删除污点:kubectl taint no worker1 key1=value1:NoExecute-
这篇关于8-k8s-污点与容忍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!