目录标题
K8s 剔除master节点
踢出 Kubernetes Master(控制平面节点) 的过程相较普通 Worker 节点更复杂一些,因为它可能承载以下关键组件:
etcd(除非使用外部 etcd)kube-apiserver、kube-controller-manager、kube-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 init 或 join --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 -fcontainerd: 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 分布、节点数)生成定制化清单,请告诉我,我可以立即为你生成。
1050

被折叠的 条评论
为什么被折叠?



