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)

大家都在看

  • Java案例——数组元素的移动及换位

    需求一:给出一个固定数组int[] array = {1, 3, 6, 8, 7, 9, 4, 10},要求将某一元素放到某一元素后,例如将1放到6后,输出结果为array = {…

    技术杂谈 2023年7月24日
    093
  • dremio 22 udf 功能

    dremio 22 开始支持了直接基于sql 的udf,很方便,强大,但是目前对于社区版来说智能创建,暂时还不能直接使用目前udf 面向的创建是基于行以及列级别的访问控制 创建ud…

    技术杂谈 2023年5月30日
    0148
  • Shell揭秘——程序退出状态码

    程序退出状态码 前言 在本篇文章当中主要给大家介绍一个shell的小知识——状态码。这是当我们的程序退出的时候,子进程会将自己程序的退出码传递给父进程,有时候我们可以利用这一操作做…

    技术杂谈 2023年7月24日
    099
  • 融360蒋宏:自动化特征工程和自动建模在风控场景的应用

    01 背景和问题 目前,模型开发的流程越来越规范化,通常可以分为业务分析、样本准备、特征工程、模型构建、模型评估及监控这几个步骤。其中,特征工程和模型构建在建模的整个流程中依然非常…

    技术杂谈 2023年7月25日
    094
  • 准备执行Gremlin的图形化环境

    Gremlin是Apache TinkerPop框架下实现的图遍历语言,支持OLTP与OLAP,是目前图数据库领域主流的查询语言,可类比SQL语言之于关系型数据库。 进入hugeg…

    技术杂谈 2023年6月1日
    0123
  • 在线标准程序员计算器

    摘自:https://tooltt.com/calc/ 在线标准程序员计算器 提供在线计算、科学计算、电子计算、函数计算与统计等在线计算功能。 https://tooltt.com…

    技术杂谈 2023年5月31日
    0112
  • 山果湾农文旅/自然教育 商业计划书

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/LittleHann/p/16295816.htmlAu…

    技术杂谈 2023年5月31日
    0121
  • 解决 IdentityServer 授权与登录分离的问题

    园子 open api (api.cnblogs.com) 的授权服务器(authorization server,oauth.cnblogs.com)基于 IdentyServe…

    技术杂谈 2023年5月31日
    0129
  • windows下安装node.js及环境配置、部署项目【转】

    回到顶部 一、操作步骤 ①下载node.js ②安装配置环境变量 ③部署项目启动访问 回到顶部 二、详细步骤 1、选择对应系统下载:https://nodejs.org/en/do…

    技术杂谈 2023年5月31日
    0109
  • Beyond Compare如何同时比较三文件

    首先需要明确一点,文本比较和文本合并的相同点和不同点,不同点从字面意思就可以明白,文本比较无法进行文本合并任务,但是反过来就是相同点,文本合并可以执行文本比较操作,在理解这一点之后…

    技术杂谈 2023年5月30日
    0146
  • 一篇文章说清 webpack、vite、vue-cli、create-vue 的区别

    webpack、vite、vue-cli、create-vue 这些都是什么?看着有点晕,不要怕,我们一起来分辨一下。 先看这个表格: 脚手架 vue-cli create-vue…

    技术杂谈 2023年5月31日
    0110
  • 其他

    1、【剑指Offer学习】【面试题01:实现赋值运算符函数】 2、【剑指Offer学习】【面试题02:实现Singleton 模式——七种实现方式】 5、【剑指Offer学习】【面…

    技术杂谈 2023年6月21日
    0105
  • 爬虫亚马逊Bestselling类别产品数据TOP100

    1 # -*- coding: utf-8 -*- 2 # @Time : 2020/9/11 16:23 3 # @Author : Chunfang 4 # @Email : …

    技术杂谈 2023年7月23日
    0106
  • Java实现7种常见密码算法

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介 前面在密码学入门一文中讲解了各种常见的密码学概念、算法与运用场景,但没有介绍过代码,因此,为作…

    技术杂谈 2023年7月24日
    093
  • [转载]Redis 持久化之RDB和AOF

    在正式数据(当然是非生产环境啦)练习以下操作时,一定一定一定记得备份dump.rdb文件。我给自己的服务器添加了aof持久化配置,重启后,发现aof文件为空,就想把rdb文件恢复到…

    技术杂谈 2023年7月10日
    0110
  • 域名ICP备案<阿里云>

    阅读指引 适用人:想要通过国内域名访问页面或者接口,需要进行ICP备案解决问题:备案过程中发生的问题阅读耗时:3分钟参考链接:阿里云ICP流程-视频、备案相关问题、注销备案相关问题…

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