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: <none>

Taints: <none>

取前两行查看

[root@k8s231 dns]# kubectl describe nodes | grep -i taint -A 2

Taints: node-role.kubernetes.io/master:NoSchedule

Unschedulable: false

Lease:

--

Taints: <none>

Unschedulable: false

Lease:

--

Taints: <none>

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

#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调度的污点和污点容忍,学习完毕;

相关推荐
梅见十柒1 小时前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Python私教2 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
运维&陈同学2 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
O&REO3 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
politeboy3 小时前
k8s启动springboot容器的时候,显示找不到application.yml文件
java·spring boot·kubernetes
运维小文4 小时前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
登云时刻4 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes
wuxingge13 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
志凌海纳SmartX14 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总14 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes