目录
一、概念
二、使用
1.cordon 停止调度
1.1.停止调度
1.2.解除恢复
2.drain 驱逐节点
2.1.驱逐节点
2.2.参数介绍
2.3.解除恢复
3.delete 删除节点
一、概念
cordon节点,drain驱逐节点,delete 节点,在对k8s集群节点执行维护(例如内核升级、硬件维护等)时候会用到。后期创建的pod都不会被调度到该节点上,但操作的暴力程度不一样。改变的是节点的STATUS
二、使用
1.cordon 停止调度
1.1.停止调度
影响最小,node的STATUS调为SchedulingDisabled,新创建pod,不会被调度到该节点,节点原有pod不受影响,仍正常对外提供服务。
# 停止调度节点
[root@k8s1 k8s-yaml]# kubectl cordon k8s2
node/k8s2 cordoned
[root@k8s1 k8s-yaml]# kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s1 Ready control-plane,master 12d v1.23.17 192.168.11.11 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://19.3.13
k8s2 Ready,SchedulingDisabled <none> 12d v1.23.17 192.168.11.12 <none> CentOS Linux 7 (Core) 3.10.0-1160.el7.x86_64 docker://19.3.13
1.2.解除恢复
# 可使用 uncordon 恢复
[root@k8s1 k8s-yaml]# kubectl uncordon k8s2
node/k8s2 uncordoned
2.drain 驱逐节点
首先驱逐node上的pod,在其他节点重新创建,然后将节点调为SchedulingDisabled。
2.1.驱逐节点
kubectl drain k8s2 --ignore-daemonsets
2.2.参数介绍
--ignore-daemonsets #daemonset资源不能被驱逐,需要排除,加这个选项参数排除;
--delete-emptydir-data #如果无法驱逐成功,再加这个参数;
kubectl drain k8s2 --ignore-daemonsets --delete-emptydir-data
kubectl get pods -o wide -A | grep k8s2
驱逐pod后,我们会发现,k8s2还存在两个pod; 一个是flannel组件还有一个是kube-proxy代理pod;我们不用管这两个没有被驱逐的pod;
2.3.解除恢复
也是使用kubectl uncordon k8s2恢复
# 恢复
[root@k8s1 k8s-yaml]# kubectl uncordon k8s2
node/k8s2 uncordoned
3.delete 删除节点
最暴力的一个,首先驱逐node上的pod,在其他节点重新创建,然后,从master节点删除该node,master失去对其控制,如要恢复调度,需进入node节点,重启kubelet服务
kubectl delete node k8s2
关于节点扩缩容的具体操作流程可关注后面的文章