当前位置: 首页 > article >正文

运维实战:K8s节点维护,用cordon、drain还是delete?一张图帮你做决策

Kubernetes节点维护决策指南cordon、drain与delete的深度实践在Kubernetes集群的日常运维中节点维护是每个工程师都无法回避的挑战。无论是计划内的内核升级、硬件更换还是应对突发的节点故障如何优雅地处理节点下线与恢复直接关系到服务的稳定性和运维效率。本文将深入剖析三种核心操作——cordon、drain和delete的适用场景、操作细节与风险控制帮助您在复杂环境中做出最优决策。1. 节点维护操作的核心概念解析Kubernetes提供了三种不同层级的节点管理操作每种操作都有其特定的使用场景和影响范围。理解它们的本质区别是做出正确决策的基础。1.1 cordon最温和的调度隔离cordon操作的核心作用是将节点标记为不可调度SchedulingDisabled其特点包括最小影响仅阻止新Pod被调度到该节点不影响现有Pod运行可逆性强通过uncordon可立即恢复节点调度能力典型场景节点预维护检查阶段临时隔离问题节点进行诊断资源预留场景# 标记节点为不可调度 kubectl cordon node-name # 恢复节点调度能力 kubectl uncordon node-name注意cordon不会自动处理节点上的现有Pod如果这些Pod存在异常仍需人工介入处理1.2 drain安全的Pod驱逐机制drain操作是节点维护中最常用的命令它实现了先疏散后维护的安全流程自动执行cordon操作阻止新Pod调度优雅驱逐现有Pod遵循PodDisruptionBudget等待Pod在其他节点重新创建并就绪关键参数说明参数作用使用场景--ignore-daemonsets忽略DaemonSet管理的Pod必须设置否则会阻塞操作--delete-local-data删除使用本地存储的Pod当Pod使用emptyDir等本地存储时必需--force强制驱逐不受控制器管理的Pod处理裸Pod等特殊情况--timeout设置驱逐超时时间控制维护时间窗口# 完整的安全驱逐命令示例 kubectl drain node-name \ --ignore-daemonsets \ --delete-local-data \ --force \ --timeout300s1.3 delete彻底的节点移除delete是最激进的操作不仅驱逐Pod还会从集群中完全移除节点驱逐节点上所有Pod类似drain从API Server中删除节点对象需要节点重新注册才能恢复恢复流程更为复杂# 在节点上重启kubelet服务 systemctl restart kubelet # 观察节点自动注册过程 kubectl get nodes -w2. 决策流程图什么情况下使用哪种操作根据维护类型、紧急程度和恢复需求我们可以建立以下决策模型开始 │ ├─ 是否需要永久移除节点 → 是 → 使用delete │ ├─ 是否紧急故障处理 → 是 → 使用drain --force │ ├─ 是否需要保留现有Pod → 是 → 使用cordon │ └─ 计划内维护 → 使用标准drain流程2.1 内核升级场景操作流程准备阶段# 先标记节点不可调度 kubectl cordon node-01 # 检查Pod状态确保无关键业务受影响 kubectl get pods -o wide --field-selector spec.nodeNamenode-01驱逐Pod# 优雅驱逐Pod给予5分钟过渡时间 kubectl drain node-01 \ --ignore-daemonsets \ --timeout300s执行升级# 通过SSH连接到节点 ssh node-01 # 执行实际升级操作 sudo apt update sudo apt upgrade -y linux-image-generic恢复服务# 重启节点后恢复调度 kubectl uncordon node-012.2 硬件故障应急处理对于突发硬件故障需要更果断的措施# 强制快速驱逐不考虑优雅终止 kubectl drain 故障节点 \ --force \ --grace-period0 \ --ignore-daemonsets \ --delete-local-data警告强制驱逐可能导致短暂服务中断确保应用有足够的副本冗余3. 高级场景与风险控制3.1 有状态应用的特别考量当节点运行有状态工作负载时需要额外注意StatefulSet Pod确保按正确顺序重建本地存储数据提前做好数据备份持久卷确认StorageClass配置正确# 检查Pod使用的存储类型 kubectl describe pod pod-name | grep -A5 Volumes3.2 PodDisruptionBudget的最佳实践PDB是确保服务可用性的关键防线建议配置apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: zk-pdb spec: minAvailable: 2 selector: matchLabels: app: zookeeper关键参数对照参数类型说明minAvailable整数/百分比保证同时可用的最小Pod数maxUnavailable整数/百分比允许同时不可用的最大Pod数3.3 大规模集群的批量操作策略当需要维护多个节点时建议采用分批次操作每次只维护部分节点滚动策略等待一批节点恢复后再继续自动化脚本#!/bin/bash nodes(node-{1..5}) for node in ${nodes[]}; do kubectl drain $node \ --ignore-daemonsets \ --delete-local-data \ --timeout600s # 执行维护操作... kubectl uncordon $node sleep 300 # 等待集群稳定 done4. 常见问题排查与恢复技巧4.1 drain操作卡住怎么办典型原因及解决方案DaemonSet Pod阻塞添加--ignore-daemonsets本地存储Pod添加--delete-local-dataPod无法重建检查副本控制器配置资源不足检查集群剩余资源# 查看阻塞原因 kubectl get pods --field-selector spec.nodeNamenode-name4.2 节点无法恢复调度排查步骤检查节点状态kubectl describe node node-name验证kubelet日志journalctl -u kubelet -n 50 --no-pager检查网络连接kubectl run -it --rm debug-tools --imagenicolaka/netshoot4.3 关键指标监控建议在节点维护期间应监控Pod重建成功率kube_pod_status_ready节点不可用时间kube_node_spec_unschedulable资源水位node_memory_MemAvailable_bytes# 使用kubectl查看资源使用情况 kubectl top nodes5. 决策因素权重分析不同场景下决策标准应有不同侧重因素cordondraindelete维护时间窗口★★★★★★业务连续性★★★★★★操作安全性★★★★★★恢复复杂度★★★★★★自动化友好度★★★★★★实际项目中我通常会先使用cordon进行软隔离观察效果确认无异常后再执行drain。对于已知的硬件故障节点直接使用delete可以更快释放资源。记住任何维护操作前做好完整的etcd备份是最后的保障。

相关文章:

运维实战:K8s节点维护,用cordon、drain还是delete?一张图帮你做决策

Kubernetes节点维护决策指南:cordon、drain与delete的深度实践 在Kubernetes集群的日常运维中,节点维护是每个工程师都无法回避的挑战。无论是计划内的内核升级、硬件更换,还是应对突发的节点故障,如何优雅地处理节点下线与恢复&a…...

LaTeX排版中文论文时,你踩过这几个坑吗?关于字体、行距和页边距的避坑指南

LaTeX中文排版实战:避开字体、行距与页边距的五大深坑 第一次用LaTeX写中文论文时,我对着屏幕上那堆乱码和错位的格式足足发呆了半小时——明明按照教程一步步操作,为什么标题变成了黑块?为什么行距设置完全无效?如果你…...

揭秘GitHub Copilot在Scrum中的真实落地路径:从Sprint Planning到Daily Standup的5个关键嵌入点

第一章:智能代码生成在敏捷开发中的应用 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成正深度融入敏捷开发的迭代闭环,成为提升交付速度与代码一致性的关键杠杆。它不再仅作为辅助补全工具,而是嵌入用户故事拆解、测试驱动开发…...

Windows 11终极优化指南:如何用Win11Debloat一键打造纯净高效系统

Windows 11终极优化指南:如何用Win11Debloat一键打造纯净高效系统 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declu…...

从SocketTimeoutException到连接优化:实战解析Java网络超时陷阱

1. 当你的Java应用突然卡死:SocketTimeoutException的典型场景 第一次见到java.net.SocketTimeoutException: 30,000 milliseconds timeout这个报错时,我正在调试一个电商平台的搜索功能。控制台突然弹出的红色错误让我心头一紧——明明本地测试好好的功…...

Apex Legends智能压枪终极指南:免费开源工具实现精准射击

Apex Legends智能压枪终极指南:免费开源工具实现精准射击 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap/Apex-NoRecoil…...

从AD18到AD23:这些年Altium Designer为‘人性化’做了哪些升级?附与PADS/Allegro操作习惯的对比

Altium Designer的进化之路:从AD18到AD23的UX革命与行业启示 在电子设计自动化(EDA)领域,软件工具的交互体验往往决定着工程师的工作效率和创意发挥空间。作为PCB设计领域的标杆产品,Altium Designer(AD&am…...

JSqlParser实战:动态SQL生成与优化的高效解决方案

1. JSqlParser入门:SQL解析与生成的瑞士军刀 第一次接触JSqlParser是在三年前的一个报表系统项目中,当时需要动态生成上百种复杂查询条件。手动拼接SQL字符串不仅容易出错,还面临SQL注入风险。直到发现了这个神器,才真正体会到什…...

EndNote X8保姆级教程:从文献导入到Word引用一键搞定(含GB/T 7714格式配置)

EndNote X8科研文献管理全攻略:从零掌握GB/T 7714到论文高效排版 第一次接触学术论文写作时,最让人头疼的莫过于文献管理。记得我研一那年,为了调整参考文献格式,整整花了三天时间手动修改编号——直到实验室师兄推荐了EndNote X8…...

YOLO 系列:低分辨率克星!YOLOv8 替换 SPD-Conv(空间深度转换卷积),突破低像素检测瓶颈

引言:当YOLO遭遇低分辨率之痛 在计算机视觉的诸多应用场景中,低分辨率图像和小目标检测一直是难以逾越的技术鸿沟。想象一下这样的场景:监控摄像头拍摄的远距离行人、无人机航拍的密集车辆、医疗影像中的微小病灶、工业质检中毫米级缺陷……这些目标在画面中往往只占据几十…...

Qwen3-ASR-1.7B应用案例:法律庭审录音转文字+关键语句高亮提取

Qwen3-ASR-1.7B应用案例:法律庭审录音转文字关键语句高亮提取 想象一下,一位律师或书记员需要从长达数小时的庭审录音中,快速找到“被告当庭承认”、“关键证据质证”或“法官最终裁定”等核心片段。传统方法需要人工反复听录音、做标记&…...

从std::pair到std::tuple:C++多返回值处理的优雅进化史(C++11/14/17对比)

从std::pair到std::tuple:C多返回值处理的优雅进化史 在C的世界里,数据打包和传递一直是开发者们日常面对的挑战。想象一下,当你需要从函数返回多个值时,传统的做法可能是定义一个临时结构体,或者通过引用参数来"…...

别再死记硬背了!一张图看懂UE4委托:单播、多播、动态委托的区别与选用场景

UE4委托系统实战指南:单播、多播与动态委托的智能选择 第一次接触UE4的委托系统时,那些DECLARE_DELEGATE、DECLARE_MULTICAST_DELEGATE开头的宏定义确实让人眼花缭乱。但当我真正理解了它们的设计哲学后,发现这套系统其实非常优雅——就像游戏…...

保姆级避坑指南:用Python脚本一键搞定ROS xacro到MuJoCo XML的完整转换(附UR5实例)

保姆级避坑指南:用Python脚本一键搞定ROS xacro到MuJoCo XML的完整转换(附UR5实例) 在机器人仿真领域,ROS和MuJoCo的结合正成为越来越多开发者的选择。然而,从ROS的xacro文件到MuJoCo的XML模型转换过程,往往…...

Java Stream实战:巧用filter与findAny精准定位List中的目标元素

1. 为什么需要filter与findAny组合? 在日常开发中,我们经常遇到这样的场景:从一个对象集合里找出符合特定条件的某个元素。比如根据用户ID查找用户信息,或者筛选出状态为"已完成"的订单。传统做法是写个for循环遍历整个…...

电感在开关电源中的应用:如何通过仿真优化动态电路性能

电感在开关电源中的核心作用与仿真优化实战指南 开关电源设计工程师们常把电感比作电路的"能量调度师"——它不像电容那样直接储存能量,而是通过磁场与电流的微妙互动,在毫秒级的时间内完成能量的暂存与释放。这种独特的能量管理方式&#xf…...

洞见——从SSH暴力破解日志中追踪入侵者全路径

1. 从SSH暴力破解日志中追踪入侵者的完整路径 那天早上我像往常一样检查服务器日志,突然发现auth.log文件大小异常——原本每天只有几百KB的日志,一夜之间暴涨到2GB。这明显是遭遇了SSH暴力破解攻击。作为运维老手,我立即展开调查&#xff0c…...

快狐KIHU|连锁门店条形屏RK3566芯片品牌展示效率提升

在当今竞争激烈的零售市场中,连锁门店的品牌展示效率至关重要。[KIHU快狐]凭借其先进的条形屏解决方案,搭载RK3566芯片,为连锁门店提供了高效、稳定的品牌展示方案。RK3566芯片的技术优势[KIHU快狐]的条形屏采用RK3566芯片,这款芯…...

把KQM6600空气检测数据送上云端:基于ESP8266/ESP32的物联网空气质量监测站DIY

基于ESP8266/ESP32的物联网空气质量监测站DIY:从KQM6600数据采集到云端可视化 在智能家居和工业物联网快速发展的今天,空气质量监测已成为环境感知的重要一环。KQM6600作为一款高性价比的空气质量检测模块,能够精准测量VOC、甲醛和CO2浓度&a…...

从游戏开发工具集到SideFX Labs:这个免费Houdini插件如何帮你提升3D内容创作效率?

SideFX Labs:从游戏开发工具集到3D创作效率革命 第一次打开Houdini时,我被它强大的节点系统震撼,同时也被复杂的操作流程吓退。直到发现SideFX Labs这个隐藏在Houdini生态中的"效率加速器",我的3D内容创作才真正找到了突…...

别再手动复制lib了!用VS2019属性表一键配置PCL 1.12.0(附模板下载)

VS2019属性表高效配置PCL 1.12.0全攻略 每次新建PCL项目都要重复配置几十个库目录和依赖项?团队协作时每个成员都要手动配置一遍环境?这些低效操作早该被淘汰了。本文将彻底改变你的PCL开发体验——通过VS2019属性表实现一次配置,永久复用的…...

FPGA显示入门:抛开IP核,用Verilog手撕一个简单的HDMI驱动(附TMDS编码核心代码解析)

FPGA显示实战:从零构建HDMI驱动与TMDS编码器 引言 在数字视频传输领域,HDMI接口已成为事实上的标准。对于FPGA开发者而言,理解HDMI底层协议并能够自主实现驱动电路,是提升硬件设计能力的重要里程碑。本文将带领读者从最基础的TMDS…...

【Windows】告别第三方工具:5个原生系统命令深度清理磁盘空间

1. Windows系统垃圾的真相与清理必要性 每次打开电脑,系统都在后台默默产生大量临时文件。这些文件就像厨房里的油污,刚开始不明显,积累多了就会拖慢整个系统的运行速度。我见过不少用户的C盘莫名其妙就红了,打开一看,…...

保姆级教程:在Ubuntu 20.04上配置PCL 1.12,并跑通PPF+ICP点云识别Demo

从零搭建Ubuntu 20.04下的PCL 1.12开发环境:PPFICP点云识别实战指南 在三维视觉和机器人感知领域,点云处理技术正成为不可或缺的核心能力。无论是自动驾驶的环境感知、工业质检中的零件识别,还是AR/VR中的场景重建,都离不开对点云…...

m4s-converter终极指南:3分钟解锁B站缓存视频的完整教程

m4s-converter终极指南:3分钟解锁B站缓存视频的完整教程 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾因B站视频下架而痛失…...

极域电子教室破解指南:3步重获电脑控制权

极域电子教室破解指南:3步重获电脑控制权 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 想象一下这样的课堂场景:老师开启全屏广播后,你的电脑…...

别再手动下载了!用Python+国信QMT自动拉取股票历史Tick数据(附完整代码与避坑点)

PythonQMT全自动获取股票Tick数据实战指南 在量化交易领域,获取高质量的Tick级数据是构建有效策略的基础。传统手动下载方式不仅效率低下,还容易出错。本文将手把手教你如何用Python调用国信QMT的get_market_data_ex接口,实现股票历史Tick数据…...

ChineseOCR文字方向检测:如何解决四种角度文字识别难题?

ChineseOCR文字方向检测:如何解决四种角度文字识别难题? 【免费下载链接】chineseocr yolo3ocr 项目地址: https://gitcode.com/gh_mirrors/ch/chineseocr 在日常的OCR识别任务中,我们常常会遇到一个令人头疼的问题:图片中…...

adb实战指南(二)- 解锁安卓设备调试权限与建立adb稳定连接

1. 开发者模式:安卓设备的隐藏入口 第一次拿到安卓测试机时,最让我头疼的就是找不到开发者选项的入口。不同品牌的手机就像在玩捉迷藏,把开发者模式藏得五花八门。记得有次调试华为设备,在设置里翻了半小时才找到版本号的位置。其…...

纹理打包的技术革命:Free Texture Packer如何重构游戏资源优化范式

纹理打包的技术革命:Free Texture Packer如何重构游戏资源优化范式 【免费下载链接】free-tex-packer Free texture packer 项目地址: https://gitcode.com/gh_mirrors/fr/free-tex-packer 当你的游戏加载时间从8秒降到2秒,当你的网页Draw Call数…...