目录
一、安全摘除节点的标准流程
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 集群中的节点并验证结果。