Node节点禁止调度(平滑维护)方式- cordon,drain,delete

cordon、drain和delete三个命令都会使node停止被调度,后期创建的pod不会继续被调度到该节点上,但操作的暴力程度却不一样。

一、cordon 停止调度(不可调度,临时从K8S集群隔离)

二、drain 驱逐节点(先不可调度,然后排干)

需要注意:

一般线上K8S的PDB(PodDisruptionBudgets)配置的也是符合Pod驱逐的理想情况的,即maxUnavailable设置为0,maxSurge设置为1:

bash;gutter:true; replicas: 3 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate</p> <pre><code> 默认情况下,kubectl drain 会忽略那些不能杀死的系统类型的 pod。drain命令中需要添加三个参数:--force、--ignore-daemonsets、--delete-local-data * --force 当一些pod不是经 ReplicationController, ReplicaSet, Job, DaemonSet 或者 StatefulSet 管理的时候就需要用--force来强制执行 (例如:kube-proxy) * --ignore-daemonsets 无视DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,这是因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),因此deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环.因此这里忽略daemonset。 * --delete-local-data 如果有mount local volumn的pod,会强制杀掉该pod。 drain禁止调度的操作步骤: ;gutter:true;
确定要排空的节点的名称
kubectl get nodes

查看pod
kubectl get po

命令node节点开始释放所有pod,并且不接收新的pod进程
kubectl drain [node-name] –force –ignore-daemonsets –delete-local-data

此时可以对该node节点进行平滑维护,后续需要恢复到k8s集群中:
kubectl uncordon [node-name]

三、delete 删除节点

  • 首先,驱逐Node节点上的pod资源到其他节点重新创建。
  • 驱逐流程:先在Node节点删除pod,然后再在其他Node节点上创建这些pod。
  • node节点删除,master失去对其控制,该节点从k8s集群摘除。
  • delete是一种暴力删除node的方式。在驱逐pod时是强制干掉容器进程,做不到优雅终止Pod。相比较而言,显然drain更安全。

恢复调度(即重新加入到K8S集群中)

  • delete删除后,后续如果需重新加入K8S集群。则需要重启node节点的kubelet服务,重启后,基于node的自注册功能,该节点才能重新加入到K8S集群,并且恢复使用(即恢复可调度的身份)。
  • 另外:如果kubelet服务重启后,node节点系统时间跟其他节点不一致,则导致该节点证书会失效!kubelet注册后,还需要手动approve签发TLS认证操作了。如下示例:

bash;gutter:true; k8s-vm02节点重启后,系统时间变了,跟其他node节点系统时间不一致,导致该节点的集群证书失效! [root@k8s-vm01 ingress]# kubectl exec -ti test-finhub-app-56df548879-ghlb2 -n wiseco -- /bin/bash Error from server: error dialing backend: x509: certificate is valid for k8s-vm01, not k8s-vm02</p> <p>[root@k8s-vm01 ingress]# kubectl get csr NAME AGE REQUESTOR CONDITION csr-7zt2w 50m system:node:k8s-vm02 Pending csr-8sw6k 36m system:node:k8s-vm02 Pending csr-9jv7z 21m system:node:k8s-vm02 Pending</p> <p>需要手动approve签发TLS认证 [root@k8s-vm01 ingress]# kubectl certificate approve csr-7zt2w [root@k8s-vm01 ingress]# kubectl certificate approve csr-8sw6k [root@k8s-vm01 ingress]# kubectl certificate approve csr-9jv7z

四、Node节点平滑维护

通常情况下,如果要对K8S集群中的一台Node节点进行平滑维护,如升级或调整配置。正确的操作:

  • cordon临时从K8S集群隔离出来,标识为SchedulingDisabled不可调度状态。
  • drain排干该节点上的pod资源到其他node节点上。
  • 对该节点展开平滑维护操作,如升级或调整配置。
  • uncordon恢复,重新回到K8S集群,变回可调度状态。

同时注意:为了确保drain驱逐pod的时候,容器应用服务不中断,必须满足:

  • 要驱逐的pod副本数量必须大于1
  • 要配置”反亲和策略”,确保被驱逐的pod被调度到不同的Node节点上
  • deployment采用滚动更新,设置maxUnavailable为0,maxSurge为1

Original: https://www.cnblogs.com/kevingrace/p/14412254.html
Author: 散尽浮华
Title: Node节点禁止调度(平滑维护)方式- cordon,drain,delete

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/546372/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • HTML5封装成桌面应用

    HTML5封装成桌面应用1、准备工作:2、封装3、打包1、准备工作:web项目地址nw.js 下载网址reshacker 下载地址Inno Setup(度娘自行下载安装,有中文版)…

    技术杂谈 2023年5月31日
    099
  • C7N 重置 queryDataSet

    场景: F型布局的页面,点击左侧列表,右侧详情页面的数据需要更新,当时发现详情页中 queryDataSet 数据没有重置 思路: 调用 DataSet 中的 reset 方法,重…

    技术杂谈 2023年5月30日
    086
  • FlinkSQL源码阅读-schema管理

    在Flink SQL中, 元数据的管理分为三层: catalog-> database-> table,我们知道Flink SQL是依托calcite框架来进行SQL执…

    技术杂谈 2023年6月21日
    073
  • 百行以内实现复杂数学表达式计算

    一改以前 本次先上代码 package good;//Evaluate complex expressionsimport java.io.IOException;import j…

    技术杂谈 2023年7月23日
    078
  • Elasticsearch内容汇总[持续更新]

    一、Elasticsearch技术简介 Elastic本身也是一个分布式存储系统,如同其他分布式系统一样,我们经常关注的一些特性如下。 数据可靠性:通过分片副本和事务日志机制保障数…

    技术杂谈 2023年7月24日
    097
  • 动态规划-摘花生

    Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。 地里每个道路的交叉点上都有种着一株花生苗,上面有若干…

    技术杂谈 2023年7月11日
    098
  • 安利一个Mac下好用的抓包工具-Charles

    Charles:让天底下没有难抓的包。 前言 今天给大家推荐一个我所使用过的抓包工具中最好用的抓包工具-Charles(音译:查尔斯),它可以抓各端发起的网络请求,我主要用来抓移动…

    技术杂谈 2023年7月25日
    094
  • Vue路由传递获取参数

    通过Vue传递参数可以分为两种方式: params参数 query参数 params参数传递方式分两种: 路由配置参数 使用$router的push编程式添加 在路由中配置如下: …

    技术杂谈 2023年5月31日
    091
  • OpenFeign快速使用

    1、引入依赖 <dependency> <groupid>org.springframework.cloud</groupid> <art…

    技术杂谈 2023年7月25日
    093
  • Jmix 中 REST API 的两种实现

    你知道吗,在 Jmix 中,REST API 有两种实现方式! 很多应用是采取前后端分离的方式进行开发。这种模式下,对前端的选择相对灵活,可以根据团队的擅长技能选择流行的 Angu…

    技术杂谈 2023年6月21日
    091
  • vue系列—Mustache.js模板引擎介绍及源码解析(十)

    根据官方介绍:Mustache可以被用于html文件、配置文件、源代码等很多场景。它的运行得益于扩展一些标签在模板文件中,然后使用一个hash字典或对象对其进行替换渲染操作。 基本…

    技术杂谈 2023年6月1日
    068
  • Vue-Express

    1、移动端常用UI组件库 1、Vant https://youzan.github.io/vant 2、CodeUI https://didi.github.io/cube-ui …

    技术杂谈 2023年6月1日
    0108
  • .NET线程池最大线程数的限制-记一次IIS并发瓶颈

    IIS并发瓶颈,有几个地方,IIS线程池的最大队列数,工作进程数,最大并发数。这些这里就不展开。主要是最近因为过度使用Task 导致的线程数占用过多,所以实验了一下 .net线程池…

    技术杂谈 2023年6月21日
    074
  • (动态规划)最长递增子列

    先来看问题, 最长递增子列。 即数组中按顺序拿出n个数,(按照原来的顺序)该子数列为递增数列。 例如:1 2 3 -1数列最后结果为3.最对应数列很显然为1 2 3 (注,只输出长…

    技术杂谈 2023年7月24日
    069
  • IT职业后半段发展问题

    八年前,当我结束第二份工作,寻求第三份工作的时候,我就有了一个疑惑,IT职场上45岁以上或是50岁以上的人去哪了,我去请教以前的老领导,他告诉我有一些转行了,有一些他也不清楚,我的…

    技术杂谈 2023年5月30日
    090
  • 轻松搭建Xposed Hook

    0x2.导入xposed库文件XposedBridgeApi-XX.jar,将库文件放在app/lib目录下,自己创建一个lib目录,别放在libs目录下,否则会出错,然后导入库,…

    技术杂谈 2023年5月31日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球