裸金属资讯

Kubernetes专用节点配置要先明确隔离目标

Kubernetes专用节点配置并不是给节点加一个标签就结束,而是要先区分调度隔离、资源隔离、故障域隔离和安全隔离,再组合使用标签、污点、容忍度、节点亲和性及资源限制。本文给出从目标确认、节点准备到验证和维护的可执行方法。

Kubernetes专用节点配置的第一步不是选择机器规格,而是回答一个问题:这些节点究竟要隔离什么?如果只是让日志采集、消息队列或批处理任务优先使用某组节点,标签和节点亲和性通常已经足够;如果要求其他工作负载不能进入,则还必须使用污点与容忍度。若目标涉及主机安全、内核或网络边界,单靠Kubernetes调度规则并不能形成完整隔离。

先把隔离目标分成四类

隔离目标主要手段适用条件注意事项
调度隔离标签、节点亲和性希望工作负载优先进入指定节点没有污点时,其他工作负载仍可能进入
进入限制污点、容忍度专用节点不应承接普通任务容忍度配置过宽会削弱隔离
资源隔离requests、limits、配额不同服务需要控制CPU和内存争用必须结合实际峰值和预留空间调整
故障或安全隔离拓扑约束、独立节点池、网络和主机策略需要降低同机、同机架或同安全域风险需要基础设施与运维制度共同配合

因此,专用节点不等于“性能更高的节点”。一组节点可以因为GPU、NVMe本地盘、大内存或合规要求而专用,也可以只是为了把高波动任务与在线服务分开。目标不同,标签命名、节点规模和验证方式都会不同。

配置时建立一条完整的调度链

1. 先规划稳定的节点属性

建议使用表达用途的标签,例如将节点标记为 workload=streaming 或 workload=build,而不是使用容易变化的主机名、采购批次或临时编号。标签应能长期解释节点为什么存在。若同一用途有多个规格,还可以增加 hardware=nvme 或 memory-class=large 等属性,但不要把过多硬件细节都塞进一个标签。

2. 用污点阻止无关工作负载进入

可以执行类似 kubectl taint nodes node-a dedicated=streaming:NoSchedule 的操作,为节点添加NoSchedule污点。这样,未声明对应容忍度的工作负载不会被调度到该节点。若节点正在下线,可使用PreferNoSchedule或NoExecute,但两者作用不同:PreferNoSchedule只是尽量避开,NoExecute还可能驱逐已经运行且不具备容忍度的工作负载。

3. 在工作负载中同时写容忍度和节点约束

仅添加容忍度只能说明“允许进入”,不能保证一定进入目标节点。部署清单还应配置节点选择器或requiredDuringSchedulingIgnoredDuringExecution类型的节点亲和性。对于必须使用专用节点的任务,使用required;对于可以在资源不足时转移的任务,使用preferred,并明确可接受的备用节点范围。

  1. 为目标节点添加稳定标签,并记录标签用途、负责人和变更时间。
  2. 添加NoSchedule污点,先在测试命名空间验证调度结果。
  3. 在工作负载中添加匹配的容忍度和节点亲和性。
  4. 设置合理的资源请求与上限,避免“专用”被误解为无限资源。
  5. 使用kubectl describe node、kubectl get pods -o wide和事件信息检查节点选择、拒绝原因及资源余量。

不要忽略容量、可用性与维护

专用节点数量应按峰值并发、单节点故障后的承载能力和维护窗口计算。只有一台节点时,滚动升级、硬件故障或系统重启都可能让任务中断。对有持续服务要求的工作负载,通常至少准备两个节点,并为故障后迁移预留约20%至30%的资源余量;实际比例要根据副本数、启动时间和业务峰值调整。

资源配置还要考虑系统组件、日志、镜像缓存和监控进程的消耗。requests过低会造成调度过度,limits过紧可能引发节流或内存终止。对批处理任务,可接受较低优先级;对延迟敏感服务,则应避免与突发资源使用者共用同一专用池。

Kubernetes专用节点配置要先明确隔离目标

隔离效果必须通过反向测试确认

配置完成后,不要只看节点标签。应分别测试“允许进入”和“禁止进入”两条路径:提交带有正确容忍度和亲和性的工作负载,确认它能落到目标节点;再提交一个没有容忍度的普通工作负载,确认它会被调度到其他节点或保持Pending,并检查事件是否明确说明污点不匹配。

还要验证节点故障、节点排空和扩容场景。执行维护前,可先使用kubectl cordon阻止新任务进入,再使用kubectl drain结合业务允许的中断预算迁移工作负载。若专用节点承载本地存储、GPU设备或特殊内核模块,排空结果可能与普通节点不同,必须提前检查数据持久化和重建条件。

常见问题

专用节点只加标签可以吗?

可以实现偏好调度,但不能阻止其他工作负载进入。需要硬性隔离时,应同时配置污点和工作负载容忍度。

污点和节点亲和性有什么区别?

污点决定哪些工作负载不能进入,亲和性决定工作负载希望或必须进入哪里。两者是互补关系。

专用节点是否还需要资源限制?

需要。专用节点仍可能运行多个副本或后台组件,requests、limits和配额有助于控制资源争用。

节点故障后能否自动恢复?

只有在存在可用备用节点、工作负载具备副本或可重建能力,并且调度规则允许迁移时,才可能自动恢复。单节点专用池无法消除硬件故障风险。

总之,Kubernetes专用节点配置应从隔离目标出发,再组合标签、污点、容忍度、亲和性、资源策略和故障演练。这样得到的不是形式上的专用节点,而是一套能够被验证、维护并在异常时保持可控的调度方案。