深入解析 Kubernetes 节点操作:Cordon、Uncordon 和 Drain 的使用与最佳实践

摘要

Kubernetes 是一个用于自动化容器部署、扩展和管理的开源系统,而节点管理是其核心功能之一。cordonuncordondrain 是 Kubernetes 提供的与节点操作相关的三个重要命令,用于节点的调度控制和维护管理。本文将从概念、命令解析、内部机制和最佳实践等多方面,深入解析这三个命令的功能、作用及其在实际场景中的应用。


1. 背景与概述

在 Kubernetes 集群中,Node(节点)是运行 Pod 的基本单元。当一个节点需要进行维护、升级或下线时,必须确保节点上的负载安全地迁移,同时避免对应用服务造成中断。为此,Kubernetes 提供了一套与节点状态管理相关的工具:

  • kubectl cordon:标记节点为不可调度状态。
  • kubectl uncordon:将节点恢复为可调度状态。
  • kubectl drain:驱逐节点上的 Pod,并自动将节点设置为不可调度。

2. 三个命令的核心概念

2.1. cordon

cordon 命令的核心功能是将节点标记为 Unschedulable。在此状态下,调度器(Scheduler)将不会向该节点分配新的 Pod。

  • 实现原理

    • cordon 会修改节点的 spec.unschedulable 字段,将其设置为 true
    • 调度器在调度 Pod 时,会跳过所有被标记为 Unschedulable 的节点。
  • 使用场景

    • 临时禁止新 Pod 调度到节点上(例如,准备进行维护)。
    • 不影响当前正在运行的 Pod。
  • 命令示例

    kubectl cordon node-name
    
2.2. uncordon

uncordon 命令是 cordon 的逆操作,用于将节点从不可调度状态恢复为可调度状态。

  • 实现原理

    • 修改节点的 spec.unschedulable 字段,将其设置为 false
    • 调度器会重新将该节点纳入候选节点集合,用于分配新的 Pod。
  • 使用场景

    • 在节点完成维护或问题修复后,恢复其正常调度能力。
  • 命令示例

    kubectl uncordon node-name
    
2.3. drain

drain 是一个更复杂的操作,通常在节点需要进行维护时使用。它不仅会标记节点为不可调度,还会逐一驱逐(Evict)该节点上的所有 Pod。

  • 实现原理

    1. 调用 cordon 将节点标记为不可调度。
    2. 对节点上的所有 Pod 逐一发起驱逐请求,除非:
      • Pod 属于 DaemonSet(默认行为,可通过参数调整)。
      • Pod 的 local-storage 字段为 true,或未设置支持驱逐。
    3. 在所有驱逐任务完成后,节点上仅保留不支持驱逐的 Pod。
  • 参数与选项

    • --ignore-daemonsets:忽略 DaemonSet 创建的 Pod,不会尝试驱逐它们。
    • --delete-emptydir-data:允许删除使用 emptyDir 卷的 Pod 数据。
    • --force:强制驱逐,即使存在 Pod 没有 Eviction 策略。
  • 命令示例

    kubectl drain node-name --ignore-daemonsets --delete-emptydir-data
    
  • 使用场景

    • 节点维护:如升级内核、系统补丁、硬件维护。
    • 节点下线:在扩展或缩减集群规模时,安全迁移负载。

3. 技术细节解析

3.1. 调度器的工作机制
  • Kubernetes 的调度器负责将 Pod 分配到合适的节点。
  • 节点的 spec.unschedulable 字段是调度器筛选候选节点的一个关键条件。当该字段为 true 时,节点会被调度器忽略。
  • cordonuncordon 实际上是通过更新该字段来控制节点的调度状态。
3.2. Pod 驱逐的内部流程
  1. 发起驱逐请求
    • kubectl drain 会逐一向节点上的 Pod 发送驱逐请求。
  2. 驱逐策略检查
    • 如果 Pod 定义了 PodDisruptionBudget(PDB),Kubernetes 会检查驱逐是否满足最小可用副本数的限制。
    • 如果驱逐违反了 PDB,则该操作会失败。
  3. Pod 驱逐完成
    • 当 Pod 被成功驱逐后,其资源会释放,调度器可以将其调度到其他节点。
3.3. 与 DaemonSet 的交互
  • DaemonSet 的 Pod 通常与节点绑定,例如监控代理或日志收集器。
  • drain 默认忽略 DaemonSet 创建的 Pod,因为它们的行为与节点状态密切相关。
  • 如果需要驱逐这些 Pod,可以使用 --force 参数。

4. 实际应用与最佳实践

4.1. 节点维护
  • 步骤
    1. 使用 kubectl drain 驱逐节点上的 Pod,确保其负载被迁移。
    2. 完成维护操作后,使用 kubectl uncordon 恢复节点。
4.2. 节点下线
  • 步骤
    1. 确保节点上的所有 Pod 被驱逐(kubectl drain)。
    2. 从集群中移除节点:
      kubectl delete node node-name
      
4.3. 弹性扩展
  • 场景:在进行自动扩展时,可以动态调整节点的调度状态。
  • 策略
    • 临时扩展时,使用 cordon 防止额外负载。
    • 当负载恢复后,使用 uncordon 恢复节点正常调度。

5. 注意事项与限制

  1. 数据丢失风险

    • 驱逐带有 emptyDir 卷的 Pod 时,其数据将被删除。使用 --delete-emptydir-data 参数需格外小心。
  2. PodDisruptionBudget 的影响

    • 如果集群中定义了 PDB,kubectl drain 可能无法驱逐 Pod,除非满足 PDB 的要求。
  3. DaemonSet 的处理

    • 默认忽略 DaemonSet 创建的 Pod。如果需要强制删除,需要显式指定参数。
  4. 资源规划

    • 确保集群中有足够的资源以接收被驱逐的 Pod,否则可能导致调度失败。

6. 总结

cordonuncordondrain 是 Kubernetes 节点管理的重要工具,为管理员提供了灵活的节点控制能力。在实际应用中,应根据场景合理使用这些命令,以实现高效、安全的节点管理。同时,结合 PodDisruptionBudget 和资源规划,可以进一步优化操作流程,减少对业务的影响。

通过熟练掌握这些工具,运维人员可以在保证服务稳定性的同时,实现高效的集群管理与优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482487.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建AD域服务器

搭建AD域服务器 使用深信服HCI搭建AD域服务器 1、新建虚拟机 2、填写参数 3、省略安装过程 4、进入服务器管理器 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 23、

MOH: MULTI-HEAD ATTENTION AS MIXTURE-OFHEAD ATTENTION

当前的问题 多头注意力使用多个头部可以提高模型的精度。然而,并不是所有的注意力头都具有同样的重要性。一些研究表明,许多注意力头可以被修剪而不影响准确性。 此外,在多头注意中,每个注意头并行操作,最终输出是所…

Spring boot之BeanDefinition介绍

在spring框架中IOC容器进行bean的创建和管理。Bean的创建是一个比较复杂的过程,它并不像我们创建对象一样只是直接new一下就行,虽然有些bean确实就是New一下。但在Spring中可以通过一些途径对bean进行增强扩展。在这个过程中,BeanDefinition作…

Ubuntu 服务器部署 Tomcat 并配置 SSL/TLS 证书

本文目录 准备登陆云服务器安装 Java下载 tomcat 包配置防火墙浏览器访问 Tomcat 默认页面以服务的形式运行 Tomcat创建 Tomcat 用户和组创建 systemd 服务文件启动 tomcat 服务 Tomcat webapps 文件目录部署一个静态网站tomcat 的配置文件 将域名解析到服务器Tomcat 配置 SSL/…

C++小问题

怎么分辨const修饰的是谁 是限定谁不能被改变的? 在C中,const关键字的用途和位置非常关键,它决定了谁不能被修改。const可以修饰变量、指针、引用等不同的对象,并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们…

PPT不能编辑,按钮都是灰色,怎么办?

PPT文件打开之后,发现无法编辑,再仔细查看发现工具栏中的功能按钮都是灰色的,无法使用,这是什么原因?该如何解决? 原因:无法编辑PPT文件,并且功能按钮都是灰色,这是因为…

相交链表和环形链表

(一)相交链表 相交链表 思路:先分别计算出A列表和B列表的长度,判断它们的尾节点是否相等,如果不相等就不相交,直接返回空。然后让两个列表中的长的列表先走它们的差距步,然后再一起走&#xff…

ARM架构下安装新版docker及docker-compose

一、常见CPU 架构: 二、环境信息 CPU架构操作系统配置HUAWEI Kunpeng 920 5220 aarch64openEuler 22.03 (LTS-SP3)64C128g15T 三、安装docker 3.1 二进制包下载 docker-ce 社区下载地址: wget https://mirrors.nju.edu.cn/docker-ce/linux/static/s…

LeetCode-315. Count of Smaller Numbers After Self

目录 题目描述 解题思路 【C】 【Java】 复杂度分析 LeetCode-315. Count of Smaller Numbers After Selfhttps://leetcode.com/problems/count-of-smaller-numbers-after-self/description/ 题目描述 Given an integer array nums, return an integer array counts whe…

【NLP 4、数学基础】

此去经年,应是良辰美景虚设 —— 24.11.28 一、线性代数 1.标量和向量 ① 标量 Scalar 一个标量就是一个单独的数 ② 向量 Vector 一个向量是一列数 可以把向量看作空间中的点,每个元素是不同坐标轴上的坐标 向量中有几个数,就叫作几维…

VideoBooth: Diffusion-based Video Generation with Image Prompts

VideoBooth: Diffusion-based Video Generation with Image Prompts 概括 文章提出了一个视频生成模型VideoBooth,输入一张图片和一个文本提示词,即可输出保持图片中物体且符合文本提示词要求的视频。 方法 粗-细两阶段设计:1)…

Graphy 是一款终极、易于使用、功能齐全的 FPS 计数器、统计监视器和调试器,适用于您的 Unity 项目。

主要特点: Graph & Text: 图文: FPSMemory 记忆Audio 声音的Advanced device information 高级设备信息Debugging tools 调试工具 GitHub - Tayx94/graphy:Graphy 是适用于 Unity 项目的终极、易于使用、功能丰富的 FPS 计数器、统计监视器和调试…

ASP.NET Core 负载/压力测试

文章目录 一、第三方工具二、使用发布版本进行负载测试和压力测试 负载测试和压力测试对于确保 web 应用的性能和可缩放性非常重要。 尽管负载测试和压力测试的某些测试相似,但它们的目标不同。 负载测试:测试应用是否可以在特定情况下处理指定的用户负…

008静态路由-特定主机路由

按照如上配置,用192.168.0.1 电脑ping 192.168.1.1 发现能够ping通 用192.168.0.1 电脑ping 192.168.2.1 发现不能ping通 这是因为192.168.0.1 和 192.168.1.1 使用的是同一个路由器R1。 192.168.0.1 和 192.168.2.1 通信需要先经过R1,再经过R2 &#xf…

基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 在现代社会…

周鸿祎再次“创业”,盯上百度

周鸿祎特地拍了部短剧来推广的新产品,终于上线了。 11月27日晚间,360正式发布多模态内容创作引擎“纳米搜索”。 作为当前AI应用最红的赛道之一,AI搜索已经有腾讯、秘塔、商汤、抖音等公司入局。传统搜索老大百度也在发力。竞争不妨碍有搜索…

pytorch中一个tensor经过多次softmax会有什么变化?

在 PyTorch 中,一个 Tensor 经过多次 softmax 操作时,其值会逐渐趋向于某种分布,但并不会无限变化。以下是具体的行为与原因分析: 1. Softmax 的作用: Softmax 将输入张量的值转换为一个概率分布,满足以下…

汽车轮毂结构分析有哪些?国产3D仿真分析实现静力学+模态分析

本文为CAD芯智库原创,未经允许请勿复制、转载! 之前分享了如何通过国产三维CAD软件如何实现「汽车/汽配行业产品设计」,兼容NX(UG)、Creo(Proe),轻松降低企业上下游图纸交互成本等。…

深度学习中的生成对抗网络(GAN)原理与应用

引言 生成对抗网络(Generative Adversarial Network,简称GAN)是由Ian Goodfellow等人在2014年提出的一种深度学习模型,它通过对抗训练的方式生成与真实数据分布相似的假数据。GAN的出现极大地推动了深度学习和生成模型的研究&…

前端学习笔记之FileReader

概念 FileReader接口允许网页应用程序异步读取用户计算机上存储的文件&#xff08;或原始数据缓冲区&#xff09;的内容&#xff0c;使用File或Blob对象来制定要读取的文件或数据。 File对象可以通过用户使用<input>元素选择文件后返回的FileList对象获得&#xff0c;或…