使用 NodeWright 管理 Kubernetes 节点集群

📌 One-Sentence Summary
NVIDIA 开源了 NodeWright,这是一个 Kubernetes 原生包管理器,能够以声明式方式配置并安全更新 GPU 节点集群的主机操作系统设置,而不会中断正在运行的训练工作负载。
📝 Summary
NVIDIA 推出了 NodeWright,这是一个开源、Kubernetes 原生的包管理器,用于管理 GPU 节点集群的主机级配置。Ansible 和 Puppet 等传统工具不具备 Kubernetes 感知能力,因此无法在更改节点之前执行 cordon、drain 或遵循 PodDisruptionBudgets。NodeWright 通过 Operator、自定义资源和容器化包填补了这一空白,这些包携带脚本、配置和验证检查。其六阶段流程(cordon、wait、drain、apply、interrupt、uncordon)保护长时间运行的训练任务,而 DeploymentPolicy 资源提供固定、线性或指数级 rollout 策略,并支持批次和失败阈值。NodeWright 已在 NVIDIA 以 Skyhook 的名义投入生产运行,并与 NVIDIA AI Cluster Runtime、NVCRE 和 NVSentinel 集成。
💡 Main Points
传统配置管理不具备 Kubernetes 感知能力,这使得 GPU 集群的整集群主机变更充满风险。
Ansible 和 Puppet 是为单独管理的机器设计的,它们不会在重启前对节点执行 cordon、等待关键 Pod 或 drain 工作负载。在 GPU 集群中,节点不能随意丢弃,因为硬件稀缺,且长时间运行的训练任务难以重新调度。
NodeWright 通过六阶段流程应用主机变更,保护正在运行的工作负载。
Operator 对节点执行 cordon,等待标记为不可中断的 Pod 完成,在遵循 PodDisruptionBudgets 的前提下 drain 剩余 Pod,应用包,可选地重启服务或重启系统,最后对节点执行 uncordon。这就是丢失一半训练任务与在整个集群中安全落地更新之间的区别。
包是容器镜像,内置验证、版本管理和依赖排序。
包可以设置 sysctl 和 GRUB 参数、配置崩溃转储、创建逻辑卷、安装安全代理以及修复 CVE。验证脚本通过 Kubernetes 暴露失败信息,NodeWright 跟踪语义版本以区分安装、升级和降级,并使用声明的依赖关系确定执行顺序。
DeploymentPolicy 支持跨集群分区的渐进式、风险可控的 rollout。
分区是按标签选择的命名节点组,每个分区有自己的中断预算和策略。提供固定、线性和指数级批次策略,并支持用于推进的批次阈值,以及可选的失败阈值,当连续失败批次过多时停止该分区。
NodeWright 是 NVIDIA 更广泛的 AI 就绪 Kubernetes 基础设施开源生态系统的一部分。
它与 NVIDIA AI Cluster Runtime 集成,后者发布经过版本锁定的已知良好驱动、Operator、内核和系统组合配方。NVCRE 负责工作负载前验证,NVSentinel 监控运行时故障,而 NodeWright 管理 GPU 和 Network Operator 之下的主机操作系统层。
💬 Key Quotes
把 NodeWright 想象成整个集群的 apt 或 yum:感知工作负载、感知中断预算,并能够跨集群逐步推出变更。
因此,运维问题不是如何更改一个节点,而是如何更改所有节点而不杀死训练任务。
这个流程就是丢失一半训练任务于内核更新,与在不中断工作负载的情况下将同一更新落地到整个集群之间的区别。
明确一下范围:NodeWright 不会取代 NVIDIA GPU Operator 或 NVIDIA Network Operator。它管理的是它们之下的主机操作系统层。
📊 Article Meta
AI Screening: 86
Source: NVIDIA Technical Blog
Author: Michelle Horton
Category: 软件编程
Language: 英文
Read Time: 8 min
Word Count: 1954
Tags:
编程与工程 , 云原生 / DevOps , 平台工程 , 开源项目 , AI 硬件与芯片
这个观点很中肯,深有同感。
楼主辛苦了,内容很有参考价值。
思路清晰,干货满满。
内容翔实,正好需要,先收藏再看。
这篇文章分析得很透彻,收藏了!
实话,说的不明不白
刚好最近在找这方面的资料,太及时了。
看标题就点进来了,内容果然没让人失望。