k8s深度讲解:智慧的决策者 - Scheduler 和 Controller Manager
第一位决策者:kube-scheduler - 为 Pod 寻找最佳的“家”
kube-scheduler
是一个职责非常专一的组件。它持续不断地监视着 API Server,专门寻找那些已经被创建、但 spec.nodeName
字段为空的 Pod。一旦发现这样的 Pod,它的唯一任务就是:为这个 Pod 在集群中挑选一个最合适的工作节点 (Node),然后更新 Pod 对象的 spec.nodeName
字段。
就是这样。Scheduler 不负责运行 Pod,不负责启动容器,它只做这一个关键的“绑定决策”。这个决策过程,通常分为两个阶段:
阶段一:过滤 (Filtering / Predicates) - “淘汰赛”
这是“排除法”阶段。Scheduler 会遍历集群中所有的工作节点,并使用一系列的“断言函数 (Predicates)”来过滤掉那些不满足该 Pod 运行条件的节点。
常见的过滤规则包括:
- 资源是否足够? 节点的可用 CPU 和内存,是否满足 Pod 在
spec.containers.resources.requests
中声明的资源请求? - 标签是否匹配? 节点是否拥有 Pod 通过
nodeSelector
或nodeAffinity
所要求的标签? - 污点是否容忍? Pod 是否能够“容忍