删除集群节点
本节介绍如何使用 KubeKey 从 Kubernetes 集群中安全移除指定节点,包括从 Kubernetes 中驱逐和删除节点、清理 etcd 成员、卸载容器运行时及清理 DNS 配置。
节点删除过程中将用到开源工具 KubeKey 的 v4.x 版本。有关 KubeKey 的更多信息,请访问 GitHub KubeKey 仓库。
| 说明 |
|---|
本节介绍的节点删除方式仅适用于 Kubernetes 通过 KubeKey 安装的场景。如果您的 Kubernetes 不是通过 KubeKey 安装,请参阅 Kubernetes 官方文档删除节点。 |
| 警告 |
|---|
|
注意: 当前 Web Installer 暂不支持删除集群节点,请通过命令行操作。
获取当前集群配置文件
如果集群是通过 Web Installer 安装的,可通过以下方式获取当前集群的配置文件。
获取 inventory.yaml
cp kubekey/runtime/kubekey.kubesphere.io/v1/inventories/default/default.yaml kkv4-inventory.yaml
获取 config.yaml
cat schema/config.json | jq '{spec: .["kubernetes.json"]}' > kkv4-config.json
删除节点
执行以下命令删除指定节点:
./kk delete nodes node1 node2 -i inventory.yaml -c config.yaml
其中 node1 node2 为待删除节点的名称,需与 inventory.yaml 中定义的 host 名称一致。
KubeKey 会依次执行以下操作:
-
若节点属于 etcd 集群且配置了
--all或相关删除选项,先将该 etcd 成员下线。 -
对 Kubernetes 节点执行
cordon禁止新 Pod 调度,drain驱逐现有的工作负载。 -
若使用 Calico,执行
calicoctl delete node清理网络资源。 -
从 Kubernetes 集群中删除该节点。
-
卸载 Kubernetes 组件和容器运行时(根据配置)。
-
清理本地 DNS hosts 配置(根据配置)。
参数说明
| 参数 | 描述 |
|---|---|
|
Inventory 文件路径,定义节点连接信息 |
|
Config 文件路径,定义集群关键配置 |
|
指定 Kubernetes 版本 |
|
删除所有集群组件,包括 cri、etcd、dns 和 image_registry |
|
同时删除数据目录(如 harbor 数据、registry 数据等),请谨慎使用 |
|
执行成功后从 inventory.yaml 中移除已删除的节点 |
|
离线包路径,离线环境时使用 |
注意事项
-
业务迁移: 删除节点前,请确保该节点上的业务已迁移或备份,避免数据丢失。
-
控制平面节点: 删除控制平面节点会触发额外的安全校验,防止误删导致集群失控。请务必保证删除后集群中仍有可用的控制平面节点。
-
etcd 节点缩容: 当使用 external etcd 模式时,删除 etcd 节点需确保剩余的 etcd 成员数量为奇数,以维持集群高可用。