一、K8s主节点禁止调度¶
在生产环境中,Kubernetes 的主节点除了部署系统组件外,不推荐再部署任何服务,此时可以通过添加污点来禁止调度:
[root@k8s-master01 ~]# kubectl taint node k8s-master01 node-role.kubernetes.io/control-plane:NoSchedule
# 添加完成后验证,观察到已成功添加,新来的pod无法调度到主节点
[root@k8s-master01 ~]# k describe node k8s-master01 | grep Taints
Taints: node-role.kubernetes.io/control-plane:NoSchedule
也可以添加 NoExecute 类型的污点,此时不容忍该污点的 Pod 会被驱逐重建:
[root@k8s-master01 ~]# kubectl taint node k8s-master01 node-role.kubernetes.io/control-plane:NoExecute
# 添加完成后验证,观察到已成功添加,除了原本容忍该污点的pod外其他pod无法调度到主节点
[root@k8s-master01 ~]# k describe node k8s-master01 | grep Taints
Taints: node-role.kubernetes.io/control-plane:NoExecute
使用如下命令可以查看正在被驱逐重建的 Pod
kubectl get po -A -owide | grep k8s-master01 | grep -v Running
二、K8s新节点禁止调度¶
当 Kubernetes 集群添加新节点时,通常情况下不会立即调度 Pod 到该节点,需要经过完整的可用性测试之后才可以调度 Pod,此时也可以使用污点先临时禁止该节点的调度
kubectl taint node k8s-master01 new-node=true:NoSchedule
也可以添加 NoExecute 类型的污点,将之前部署的pod进行驱逐
kubectl taint node k8s-master01 new-node=true:NoExecute
待新节点测试完毕后,在允许该节点可以进行调度
kubectl taint node k8s-master01 new-node=true-