赞
踩
目录
cordon节点,drain驱逐节点,delete 节点,在对k8s集群节点执行维护(例如内核升级、硬件维护等)时候会用到。后期创建的pod都不会被调度到该节点上,但操作的暴力程度不一样。改变的是节点的STATUS
影响最小,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
- # 可使用 uncordon 恢复
- [root@k8s1 k8s-yaml]# kubectl uncordon k8s2
- node/k8s2 uncordoned
首先驱逐node上的pod,在其他节点重新创建,然后将节点调为SchedulingDisabled。
kubectl drain k8s2 --ignore-daemonsets
--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;
也是使用kubectl uncordon k8s2恢复
- # 恢复
- [root@k8s1 k8s-yaml]# kubectl uncordon k8s2
- node/k8s2 uncordoned
最暴力的一个,首先驱逐node上的pod,在其他节点重新创建,然后,从master节点删除该node,master失去对其控制,如要恢复调度,需进入node节点,重启kubelet服务
kubectl delete node k8s2
关于节点扩缩容的具体操作流程可关注后面的文章
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。