Kubernetes 之 Pod 容忍度与节点污点
Pod 的容忍度与节点污点的定义
节点污点taints
和 Pod 容忍度terlerations
是结合使用的。它给了节点选择 Pod 的权利,污点设置了effect
参数来选择 Pod,如果 Pod 的容忍度级别不够,那么 Pod 将不会出现在该节点上,反之,则有可能被分配这个节点上。控制节点默认设置的污点如下:
root@k8s-master1:~# kubectl describe nodes k8s-master1 | grep Taints
Taints: node-role.kubernetes.io/control-plane:NoSchedule
污点 effect 级别
级别 | 定义 |
---|---|
NoExecute | 最高级别,驱逐不能容忍该污点的 已经在运行的 Pod,不允许不容忍该污点 Pod 被调度上该节点 |
NoSchedule | 不允许不容忍该污点 Pod 被调度器调度上该节点,但已运行的 Pod 不受干扰,不通过调度器调度的 Pod 也不受干扰 |
PreferNoSchedule | 尽可能不调度不容忍该污点的 Pod 到此节点上 |
节点污点与 Pod 容忍度使用
-
先将两个工作节点打上运维污点
kubectl taint nodes k8s-worker1 maintenance:NoExecute kubectl taint nodes k8s-worker2 maintenance:NoExecute
-
尝试创建一个 Pod 在工作节点上
root@k8s-master1:~# kubectl apply -f test-pod.yaml pod/k8s-test created root@k8s-master1:~# kubectl get pods -ntest NAME READY STATUS RESTARTS AGE k8s-test 0/1 Pending 0 12s root@k8s-master1:~# kubectl describe pods k8s-test -ntest Events: Type Reason Age From Message ---