centos

centos k8s部署中容器如何调度

小樊
38
2025-09-18 02:41:30
栏目: 智能运维

一、Kubernetes调度器核心角色

在CentOS K8S部署中,kube-scheduler是负责容器(Pod)调度的核心组件。它接收Controller Manager创建的新Pod或需补足副本的Pod,根据节点资源、标签、亲和性等策略,将Pod绑定(Binding)到合适的Worker节点,随后节点上的kubelet启动容器。调度流程遵循“预选(Filtering)→ 优选(Scoring)→ 绑定(Binding)”的三阶段逻辑。

二、容器调度核心策略

1. 基于资源需求的调度

容器通过resources.requests(资源请求)和resources.limits(资源限制)声明CPU、内存等需求。调度器会筛选出剩余资源满足请求的节点(如Pod请求1核CPU,节点剩余CPU≥1核),避免资源过载。同时,K8S会根据Pod的QoS级别(Guaranteed/Burstable/BestEffort)优化调度,优先保障关键业务的资源预留。

2. 亲和性与反亲和性调度

3. 污点(Taints)与容忍度(Tolerations)调度

4. 拓扑分布约束(Topology Spread Constraints)

通过topologySpreadConstraints字段实现Pod的跨拓扑域(如可用区、机架、节点)均匀分布,避免资源热点。例如,设置maxSkew: 1(最大偏差为1)、topologyKey: topology.kubernetes.io/zone(按可用区分布),确保Pod在不同可用区的数量差不超过1。

5. 节点选择器(NodeSelector)与定向调度

三、调度流程详解

  1. 预选阶段(Filtering)
    调度器首先排除不满足硬性条件的节点,包括:

    • 资源不足(节点剩余CPU/内存小于Pod请求);
    • 污点不匹配(Pod未设置容忍度,但节点有污点);
    • 标签不匹配(Pod的nodeSelector与节点标签不符);
    • Pod亲和性/反亲和性不满足(如要求与某Pod同节点,但该Pod不存在)。
  2. 优选阶段(Scoring)
    对通过预选的节点进行评分(满分10分),评分规则包括:

    • 资源均衡NodeResourcesBalancedAllocation):倾向于资源使用率更均衡的节点(如CPU剩余20%、内存剩余30%的节点比CPU剩余5%、内存剩余80%的节点得分高);
    • 最少请求LeastRequestedPriority):优先选择资源剩余多的节点(如剩余CPU最多的节点);
    • 镜像本地化ImageLocalityPriority):优先选择已缓存Pod镜像的节点(减少镜像下载时间)。
  3. 绑定阶段(Binding)
    调度器选择得分最高的节点,将Pod的nodeName字段更新为目标节点,并将绑定信息写入etcd。目标节点上的kubelet通过监听API Server,获取Pod清单并启动容器。

四、优化与扩展建议

0
看了该问题的人还看了