在标准的 Kubernetes 模型中,节点是否适合运行工作负载取决于一个简单的“就绪”状态。 然而,在现代 Kubernetes 环境中,节点需要复杂的底层架构依赖项 (例如网络代理、存储驱动程序、GPU 固件或自定义健康检查)才能完全运行,从而可靠地托管 Pod。
今天,我代表 Kubernetes 项目宣布推出节点就绪控制器。
该项目引入了一个声明式系统来管理节点污点,从而在节点启动过程中扩展了就绪保护机制,使其超越了标准条件。
通过基于自定义健康信号动态管理污点,该控制器确保工作负载仅部署在满足所有底层架构特定要求的节点上。
对于具有复杂引导要求的集群,Kubernetes 核心节点的“就绪”状态通常不足以满足需求。 运维人员经常需要确保特定的 DaemonSet 或本地服务在节点进入调度池之前处于健康状态。
节点就绪控制器通过允许运维人员定义针对特定节点组的自定义调度门控来弥补这一不足。 这使你能够在异构集群中强制执行不同的就绪要求,例如,确保配备 GPU 的节点只有在验证了专用驱动程序后才能接受 Pod, 而通用节点则遵循标准路径。
它提供三大主要优势:
控制器以节点就绪规则(NodeReadinessRule,NRR)API 为核心,该 API 允许你为节点定义声明式的“门控”。
控制器支持两种不同的运行模式:
控制器响应节点状态,而非自行执行健康检查。 这种解耦设计使其能够与生态系统中现有的其他工具以及自定义解决方案无缝集成:
在整个集群中部署新的就绪规则存在固有风险。 为了降低这种风险,试运行模式允许运维人员首先模拟对集群的影响。 在此模式下,控制器会记录预期操作并更新规则状态以显示受影响的节点, 而无需实际应用污点,从而在强制执行前实现安全验证。
以下 NodeReadinessRule 确保节点在 CNI 代理正常工作之前保持不可调度状态。
控制器监控自定义的 cniplugin.example.net/NetworkReady 条件,
并且仅当该状态为 True 时才移除 readiness.k8s.io/acme.com/network-unavailable 污点。
apiVersion: readiness.node.x-k8s.io/v1alpha1
kind: NodeReadinessRule
metadata:
name: network-readiness-rule
spec:
conditions:
- type: "cniplugin.example.net/NetworkReady"
requiredStatus: "True"
taint:
key: "readiness.k8s.io/acme.com/network-unavailable"
effect: "NoSchedule"
value: "pending"
enforcementMode: "bootstrap-only"
nodeSelector:
matchLabels:
node-role.kubernetes.io/worker: ""
演示:
节点就绪控制器(Node Readiness Controller)刚刚起步, 我们的初始版本已经发布, 我们正在寻求社区反馈以完善路线图。 继我们在 KubeCon NA 2025 上富有成效的非正式会议讨论之后,我们很高兴能继续进行线下交流。
欢迎参加 KubeCon + CloudNativeCon Europe 2026 的维护者专场会议: 解决非确定性调度问题:节点就绪控制器简介。
与此同时,你可以通过以下方式贡献力量或关注我们的进展: