跳转至

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

可以看到 host4SchedulingDisabled 表示不可调度。

drain 排除节点

然后驱逐节点上的Pod容器组,被驱逐的Pod将在其它节点重新创建运行:

kubectl drain host4 --delete-local-data --ignore-daemonsets --force

这里有3个参数:

  • --ignore-daemonsets, 忽略 DaemonSet 管理的 Pod(避免删除,创建这样的死循环)。
  • --delete-local-data,使用 emptyDir 数据卷的 Pod 也要删除。
  • --force,不是由 ReplicationControllerReplicaSetJobDaemonSetStatefulSet 管理的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运维实践中,集群有备份、删除、添加、更新维护等需求,下一篇介绍如何为集群添加节点。

参考

回到页面顶部