K8s 剔除master节点

K8s 剔除master节点

踢出 Kubernetes Master(控制平面节点) 的过程相较普通 Worker 节点更复杂一些,因为它可能承载以下关键组件:

  • etcd(除非使用外部 etcd)
  • kube-apiserverkube-controller-managerkube-scheduler
  • 本地 kubeconfig(管理员认证)
  • 集群成员身份(尤其是 etcd 成员)

✅ 控制平面(Master)节点踢出集群的标准步骤(包含 etcd 情况)

官方参考文档:


🧭 操作前准备

确保:

  • 已有其他健康的控制平面节点(不能单节点操作)
  • 当前节点不再承担集群核心服务

🧱 标准步骤

✅ 步骤一:备份 etcd(如为嵌入式)

如果该 master 节点运行的是本地 etcd必须先备份,以防数据意外丢失。

ETCDCTL_API=3 etcdctl \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot save /tmp/etcd-backup.db

🚦 步骤二:驱逐并下线该节点

kubectl drain <master-node-name> --delete-emptydir-data --force --ignore-daemonsets
kubectl delete node <master-node-name>

🧩 步骤三:如果是 etcd 成员,则需手动移除 etcd 成员身份

查看 etcd 成员列表(从 其他控制平面节点 执行):
ETCDCTL_API=3 etcdctl member list \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key
根据节点名称获取 member ID 后移除:
ETCDCTL_API=3 etcdctl member remove <member-ID> \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key

🧼 步骤四:在节点本地执行 kubeadm reset

sudo kubeadm reset --force

🧹 步骤五:清理节点残留内容(可选但推荐)

sudo systemctl stop kubelet
sudo systemctl disable kubelet
sudo rm -rf /etc/kubernetes
sudo rm -rf ~/.kube
sudo rm -rf /var/lib/etcd
sudo rm -rf /var/lib/kubelet/*
sudo rm -rf /etc/cni/net.d
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X

🔌 步骤六:如要替换主节点,可重新 kubeadm initjoin --control-plane


🔁 总结流程图(Master 节点踢出)

[1] 备份 etcd(如适用)
       ↓
[2] drain + delete node
       ↓
[3] etcdctl member remove <member-id>(如该节点为 etcd 成员)
       ↓
[4] ssh 登录该节点 → kubeadm reset --force
       ↓
[5] 清理系统文件与网络配置
       ↓
[6] 节点可重新作为 master init 或 worker join

🔐 常见注意事项

情况注意点
单节点 Master不能 reset,需先迁移 etcd 或新建集群
外部 etcd无需执行 member remove,按实际架构调整
控制平面高可用(HA)请确保至少保留大多数 etcd 成员,避免丢失 quorum
想重新加入需要重新配置 --control-plane 加入参数和证书

是否需要我根据你的集群版本(如 v1.24/1.28)、etcd 模式(嵌入式/外部)生成 一键脚本踢出 checklist 模板


✅ Kubernetes Master 节点踢出 Checklist(适用于 kubeadm 部署)

以下是一个 通用且严谨的 Kubernetes 控制平面(Master 节点)踢出 Checklist 模板,适用于通过 kubeadm 部署的集群(HA 或单节点均适用,标注了差异情况),可用于标准化运维、变更管理和团队协作审计。

检查项编号操作项子任务 / 命令是否完成备注
1. 节点确认确认目标 master 节点名称kubectl get nodes确保不是最后一个 master
检查该节点是否运行 etcd查看 /etc/kubernetes/manifests/etcd.yaml 是否存在
2. 备份(若运行 etcd)etcd 数据备份在目标节点执行:
etcdctl snapshot save /tmp/etcd-backup.db
用于恢复
3. 驱逐工作负载drain 节点kubectl drain <node> --delete-emptydir-data --ignore-daemonsets --force
4. 删除节点对象从集群中移除节点kubectl delete node <node>
5. 移除 etcd 成员(如适用)从其他 healthy master 节点执行:
etcdctl member list
找到该节点对应的 member ID
移除 etcd 成员etcdctl member remove <memberID>
6. 节点本地重置重置 kubeadm 配置sudo kubeadm reset --force
停止 kubelet 服务sudo systemctl stop kubelet
清理组件数据sudo rm -rf /etc/kubernetes /var/lib/etcd /var/lib/kubelet /etc/cni/net.d ~/.kube
清理网络规则sudo iptables -F && sudo iptables -t nat -F && sudo iptables -X
7. 容器运行时清理(可选)查看并删除容器Docker:docker ps -a + docker rm -f
containerd:ctr -n k8s.io container list
8. 系统确认kubelet 状态检查systemctl status kubelet 确保已停止
是否释放节点资源(如 IP、主机名)根据 IPAM/DNS 决定是否回收
9. 后续处理(如计划替换节点)是否有新节点加入计划是:准备证书并执行 kubeadm join --control-plane

📦 附加说明:

  • 若为 单节点 master,不能直接执行 reset,必须:

    • 提前创建新 master 节点
    • 将 etcd 快照恢复至新节点并迁移控制权
  • 若为 外部 etcd 集群,跳过 member remove 步骤

  • 对于 生产环境建议记录完整操作日志,供审计/变更回溯


📁 附件建议:

  • etcd 快照文件 /tmp/etcd-backup.db
  • 操作记录(命令输出 + 操作人 + 时间)
  • 节点配置备份(如 /etc/kubernetes/

如你需要我生成 可打印 Markdown / Excel / YAML 格式的 checklist,或者你希望我结合你具体集群状态(如 etcd 分布、节点数)生成定制化清单,请告诉我,我可以立即为你生成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值