K8S故障临时设置节点为不可调度

一、K8s节点驱逐

节点驱逐是指将节点上运行的Pod迁移到其他可用节点上,并暂时从集群中移除目标节点。这个操作通常在节点维护、系统升级、硬件故障或者其它需要暂时离线节点的场景下使用。

二、使用场景

节点维护

在进行节点维护时,需要将节点暂时移除,确保Pod能够在其他节点上继续运行。有一点要注意,在节点驱逐前,要保持集群中服务多副本,否则驱逐过程中可能会导致业务不可用

节点升级

当需要对节点进行Kubernetes版本升级或者操作系统升级时,可以使用节点驱逐来确保服务的可用性。

硬件故障或维修

当节点发生硬件故障或需要维修时,可以通过节点驱逐操作将节点下的Pod迁移到其他健康的节点上。

三、命令说明

cordon : 停止调度【不可调度,临时从K8S集群隔离】

该命令会将node标记为SchedulingDisabled不可调度状态,影响最小,之后K8S再创建的pod资源,不会被调度到该节点。原有的 pod 不受影响,仍正常对外提供服务。

drain :驱逐节点【设置不可调度,然后排干节点pod】

该命令操作,会先驱逐Node上的pod资源到其他节点重新创建,将节点调为SchedulingDisabled不可调度状态

四、操作步骤

1)K8S集群,其中一个node节点发生故障,状态为notready

bash 复制代码
kubectl get node

2)故障节点标记为不可调度

bash 复制代码
kubectl cordon <node-name>   #此处name为节点ip

3)驱逐故障节点已经运行的业务容器

bash 复制代码
kubectl drain <node-name> 

参数说明:

--delete-emptydir-data:强制驱逐节点上绑定了本地存储的Pod,例如coredns。

--ignore-daemonsets:忽略节点上的守护进程集Pod,通常为DaemonSet类型的Pod,例如flannel

五、解除驱逐

1)取消节点驱逐

bash 复制代码
kubectl uncordon <node-name>

六、注意事项

1)DaemonSet

在进行节点驱逐时,需要注意DaemonSet中的Pod,确保它们不会被驱逐,以维持集群的关键服务。

2)确保Pod能够重新调度

在节点驱逐前,确保集群中有足够的可用资源,以便Pod能够顺利地重新调度到其他节点上。

3)确认服务的高可用性

在进行节点驱逐时,要确保相关服务具备高可用性,以防止驱逐操作引起的业务中断,所有服务的多副本还是很有必要的

相关推荐
寒冰碧海2 小时前
大模型部署从0到1(三):单机多卡 vLLM 部署Qwen3.6实战|Docker Compose 一键启动
docker·容器·vllm
潘正翔13 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
刘马想放假1 天前
Docker 从入门到进阶:一篇写给工程师的系统化实战指南
运维·docker·容器
zjun30211 天前
如何搭建TRAE IDE 连接到容器开发环境
docker·容器·ascend·trae
寒冰碧海1 天前
大模型部署从0到1(一):通用环境全流程准备|NVIDIA驱动+Docker+NVIDIA Container Toolkit
运维·docker·容器
hj2862511 天前
K8S 核心组件与资源概念 + 带注释命令 + 实操案例版笔记
笔记·容器·kubernetes
nece0011 天前
Kubernetes v1.36.0 + Ubuntu24.04 + containerd 2.x WordPress 完整部署文档
云原生·容器·kubernetes
你想考研啊1 天前
七、Docker 容器 + Docker Compose单机部署理发店系统
docker·容器·composer
AOwhisky2 天前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
众人皆醒我独醉2 天前
OpenShift RBAC 与平台安全策略:比 K8s 多出来的那几道锁,每道都是为了堵一个曾经发生过的事故
面试·kubernetes