目录
一、安全摘除节点的标准流程
1. 确认节点名称及状态
2. 标记节点为不可调度
3. 排空(Drain)节点
4. 删除节点
二、验证节点是否成功摘除
1. 检查节点列表
2. 检查节点详细信息
3. 验证 Pod 状态
三、彻底清理节点(可选)
1. 停止并重置 kubelet
2. 清理残留文件
3. 删除证书(如果使用 kubeadm)
四、常见问题
1. 节点状态一直为 NotReady
2. 无法删除节点
一、安全摘除节点的标准流程
1. 确认节点名称及状态
首先通过以下命令获取节点列表:
kubectl get nodes -o wide
找到需摘除的节点名称,并确认其状态为 Ready
。若节点已异常(如 NotReady
),需先排查问题或强制操作。
2. 标记节点为不可调度
使用 cordon
命令阻止新 Pod 调度到该节点:
kubectl cordon <node-name>
验证节点状态:
kubectl get nodes <node-name>
#输出中 "STATUS" 应为 "SchedulingDisabled"
3. 排空(Drain)节点
在移除节点前,需确保该节点上的 Pod 被安全迁移到其他节点,避免服务中断。
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
-
--ignore-daemonsets
:忽略 DaemonSet 管理的 Pod(如日志收集组件)。 -
--delete-emptydir-data
:删除使用emptyDir
卷的 Pod 数据。 -
注意:如果存在无法自动迁移的 Pod(如没有副本的裸 Pod),需手动处理或添加
--force
参数。
4. 删除节点
驱逐完成后,执行以下命令从集群中移除节点:
kubectl delete node <node-name>
二、验证节点是否成功摘除
1. 检查节点列表
使用 get nodes
确认节点已消失:
kubectl get nodes
-
如果节点已成功删除,列表中不再显示该节点。
-
如果节点仍在列表中但状态为
NotReady
,可能需检查网络或手动清理。
2. 检查节点详细信息
kubectl describe node <node-name>
-
若节点已删除,会返回错误
-
Error from server (NotFound): nodes "<node-name>" not found。
3. 验证 Pod 状态
检查原节点上的 Pod 是否已重新调度到其他节点:
kubectl get pods -o wide | grep node1
# 应无输出,表示所有 Pod 已迁移
三、彻底清理节点(可选)
如果节点需要从物理/虚拟环境中永久移除,还需在节点本机执行以下操作:
1. 停止并重置 kubelet
systemctl stop kubelet
kubeadm reset -f
2. 清理残留文件
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/config
3. 删除证书(如果使用 kubeadm)
rm -rf /etc/kubernetes/pki/
四、常见问题
1. 节点状态一直为 NotReady
-
检查节点网络是否正常。
-
检查节点上的
kubelet
是否在运行:systemctl status kubelet
2. 无法删除节点
-
确认已执行
kubectl drain
。 -
强制删除节点(谨慎操作):
kubectl delete node <node-name> --force --grace-period=0
通过以上步骤,可以安全摘除 Kubernetes 集群中的节点并验证结果。