0

0

Kubernetes(k8s)-隔离(Cordon)和驱逐(Drain)

雪夜

雪夜

发布时间:2025-05-06 18:04:20

|

562人浏览过

|

来源于php中文网

原创

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

Kubernetes(k8s)-隔离(Cordon)和驱逐(Drain)

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们前面通过多个小节来介绍了Kubernetes来讲解Node和Pod之间的调度和绑定关系,当我们的集群按照我们预期运行一段时间以后,某些机器因为软件或者硬件等其他原因需要进行维修,但是这些机器已经运行了不少Pod,这个时候我们应该怎么做呢?是直接暴力关机让Pod通过控制器自动飘逸到其他节点上,还是有更优雅一点的方案?针对这个问题,Kubernetes给我们提供了两个优雅的方案:隔离(Cordon)和驱逐(Eviction)。

在 Kubernetes(k8s)中,隔离(Cordon)和驱逐(Eviction)是管理节点和 Pod 的两个重要操作。

隔离(Cordon)

隔离节点是指将该节点标记为不可调度(NoSchedule),这意味着新的 Pod 不会被调度到该节点上,但是节点上正在运行的 Pod 仍然可以正常运行。

隔离节点的步骤如下:

代码语言:javascript代码运行次数:0运行复制
#获取所有节点kubectl get nodes#对需要隔离的节点进行隔离操作kubectl cordon node01
Kubernetes(k8s)-隔离(Cordon)和驱逐(Drain)

实际上这个隔离就是给这个主机打上一个污点和添加一个新字段。

代码语言:javascript代码运行次数:0运行复制
Taints:             node.kubernetes.io/unschedulable:NoScheduleUnschedulable:      true#添加的污点和状态值,

隔离节点通常用于节点维护,比如升级内核、硬件维护等,以避免新的 Pod 被调度到正在维护的节点上。隔离完成以后,只是解决了新Pod无法调度进来,但是还没有解决历史Pod的问题,这个就是下面要介绍的驱逐的功能。

驱逐(Eviction)

驱逐 Pod 是指将 Pod 从节点上强制删除,通常用于节点资源不足或者节点需要维护的情况。驱逐 Pod 与直接删除 Pod 的不同之处在于,驱逐会考虑 Pod 的 QoS 级别和策略,按照一定的顺序进行。

驱逐 Pod 的步骤如下:

Teleporthq
Teleporthq

一体化AI网站生成器,能够快速设计和部署静态网站

下载
代码语言:javascript代码运行次数:0运行复制
kubectl drain node02 --ignore-daemonsets

这个命令会驱逐节点上的所有 Pod,--ignore-daemonsets 表示忽略DaemonSet管理的 Pod。如果出现使用了本地盘的PV&PVC则需要加上下面的参数才能正常驱逐。--delete-local-data 表示即使 Pod 使用了本地数据卷也会被驱逐(但是这个驱逐以后的Pod状态会处于Pending状态,因为它的数据在这个机器,它无法被调度到其他节点,所以我们这种凡是带有数据的需要考虑它的高可用,避免出现因为这个Pod被驱逐而导致业务不可用的情况。

这两个操作都需要谨慎使用,因为它们会影响到服务的可用性和集群的稳定性。通常在进行这些操作之前,需要确保有足够的资源冗余,以及良好的监控和通知机制,以避免对业务造成不必要的影响。

Kubernetes(k8s)-隔离(Cordon)和驱逐(Drain)

维护

当我们完成隔离和驱逐以后,这个节点就只剩余DaemonSet的Pod,由于该类型的Pod级别都是属于Agent或者日志采集类,对业务无影响,所以这个时候我们可以正常对这个机器进行关机维护操作。

取消隔离

当我们对这个机器维护完成以后,开机运行以后,这个节点的状态会自动变成Ready状态,但是由于我们执行了隔离操作,所以这个时候除了DaemonSet会正常运行外,其他Pod并不会调度过来,所以我们还需要对他执行取消隔离操作。

代码语言:javascript代码运行次数:0运行复制
kubectl uncordon node02

这个时候,我们的Pod就会正常调度,我们的维护就算完成,但是根据经验,我们一般会对某个Pod进行扩容操作,确保他真的能调度到这个新节点上。避免未做测试而产生其他问题。

历史推荐内容Docker-docker基本信息,基本命令,dockerfile,原理,仓库,存储网络日志,番外篇云计算&虚拟化-包括服务器购买,虚拟化介绍,虚拟磁盘,虚拟网络,创建虚拟机,安装虚拟机,dashboard,xml解释,克隆,快照,初始化,esxi介绍。Linux进阶-包括硬件,日常运维,基础软件,日志,进阶命令,防火墙,shell编程,内核,linux系统及初始化Linux基础-包括文件的增删改查,磁盘管理,网络配置,用户配置,权限配置

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

554

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

374

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

732

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

477

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

394

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

991

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

657

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

551

2023.09.20

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号