cordon设置节点不可调度、uncordon恢复节点可调度、drain停机维护、 taint设置更新节点的污点

本文主要是介绍cordon设置节点不可调度、uncordon恢复节点可调度、drain停机维护、 taint设置更新节点的污点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

环境:k8s 1.22.15、docker
一直对cordon、drain、 taint命令混淆,所以来区别一下。

cordon设置节点不可调度

kubectl cordon NODE命令设置节点不可调度,仅仅是节点不可调度而已,已存在的pod不会驱逐,新的pod不会被调度到该节点上。
Usage:kubectl cordon NODE [options]
演示示例:
#设置node2不可调度
kubectl cordon node2
#查看节点信息,现在node2已经设置不可调度了,所以新创建的pod不会被调度到node2节点,之前就已经存在于node2节点上的pod也不会被驱逐
[root@matser ~]# kubectl  describe node node2 | grep Unschedulable
Unschedulable:      true
[root@matser ~]# kubectl  get node node2
NAME    STATUS                     ROLES   AGE    VERSION
node2   Ready,SchedulingDisabled   node    353d   v1.22.15
#我们发现,当设置节点不可调度的时候,k8s会自动打上污点,如下:
Taints:             node.kubernetes.io/unschedulable:NoSchedule
Unschedulable:      true#使用path命令也可以设置节点不可调度
kubectl patch node node2 -p '{"spec":{"unschedulable": true}}'
#使用path命令恢复节点可以可调度
kubectl patch node node2 -p '{"spec":{"unschedulable": false}}'#除了上面的使用cordon、patch命令设置节点不可调度之后之外,还可以直接修改节点资源来实现节点不可调度
#默认没有unschedulable参数,在spec下添加unschedulable: true 即可实现设置node不可调度
kubectl  edit node node2
#去除不可调度也可以直接kubectl  edit node node2,找到unschedulable设置false即可

uncordon恢复节点可调度

与cordon命令设置节点不可调度,对应的恢复节点可调度的命令是uncordon

Usage:
kubectl uncordon NODE [options]
演示示例:
#恢复node2节点可调度
kubectl uncordon node2

drain停机维护

drain命令用于节点停机维护、节点下线的操作,其原理也是通过设置节点不可调度并且驱逐节点的全部pod来实现的。

Usage:kubectl drain NODE [options]#驱逐pod,默认当节点存在ds的pod时,命令执行报错,所以需要加上--ignore-daemonsets=true参数kubectl drain node2 --ignore-daemonsets=true
--ignore-daemonsets
#强制驱逐pod
kubectl drain node2 --force
#设置驱逐15分钟的宽限期
kubectl drain node2 --ignore-daemonsets=true --grace-period=900#我们发现,当使用drain命令之后,k8s默认会将节点设置为不可调度
Taints:             node.kubernetes.io/unschedulable:NoSchedule
Unschedulable:      true#所以以上,当我们需要对一个节点下线停机维护时,可以这样做:
#先设置节点不可调度,防止新的pod调度到节点,此时不会驱逐节点上的pod
kubectl cordon node2
#此时使用drain命令驱逐节点pod
kubectl drain node2 --ignore-daemonsets=true
#节点维护之后需要重新上线恢复调度
kubectl uncordon node2

taint 设置更新node 上的污点

taints,污点是定义在node节点之上的键值型属性数据,用于让node节点拒绝将pod调度运行于其上,除非该pod对象具有接纳节点污点的容忍度。
污点是pod调度中的一种调度策略,污点作用在node节点上,当为某个node节点打上污点,则表示该node是否允许pod调度过来。
污点的格式:key=value:effect,其中key和value是污点的标签,可以自行拟定,effect描述污点的作用,effect支持如下三个选项:
PreferNoSchedul: kubernetes将尽量避免把pod调度到具有该污点的node上,除非没有其他节点可调度;
NoSchedule: kubernetes将不会把pod调度到具有该污点的node上,但不会影响当前node已存在的pod;
NoExecute: kubernetes将不会把pod调度到具有该污点的node上,同时还会驱逐node上已存在的pod;Usage:kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]演示示例:
#设置污点,指定标签为dedicated=special-user,策略为NoSchedule,如果该标签已存在则更新策略
kubectl taint nodes node2 dedicated=special-user:NoSchedule
#移除key为dedicated的NoSchedule污点
kubectl taint nodes node2 dedicated:NoSchedule-
#移除key为dedicated的所有污点
kubectl taint nodes node2 dedicated-
#查看污点
[root@master ~]# kubectl  describe nodes node2 | grep Taints
Taints:             dedicated=special-user:NoSchedule#以上,train的设置并不会影响节点的Unschedulable,如下所示;因为污点仅仅是污点,而当pod存在容忍时,仍然是可以调度到节点上的
[root@matser ~]# kubectl describe  node node2 | grep  -A1 -i Taints
Taints:             dedicated=special-user:NoSchedule
Unschedulable:      false
[root@matser ~]# kubectl  get node node2
NAME    STATUS   ROLES   AGE    VERSION
node2   Ready    node    353d   v1.22.15#注意taint并不能代替drain,如下
kubectl taint nodes node2 dedicated=special-user:NoExecute
#测试node2上的普通pod已经被驱逐,但是ds的pod没有被驱逐,因为pod存在NoExecute的容忍
[root@matser ~]# kubectl describe  node node2 | grep  -A1 -i Taints
Taints:             dedicated=special-user:NoExecute
Unschedulable:      false
[root@matser ~]# kubectl  get node node2	#节点仍然是可以调度的,只要存在pod中存在容忍即可调度到node2节点
NAME    STATUS   ROLES   AGE    VERSION
node2   Ready    node    353d   v1.22.15

总结

1、cordon命令用于设置节点不可调度
#设置节点不可调度,不会驱逐已有的pod
kubectl cordon node2
#恢复节点可调度
kubectl uncordon node22、cordon 命令用于节点下线停机维护
#先设置节点不可调度,防止新的pod调度到节点,此时不会驱逐节点上的pod
kubectl cordon node2
#此时使用drain命令驱逐节点pod
kubectl drain node2 --ignore-daemonsets=true
#节点维护之后需要重新上线恢复可调度即可
kubectl uncordon node2小结:
使用cordon命令设置节点不可调度或cordon命令驱逐节点pod下线停机维护都会给节点打上污点,如下:
Taints:             node.kubernetes.io/unschedulable:NoSchedule
Unschedulable:      true3、taint设置更新节点的污点
污点的格式: key=value:effect,key和value是污点的标签,可以自行拟定,effect描述污点的作用,effect支持如下三个选项:
PreferNoSchedul: kubernetes将尽量避免把pod调度到具有该污点的node上,除非没有其他节点可调度;
NoSchedule: kubernetes将不会把pod调度到具有该污点的node上,但不会影响当前node已存在的pod;
NoExecute: kubernetes将不会把pod调度到具有该污点的node上,同时还会驱逐node上已存在的pod;#设置污点,指定标签为dedicated=special-user,策略为NoSchedule
kubectl taint nodes node2 dedicated=special-user:NoSchedule
#移除key为dedicated的NoSchedule污点
kubectl taint nodes node2 dedicated:NoSchedule-
#移除key为dedicated的所有污点
kubectl taint nodes node2 dedicated-
#设置node2污点,策略为NoExecute
kubectl taint nodes node2 dedicated=special-user:NoExecute
#注意一点,不要混淆节点不可调度,节点上存在污点节点仍然是可以调度的,只要pod中存在容忍即可调度到node2节点
[root@matser ~]# kubectl describe  node node2 | grep  -A1 -i Taints
Taints:             dedicated=special-user:NoExecute
Unschedulable:      false		#不要混淆节点不可调度
[root@matser ~]# kubectl  get node node2
NAME    STATUS   ROLES   AGE    VERSION
node2   Ready    node    353d   v1.22.15

这篇关于cordon设置节点不可调度、uncordon恢复节点可调度、drain停机维护、 taint设置更新节点的污点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/262443

相关文章

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch