Kubernetes 集群-删除节点
2020-05-15 by dongnan
环境
在前面的三篇文章中,使用 Kubeadm 部署了 K8S集群环境:
测试的K8S集群由一个Master管理节点、两个Worker计算节点组成。
目标
K8S集群运维过程中可能有会下线(删除)某个node节点的需求,下面以删除host4节点为例。
步骤
cordon 停止调度
首先将节点标记为不可调度,避免新的Pod在此节点创建和运行:
kubectl cordon host4
查看节点状态:
kubectl get node
NAME STATUS ROLES AGE VERSION
host0 Ready master 355d v1.17.4
host1 Ready <none> 354d v1.17.4
host2 Ready <none> 354d v1.17.4
host3 Ready <none> 302d v1.17.4
host4 Ready,SchedulingDisabled <none> 354d v1.17.4
可以看到 host4 为 SchedulingDisabled 表示不可调度。
drain 排除节点
然后驱逐节点上的Pod容器组,被驱逐的Pod将在其它节点重新创建运行:
kubectl drain host4 --delete-local-data --ignore-daemonsets --force
这里有3个参数:
--ignore-daemonsets, 忽略DaemonSet管理的Pod(避免删除,创建这样的死循环)。--delete-local-data,使用emptyDir数据卷的Pod也要删除。--force,不是由ReplicationController、ReplicaSet、Job、DaemonSet、StatefulSet管理的Pod(没有绑定任何控制器)也要删除。
delete 删除节点
最后删除这个节点:
kubectl delete node host4
验证
host4 节点已经被删除:
kubectl get node
NAME STATUS ROLES AGE VERSION
host0 Ready master 355d v1.17.4
host1 Ready <none> 354d v1.17.4
host2 Ready <none> 354d v1.17.4
host3 Ready <none> 302d v1.17.4
小结
对节点执行维护之前(如:内核升级等),可以使用 kubectl drain 安全驱逐节点上面所有的 Pod。
在K8S运维实践中,集群有备份、删除、添加、更新维护等需求,下一篇介绍如何为集群添加节点。