最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Kubernetes 如何配置 NodeSelector 将应用调度到指定节点
时间:2026-08-17 08:24:48 编辑:袖梨 来源:一聚教程网
nodeSelector 是强制匹配的调度方式,Pod 只能调度到同时满足所有标签条件的节点,否则处于 Pending 状态;需先用 kubectl label 给节点打小写标签(仅含字母、数字、-、.),再在 Pod 或 Deployment 的 spec.template.spec 中声明 nodeSelector,所有键值对必须全部命中。
直接用 nodeSelector 就能实现——它不是“建议”,而是强制匹配:Pod 只会落在同时满足所有标签条件的节点上,不满足就卡在 Pending 状态。
给目标节点打上标签
先确认你要调度到哪个节点(比如 node-01),再用 kubectl label 添加自定义标签:
kubectl label nodes node-01 disktype=ssdkubectl label nodes node-01 env=prodkubectl label nodes node-01 role=ingress
执行后运行 kubectl get nodes --show-labels 或 kubectl describe node node-01 查看标签是否写入成功。注意:键和值都必须小写,只允许字母、数字、- 和 .,不能有空格或大写字母。
在 Pod 或 Deployment 中声明 nodeSelector
不是加在顶层 spec,而是加在 spec 下(Deployment 则加在 spec.template.spec):
- 单标签 Pod 示例:
spec:nodeSelector:disktype: ssdcontainers:- name: nginximage: nginx
- 多标签 Deployment 示例(更常用):
spec:template:spec:nodeSelector:disktype: ssdenv: prodcontainers:- name: appimage: myapp:v1
⚠️ 所有键值对必须全部命中,缺一不可。只要有一个节点没同时带 disktype=ssd 和 env=prod,这个 Deployment 的新 Pod 就不会被创建。
验证是否调度成功
部署后立刻检查:
-
kubectl get pod -o wide—— 看NODE列是不是你预期的节点名 -
kubectl describe pod <pod-name> | grep Node:—— 显示实际绑定节点 -
kubectl get pod <pod-name> -o jsonpath='{.spec.nodeName}'—— 直接输出节点名
如果状态一直是 Pending,优先检查:节点是否存在、标签拼写是否一致(大小写敏感)、有没有漏掉某个必需标签。
它和 nodeName 的区别
nodeName 是硬指定某一台机器(如 spec.nodeName: node-01),跳过调度器,连资源是否够都不检查;而 nodeSelector 仍走调度流程,会做资源评估、污点容忍等判断,只是加了一道“标签准入”。所以日常固定调度推荐用 nodeSelector,除非你明确需要绕过所有策略。
相关文章
- 泰国成立专门机构,重点管控数据中心对电力、水资源及环境的影响 08-17
- 弹弹堂极武器哪个好 08-17
- 魔兽争霸哪个图更好打 08-17
- 互传app怎么查看发送记录 08-17
- 快对ai怎么查看历史记录-快对作业历史记录怎么删除 08-17
- 希望大家能推荐一款软件,可以直接把DeepSeek生成的代码变流程图,提高办公效率 08-17