k8s 驱逐node节点

kubectl drain ip --delete-local-data --force --ignore-daemonsets

kubectl uncordon ip

转载于:https://my.oschina.net/xueyi28/blog/3084792

在 Kubernetes 中,“切换节点”可以理解为将工作负载从一个节点迁移到另一个节点的过程。这通常是为了维护某些节点、优化资源分配或应对节点故障等场景而设计的操作。下面详细介绍如何实现这一目标。 --- ### **一、Kubernetes 切换节点的核心思路** 1. **驱逐 Pod**:通过标记某个节点不可调度,并主动迁移该节点上的 Pod。 2. **更新调度规则**:调整部署的副本分布,让新的 Pod 被创建到其他可用节点上。 3. **恢复节点(可选)**:当完成对原节点的维护后,重新允许其参与任务调度。 这种方法基于 K8s 的内置功能如 `kubectl drain` 和 `kubectl cordon` 实现。 --- ### **二、详细操作步骤** #### **步骤 1:标识节点不可调度 (Cordon)** 使用以下命令禁止新 Pod 被调度至指定节点: ```bash kubectl cordon <node-name> ``` 例如: ```bash kubectl cordon node-01 ``` 此时,`node-01` 已经不再接收新增的工作负载,但仍保留现有正在运行的任务。 --- #### **步骤 2:清空节点上的Pod (Drain)** 为了安全地清除某节点的所有非关键型 Pods(即不会删除 DaemonSet 或静态 Pods),可以执行如下命令: ```bash kubectl drain <node-name> \ --ignore-daemonsets=true \ # 忽略DaemonSets类型的pods --delete-emptydir-data=false # 是否清理EmptyDir数据卷内容,默认false保留下挂载点的数据 ``` 实例演示: ```bash kubectl drain node-01 --ignore-daemonsets=true ``` 此过程会优雅终止选定节点上的普通业务容器并将它们重新安排到集群内的其它健康机器上去。 --- #### **步骤 3:验证结果** 检查当前所有节点状态及各节点承载情况: ```bash watch -n 5 'kubectl get pods -o wide' ``` 观察源节点(`node-01`)是否还有残留pod;同时确认其余成员正常承接转移来的作业。 --- #### **步骤 4:修复完成后解除保护(Cordon逆向操作)** 一旦涉及的服务已稳定转移到别处并且原始主机得到妥善修理,则应该将其恢复正常运作模式: ```bash kubectl uncordon <node-name> ``` 比如: ```bash kubectl uncordon node-01 ``` 至此便完成了整个迁移流程闭环。 --- ### **三、注意事项** - 对于重要的生产环境应用,在实施前建议提前做好备份以及详细的规划文档; - 如果存在亲和性和反亲和性的设定可能会干扰上述方法的效果,因此需额外注意相关约束条件的影响范围; - 在大规模集群里批量处理多个节点时务必小心谨慎,以免引发连锁反应影响整体性能甚至导致服务中断。 --- ### **总结** 通过结合使用 `cordon` 和 `drain` 命令,我们可以轻松达成 k8s 内部的平滑节点转换需求,这对于日常运维管理和应急响应均极为有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值