首页 > 其他分享 >K8S故障处理:临时设置节点为不可调度(cordon与drain区别)

K8S故障处理:临时设置节点为不可调度(cordon与drain区别)

时间:2024-06-14 18:11:01浏览次数:18  
标签:node cordon drain 驱逐 v1.20 Ready 10.10 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

drain --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能够有效地应对节点维护、升级和故障情况。节点驱逐操作是集群维护的重要组成部分,合理使用并遵循最佳实践,能够确保业务的连续性和可靠性。

标签:node,cordon,drain,驱逐,v1.20,Ready,10.10,K8S,节点
From: https://www.cnblogs.com/xiongzaiqiren/p/18248415

相关文章

  • centos7.9部署k8s的几种方式
    目录一、常见的k8s部署方式1、使用kubeadm工具部署2、基于二进制文件的部署方式3、云服务提供商的托管Kubernetes服务4、使用容器镜像部署或自动化部署工具二、使用kubeadm工具部署1、硬件准备(虚拟主机)2、环境准备2.1、所有机器关闭防火墙2.2、所有机器关闭selinux2.3、所有机器......
  • 43、k8s-数据存储-高级存储-生命周期
    ·资源供应:管理员手动创建底层存储和PV·资源绑定:用户创建PVC,kubernetes负责根据PVC的声明去寻找PV,并绑定在用户定义好PVC之后,系统将根据PVC对存储资源的请求在已存在的PV中选择一个满足条件的。一旦找到,就将该PV与用户定义的PVC进行绑定,用户的应用就可以使用这个PVC了、如......
  • 42、k8s-数据存储-高级存储-pv和pvc、NFS服务器
    PV(PersistentVolume)是持久化卷的意思、是对底层的共享存储的一种抽象、一般情况下PV有kubernetes管理员进行创建和配置、他与底层具体的共享存储技术有关、并通过插件完成于共享存储的对接PVC(PersistentVolumeClaim)是持久卷声明的意思、是用户对于存储需求的一种声明、换句话......
  • 6、k8s-资源管理方式-命令式对象管理-命令式对象配置-声明式对象配置--一切皆是资源
    注意:资源管理的三种方式都是在master节点上运行的、如果想在node节点上运行下边的指令操作、需要将master节点上的配置文件 .kube/ 复制到node节点上:(scp -r/root/.kube/  node1:/root/.kube)资源管理方式:三种方式1、命令式对象管理--直接使用命令去操作kubernetes资源......
  • K8S环境部署Prometheus
    K8S环境部署Prometheus记录在K8S1.18版本环境下部署Prometheus0.5版本。1.下载kube-prometheus仓库gitclonehttps://github.com/coreos/kube-prometheus.gitcdkube-prometheus笔者安装的K8S版本是1.18,prometheus选择配套的分支release-0.5:#切换到release-0.5gitc......
  • 实战 k8s----初识
    什么是k8s?k8s是谷歌开源的一套完整的容器管理平台,方便我们直接管理容器应用。谷歌称之为,kubernetes,[kubə’netis],(跟我一起读库波尔耐题思,重音在耐的音上),由于字母太多,我们简称为k8s,8代表k-->s之间的8个字母。kubernetes译为舵手,标识是一个航海舵。而容器直译为集装箱,也就是舵手......
  • K8S部署Metrics-Server
    K8S部署Metrics-Server1)下载manifest的YAMLwgethttps://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml2)编辑需要在添加-–kubelet-insecure-tlscontainers:-args:---kubelet-insecure-t......
  • SQLCMD 密码中的 K8S 秘密用法始终为空
    我试图使用K8Ssecret密码连接到SQL服务器,但无论我使用什么语法或方法,密码总是空的。如果我硬编码密码,则一切正常。我还可以使用此命令在POD中打印密码,它还会返回存储在密码中的密码,因此POD可以实际访问密码。kubectlexec-itpodname--printenvMSS......
  • 基于GO语言,K8s+gRPC实战云原生微服务
    介绍K8s在云原生微服务开发中,作为微服务治理框架越来越受企业的青睐,掌握该技术解决方案更有竞争力,课程从企业实际开发中提取精髓,从K8s、gRPC底层原理剖析到服务治理解决方案设计落地,到云上部署,更平滑的学习曲线,助力你成为云原生开发领域的牛人。你将学到掌握整套K8s微服务......
  • 云原生Kubernetes系列项目实战-k8s集群+高可用负载均衡层+防火墙
    一、Kubernetes区域可采用Kubeadm方式进行安装:名称主机部署服务master192.168.91.10docker、kubeadm、kubelet、kubectl、flannelnode01192.168.91.11docker、kubeadm、kubelet、kubectl、flannelnode02192.168.91.20docker、kubeadm、kubelet、kubectl、flannel1.系统初......