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
运维实践中,集群有备份、删除、添加、更新维护等需求,下一篇介绍如何为集群添加节点。