K8S故障处理指南:临时设置节点为不可调度

运维
本文将介绍节点驱逐的基本概念、使用场景、解除驱逐的步骤以及注意事项。

在Kubernetes中,节点驱逐是一种管理和维护集群的重要操作,允许节点在维护、升级或者发生故障时从集群中移除,等到节点修复后,再重新承担pod调度功能。

1.K8s节点驱逐

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

2.使用场景

节点维护

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

节点升级

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

硬件故障或维修

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

3.命令说明

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

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

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

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

总结:两个命令的区别在于,cordon命令执行后,新的pod创建不会调度过来,老的pod不受影响,drain执行会额外清除节点上的pod

4.操作步骤

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

[root@k8s ~]# kubectl  get node
NAME           STATUS     ROLES         AGE    VERSION
10.10.12.10   Ready      master,node   172d   v1.20.6
10.10.12.26   Ready      master,node   172d   v1.20.6
10.10.12.27   Ready      master,node   172d   v1.20.6
10.10.12.15   Ready      node          170d   v1.20.6
10.10.12.11   NotReady   node          60d    v1.20.6

故障节点标记为不可调度

kubectl cordon <node-name>   #此处name为节点ip
[root@k8s ~]# kubectl  get node
NAME           STATUS     ROLES         AGE    VERSION
10.10.12.10   Ready      master,node   172d   v1.20.6
10.10.12.26   Ready      master,node   172d   v1.20.6
10.10.12.27   Ready      master,node   172d   v1.20.6
10.10.12.15   Ready      node          170d   v1.20.6
10.10.12.11   NotReady,SchedulingDisabled   node     60d    v1.20.6
kubectl drain <node-name>

drain <node-name> --ignore-daemonsets

kubectl drain 命令会触发节点驱逐操作,将节点上的Pod迁移到其他节点上。

参数说明:

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

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

查看节点驱逐状态

5.解除驱逐

当处理完节点问题,重新恢复为ready状态后,需要将节点恢复可调度状态

取消节点驱逐

[root@k8s ~]# kubectl uncordon  10.10.12.11
node/10.10.12.11 uncordoned
[root@k8s ~]# 
[root@k8s ~]# kubectl  get node
NAME           STATUS     ROLES         AGE    VERSION
10.10.12.10   Ready      master,node   172d   v1.20.6
10.10.12.26   Ready      master,node   172d   v1.20.6
10.10.12.27   Ready      master,node   172d   v1.20.6
10.10.12.15   Ready      node          170d   v1.20.6
10.10.12.11   Ready      node          60d    v1.20.6

6. 注意事项

  • DaemonSet

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

确保Pod能够重新调度

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

确认服务的高可用性

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

通过良好的节点管理和调度策略,Kubernetes能够有效地应对节点维护、升级和故障情况。节点驱逐操作是集群维护的重要组成部分,合理使用并遵循最佳实践,能够确保业务的连续性和可靠性。

责任编辑:庞桂玉 来源: 运维之美
相关推荐

2024-03-18 15:44:48

K8S故障运维

2024-02-20 16:55:14

K8S云计算

2024-03-12 15:47:12

Kubernetes容器K8S

2021-10-27 08:25:10

K8SRedis数据持久化

2021-08-20 11:35:04

服务运维 故障

2021-04-23 08:35:16

k8s故障检测

2024-07-22 13:43:31

Kubernetes容器

2021-11-29 08:48:00

K8S KubernetesAirflow

2022-04-22 13:32:01

K8s容器引擎架构

2022-09-05 14:45:56

前端K8S

2023-04-30 00:02:40

K8Skubelet数据

2023-11-06 07:16:22

WasmK8s模块

2022-08-27 22:36:18

Kubernetes调度器

2023-09-06 08:12:04

k8s云原生

2024-06-12 13:21:06

2022-04-07 10:17:18

云原生服务器优化

2024-03-27 14:54:21

KubernetesK8S集群

2022-02-08 15:59:29

k3sk8sDevOps

2022-07-20 07:23:40

Kubernetes容器

2023-05-25 21:38:30

点赞
收藏

51CTO技术栈公众号