21-k8s中pod的调度-污点和污点容忍

一、污点的概念

所谓的污点,就是给k8s集群中的节点设置的污点,通过设置污点,来规划资源创建时所在的节点;

|-----------------|-------------------------------------|
| 污点的类型 | 解释说明 |
| PreferNoshedule | 节点设置这个五点类型后; 表示,该节点接受调度,但是会降低调度的概率; |
| NoShedule | 表示,该节点不接受新的调度,以前有的资源,可以继续存在 |
| NoExecute | 表示,不接受新的调度,驱逐以前的资源调度; |

根据节点设置污点;

二、污点的管理

1,查看污点

root@k8s231 dns\]# kubectl describe nodes \| grep -i taint Taints: node-role.kubernetes.io/master:NoSchedule Taints: \ Taints: \

取前两行查看

root@k8s231 dns\]# kubectl describe nodes \| grep -i taint -A 2 Taints: node-role.kubernetes.io/master:NoSchedule Unschedulable: false Lease: -- Taints: \ Unschedulable: false Lease: -- Taints: \ Unschedulable: false Lease:

2,创建污点

创建污点前,查看pod

创建污点

注意:创建五点有两种方式

第一种:key=value:污点类型

第二种:key:污点类型

root@k8s231 dns\]# kubectl taint node k8s233 k8s=xinjizhiwa:NoExecute

创建污点后,查看pod

查看原因

root@k8s231 dns\]# kubectl describe pods dm01-57ff86798f-4sl9r

3,删除污点

root@k8s231 dns\]# kubectl taint node k8s233 k8s=xinjizhiwa:NoExecute-

把五点删除后,pod又恢复了

4,修改污点

root@k8s231 dns\]# kubectl taint node k8s233 k8s=xinjizhiwa:NoExecute --overwrite

三、污点容忍tolerations

1,污点容忍的概念

通过上文,我们谁知道,我们可以通过给k8s集群节点设置不同类型的"污点",来控制资源创建的节点范围;

那么,k8s也同时提供了,"污点容忍",就是即便你的节点设置了"污点",我的资源也可以创建在这个节点上的能力;

可以理解为:在节点上设置了五点之后,你创建资源时,可以无视这个节点上的污点规则,也就可以在有污点的节点上创建资源;

假设:一个节点上有两个污点,但是你创建pod的时候,还想要在这个节点上创建,那么你就需要再资源清单中,写入"容忍这两个污点",才会创建成功;

2,污点容忍案例

· 给k8s233创建两个污点

root@k8s231 dns\]# kubectl taint node k8s233 k8s=xinjizhiwa:NoSchedule node/k8s233 tainted \[root@k8s231 dns\]# kubectl taint node k8s233 k8s=xinjizhiwa:NoExecute --overwrite node/k8s233 modified

· 编辑一个正常的资源清单

root@k8s231 dns\]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm01 spec: replicas: 10 selector: matchLabels: k8s: k8s template: metadata: labels: k8s: k8s spec: containers: - name: c image: nginx:1.20.1-alpine ports: - name: p containerPort: 80 \[root@k8s231 dns\]# kubectl apply -f deploy.yaml

此时查看pod都在k8s232中,因为另外两个节点上都有污点,不允许创建

· 修改资源清单,设置污点容忍

root@k8s231 dns\]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm01 spec: replicas: 10 selector: matchLabels: k8s: k8s template: metadata: labels: k8s: k8s spec: #设置污点容忍 tolerations: #指定污点的key - key: node-role.kubernetes.io/master #value: #指定污点的类型 effect: NoSchedule #设置key和value的关系 #--Exists:key匹配所有value #--Equsl:key和value必须全部匹配到 operator: Exists - key: k8s value: xinjizhiwa effect: NoExecute operator: Equal - key: k8s value: xinjizhiwa effect: NoSchedule operator: Equal containers: - name: c image: nginx:1.20.1-alpine ports: - name: p containerPort: 80

重新创建资源

root@k8s231 dns\]# kubectl apply -f deploy.yaml

· 此时查看pod

发现,即便k8s231和k8s233都有污点,但是也都可以创建pod了;

root@k8s231 dns\]# kubectl get pods -o wide

3,无视所有污点

root@k8s231 dns\]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm01 spec: replicas: 10 selector: matchLabels: k8s: k8s template: metadata: labels: k8s: k8s spec: #设置污点容忍 tolerations: #不写污点的key的相关属性表示匹配所有key - operator: Exists containers: - name: c image: nginx:1.20.1-alpine ports: - name: p containerPort: 80

至此,pod调度的污点和污点容忍,学习完毕;

相关推荐
Akamai中国2 小时前
分布式AI推理的成功之道
人工智能·分布式·云原生·云计算·云服务·云平台·云主机
川石教育3 小时前
测试工程师如何学会Kubernetes(k8s)容器知识
云原生·容器·kubernetes·kubernetes容器·kubernetes教程
iRayCheung4 小时前
Kind方式部署k8s单节点集群并创建nginx服务对外访问
nginx·kubernetes·kind
小黑_深呼吸4 小时前
Prometheus实战教程:k8s平台-Mysql监控案例
运维·学习·kubernetes·prometheus
THMAIL5 小时前
mac M芯片运行docker-desktop异常问题
macos·docker·容器
家庭云计算专家6 小时前
还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍
服务器·人工智能·docker·容器·编辑器
匆匆z26 小时前
AWS EC2 微服务 金丝雀发布(Canary Release)方案
微服务·云原生·金丝雀部署
富士康质检员张全蛋7 小时前
云原生|kubernetes|kubernetes的etcd集群备份策略
云原生·kubernetes·etcd
慧一居士7 小时前
Kubernetes 中kind类型和各类型详细配置完整示例介绍
云原生·kubernetes·yaml配置
云手机管家8 小时前
CDN加速对云手机延迟的影响
运维·服务器·网络·容器·智能手机·矩阵·自动化