首页主机资讯Kubernetes在CentOS上的资源调度是如何进行的

Kubernetes在CentOS上的资源调度是如何进行的

时间2025-11-28 12:11:03发布访客分类主机资讯浏览341
导读:Kubernetes 在 CentOS 上的资源调度机制 一 调度流程与核心组件 在 CentOS 上,Kubernetes 的调度由控制平面的 kube-scheduler 完成,遵循“两阶段”机制:先进行 Predicate 预选(过...

Kubernetes 在 CentOS 上的资源调度机制

一 调度流程与核心组件

  • CentOS 上,Kubernetes 的调度由控制平面的 kube-scheduler 完成,遵循“两阶段”机制:先进行 Predicate 预选(过滤不满足条件的节点,如资源不足、端口冲突、亲和/反亲和不匹配等),再进行 Priority 优选(按策略为候选节点打分,如资源余量、亲和性权重、拓扑分布等),最终选出得分最高的节点并执行 BindPod 与 Node 绑定。调度器持续监听 API Server,只对 spec.nodeName 为空 的待调度 Pod 进行上述流程。这套机制与操作系统发行版无关,在 CentOS 上的行为与在其他 Linux 发行版一致。

二 调度依据与常用策略

  • 资源请求与可分配量:调度以容器的 requests 为依据,结合节点的 allocatable 资源进行可行性过滤;limits 主要用于运行时限制(CPU 限流、内存 OOM 等)。合理设置 requests/limits 是调度成功与稳定运行的前提。
  • 节点选择:
    • nodeSelector:按节点标签进行基础定向调度。
    • nodeAffinity:更灵活的节点选择,支持硬性/软性规则,可按地域、机型、硬件特性(如 SSD)定向。
  • 污点与容忍:通过 Taints/Tolerations 实现节点专用化(如 GPU 节点)、隔离与驱逐控制(如 NoExecute 对不健康节点的快速驱逐)。
  • Pod 间布局:
    • podAffinity/podAntiAffinity:让相关或互斥的 Pod 共置或分散,降低网络时延或提升容灾。
    • Topology Spread Constraints:按 zone/rack/hostname 等拓扑域均匀打散,控制最大不均衡度(maxSkew)。
  • 批量与高级调度:对 Gang Scheduling(关联任务“全或全不”)与 Capacity Scheduling(容量感知)等批量作业场景,原生调度能力有限,通常借助调度器插件或云厂商扩展能力实现。

三 资源请求 Limits 与 QoS 对调度与运行的影响

  • 定义方式:在容器上设置 requests/limits(CPU 与 Memory),例如 requests 用于调度与 Guaranteed 判定,limits 用于运行时上限与 QoS 归类。
  • QoS 类别与驱逐顺序:
    • Guaranteed(requests == limits):最高优先级,节点资源紧张时最后被驱逐。
    • Burstable(requests < limits):中等优先级。
    • BestEffort(未设 requests/limits):最低优先级,最先被驱逐。
  • 运行影响:
    • CPU 为可压缩资源,超限会被限流(throttling)。
    • 内存 为不可压缩资源,超限可能触发 OOMKilled
  • 实践要点:为关键负载设置合理 requests(保障调度与稳定性),为突发场景设置适度 limits,避免无限制导致节点不稳定或被优先驱逐。

四 拓扑感知与专用资源调度

  • CPU 拓扑感知:启用 CPU ManagerNUMA 拓扑感知,将关键负载固定到特定 CPU 核心/NUMA 节点,减少跨 NUMA 访存与上下文切换抖动,提升延迟敏感型应用性能。
  • GPU 拓扑感知:在多 GPU 节点上按拓扑合理放置 Pod,减少 GPU/NUMA 间切换开销,提升训练/推理性能。
  • 动态资源与混部:结合 动态资源超卖CPU QoS内存 QoSL3 Cache/内存带宽隔离 等策略,在保证高优任务性能的同时提升集群利用率(适用于在离线混部等场景)。

五 在 CentOS 上的落地配置示例

  • 示例一 基础资源配置(requests/limits)
apiVersion: v1
kind: Pod
metadata:
  name: demo
spec:
  containers:
  - name: app
    image: nginx:1.25
    resources:
      requests:
        memory: "128Mi"
        cpu: "250m"
      limits:
        memory: "256Mi"
        cpu: "500m"
  • 示例二 亲和性与反亲和性(分散部署 + 定向节点)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values: ["web"]
              topologyKey: kubernetes.io/hostname
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: disktype
                operator: In
                values: ["ssd"]
      containers:
      - name: app
        image: nginx:1.25
        resources:
          requests:
            memory: "128Mi"
            cpu: "250m"
          limits:
            memory: "256Mi"
            cpu: "500m"
  • 示例三 污点与容忍(GPU 节点)
# 给节点打上污点
kubectl taint nodes node-gpu1 accelerator=nvidia:NoSchedule

# Pod 容忍该污点以调度到 GPU 节点
# tolerations:
# - key: "accelerator"
#   operator: "Equal"
#   value: "nvidia"
#   effect: "NoSchedule"
  • 示例四 拓扑分布约束(跨节点均匀)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 6
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: kubernetes.io/hostname
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            app: web
      containers:
      - name: app
        image: nginx:1.25
        resources:
          requests:
            memory: "128Mi"
            cpu: "250m"
          limits:
            memory: "256Mi"
            cpu: "500m"

上述示例覆盖了调度所需的关键维度:requests/limits(调度与 QoS)亲和/反亲和(布局策略)污点/容忍(专用节点)拓扑分布(容错与均衡)

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Kubernetes在CentOS上的资源调度是如何进行的
本文地址: https://pptw.com/jishu/758896.html
Kubernetes在CentOS上的日志管理策略是什么 CentOS上Kubernetes的容器运行时有哪些选择

游客 回复需填写必要信息