Kubernetes如何强制删除不可达节点或清理集群重新部署?
问题根因
你执行kubectl命令返回的dial tcp 10.21.30.165:6443: connect:network is unreachable报错,核心原因是当前使用的kubeconfig文件中记录的APIServer地址是已经被删除的旧控制节点IP,kubectl无法连通集群控制面,自然无法执行节点删除操作。
方案一:修复集群连接后强制删除残留不可达节点
适用于需要保留现有集群,仅清理无效旧节点后添加新节点的场景:
- 第一步:修复kubectl连接配置
登录到集群中现存的正常运行的控制平面节点,将该节点上的/etc/kubernetes/admin.conf文件拷贝到你执行kubectl操作的机器上,覆盖~/.kube/config文件。执行kubectl get nodes验证,能正常返回节点列表即配置生效。 - 第二步:逐台删除无效旧节点
对每台已删除的旧节点,依次执行以下命令:- 标记节点为不可调度,避免后续新Pod调度到无效节点:
kubectl cordon <旧节点名称,例如ks01> - 驱逐节点上残留的运行中Pod,节点已离线时这步会报错,直接跳过即可:
kubectl drain <旧节点名称> --delete-emptydir-data --force --ignore-daemonsets - 强制删除集群中存储的节点对象,跳过优雅等待周期:
kubectl delete node <旧节点名称> --force --grace-period=0
所有旧节点删除完成后,即可正常执行kubeadm join命令添加新节点。
- 标记节点为不可调度,避免后续新Pod调度到无效节点:
方案二:全量清理集群环境重新部署
适用于旧集群已经完全损坏,不需要保留任何现有数据,想要从头重新部署集群的场景。注意:以下操作会清除所有K8s相关数据,执行前确认无需要保留的业务内容。
对所有曾经部署过K8s组件的服务器(包含原控制节点、原工作节点),逐台执行以下清理操作:
- 重置kubeadm创建的集群组件:
kubeadm reset -f - 清理残留的网络规则:
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X # 集群使用ipvs网络模式时额外执行下面这条命令 ipvsadm -C
- 删除残留的配置、数据目录:
rm -rf /etc/cni/net.d/ rm -rf /etc/kubernetes/ rm -rf /var/lib/etcd/ rm -rf /var/lib/kubelet/ rm -rf /var/lib/cni/ rm -rf ~/.kube/
所有节点清理完成后,即可按照标准流程重新初始化控制平面、加入新节点,不会再出现旧节点相关报错。
内容的提问来源于stack exchange,提问作者user2236794
相关产品推荐
相关产品推荐

