k8s集群删除/添加worker节点
🔧 删除旧的 Worker 节点
安全地移除一个 Worker 节点可以确保你的服务平稳迁移,避免中断。
|
步骤 |
关键命令/操作 |
说明 |
|---|---|---|
|
1. 排空 (Drain) 节点 |
|
将节点置为不可调度,并将其上的 Pod 安全驱逐到其他节点。 |
|
2. 确认节点已清空 |
`kubectl get pods --all-namespaces -o wide |
grep <旧节点名称>` |
|
3. 从集群中删除节点 |
|
从 Kubernetes API 中移除该节点 |
|
4. 在旧节点上清理 |
|
停止服务并清理配置、数据文件和网络规则,为可能的重用做准备 |
1. 执行kubectl drain后,节点状态有变化

2. node2删除后,为何还能看到之前node2上的pod?
🎯 根本原因
这是因为 Kubernetes 的 Pod 删除是异步进行的:
-
节点删除是立即的:
kubectl delete node命令会立即从 API Server 中移除节点对象 -
Pod 清理是滞后的:节点上的 Pod 不会立即被删除,需要等待垃圾收集器处理
🛠️ 解决方案
方案1:手动删除残留的 Pod(推荐)
# 删除 node2 上残留的 Flannel Pod kubectl delete pod kube-flannel-ds-xckvk -n kube-flannel # 删除 node2 上残留的 kube-proxy Pod kubectl delete pod kube-proxy-mjjkg -n kube-system # 验证所有 Pod 状态 kubectl get pods -A -o wide
方案2:等待自动垃圾回收
Kubernetes 垃圾收集器通常会在几分钟内自动清理这些"孤儿Pod",等待2-5分钟后再查看

方案3:强制立即清理
如果需要立即清理,可以重启相关控制器:
# 重启 kube-controller-manager(会触发更快的垃圾回收)
kubectl delete pod -n kube-system -l component=kube-controller-manager
💡 深入理解 Pod 生命周期
为什么会出现这种情况?
-
DaemonSet 的特殊性:
-
Flannel 和 kube-proxy 都是 DaemonSet
-
DaemonSet 确保每个节点上运行一个 Pod 实例
-
当节点被删除时,对应的 DaemonSet Pod 会变成"孤儿"
-
-
Kubernetes 的最终一致性:
-
节点删除是声明式操作
-
Pod 清理是后台异步过程
-
这体现了 Kubernetes 的"最终一致性"设计理念
-
验证节点真正状态
# 检查节点详细状态(确认是否真的已删除) kubectl get node -o yaml | grep -A 5 -B 5 "name:" # 检查 DaemonSet 状态 kubectl get daemonsets --all-namespaces
🎯 添加新的 Worker 节点
成功移除旧节点后,接下来是将新节点加入集群。
|
步骤 |
关键命令/操作 |
说明 |
|---|---|---|
|
1. 新节点基础准备 |
安装 docker/containerd, kubeadm, kubelet, kubectl |
确保容器运行时和 Kubernetes 组件版本与集群现有版本一致 |
|
2. 获取加入命令 |
在 Master 节点执行: |
此命令会输出一个包含令牌和哈希值的完整 |
|
3. 新节点加入集群 |
在新节点上执行上一步获取的 |
命令格式类似: |
|
4. 验证新节点 |
|
新节点应出现在列表中,状态为 |
posted on 2025-11-25 15:26 Karlkiller 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号