首页主机资讯Kubernetes在CentOS上的资源调度策略如何

Kubernetes在CentOS上的资源调度策略如何

时间2025-12-18 18:06:04发布访客分类主机资讯浏览1417
导读:Kubernetes 在 CentOS 上的资源调度策略概览 在 CentOS 上,Kubernetes 的调度行为与操作系统无关,核心由 kube-scheduler 完成:监听未绑定 NodeName 的 Pod,经过预选(过滤)—优选...

Kubernetes 在 CentOS 上的资源调度策略概览

CentOS 上,Kubernetes 的调度行为与操作系统无关,核心由 kube-scheduler 完成:监听未绑定 NodeName 的 Pod,经过预选(过滤)—优选(打分)—绑定三个阶段选出最优节点;常见扩展包括节点亲和性/反亲和性、污点与容忍、拓扑分布约束、优先级与抢占、多调度器等,用于满足业务对性能、容错与资源效率的诉求。

核心调度策略与机制

  • 资源请求与限制驱动调度与运行时隔离
    • 调度器以容器的 requests 为基准进行装箱,节点上所有 Pod 的 requests 总和不得超过节点可分配容量;运行时 limits 限制上限,CPU 为可压缩资源(超限限速),内存为不可压缩资源(超限会被 OOMKilled)。
    • 服务质量(QoS)分类影响驱逐顺序:Guaranteed(requests=limits)> Burstable(requests< limits)> BestEffort(未设)
    • 建议为所有业务容器显式设置 requests/limits,避免资源争用与不稳定。
  • 亲和性与反亲和性
    节点亲和性:将 Pod 调度到带特定标签的节点(如 SSD、GPU 等)。
    Pod 反亲和性:避免相同应用的多个副本落在同一节点/机架,提高容灾。
  • 污点与容忍
    • 通过给节点打污点(如 NoSchedule)隔离用途(如 master 节点默认带污点),只有声明容忍的 Pod 才能调度其上。
  • 拓扑分布约束
    • 使用 topologySpreadConstraintszone/机架/hostname 均匀分布副本,控制最大偏差(maxSkew),提升可用性与资源利用均衡。
  • 优先级与抢占、多调度器
    • 为关键业务设置优先级,资源紧张时支持抢占低优先级 Pod;可按工作负载部署多个调度器并行使用。

CentOS 场景下的落地配置要点

  • 为节点打标签并约束调度
    • 标记节点属性:kubectl label nodes disktype=ssd zone=foo
    • 示例:节点亲和性仅调度到 SSD 节点;Pod 反亲和性避免同节点运行相同应用副本;为专用节点(如 GPU)设置污点并让业务 Pod 声明容忍。
  • 设置 requests/limits 与 QoS
    • 示例:requests 保障调度所需,limits 保护节点稳定;核心服务尽量使用 Guaranteed 降低被驱逐风险。
  • 命名空间级配额与默认限额
    • 使用 ResourceQuota 限制命名空间总资源;用 LimitRange 设置默认 requests/limits,避免“无限制”与配置遗漏。
  • 控制平面与系统资源预留
    • 保持 master 污点 不被业务抢占,必要时为系统组件预留资源:kubelet --system-reserved=cpu=500m,memory=1Gi --kube-reserved=cpu=200m,memory=512Mi。
  • 常见排障
    • Pod 长期 Pending:kubectl describe pod 查看事件;检查节点资源、亲和/污点/配额是否阻断调度。
    • 容器 OOMKilled:适当提高内存 limits 或优化应用内存占用。

调度优化与弹性扩缩

  • 调度优化
    • 统一 requests 规格减少节点碎片;结合 亲和/反亲和、拓扑分布 提升容错与数据局部性;必要时启用 优先级/抢占 保障关键负载。
  • 弹性伸缩
    HPA(基于 CPU/内存或自定义指标)自动扩缩 Pod 数量;
    VPA 自动建议/更新 requests/limits,减少人工调参成本;
    Cluster Autoscaler 根据节点资源压力自动增减节点,配合调度策略实现“调度+容量”联动。

示例配置片段

  • 节点亲和性与 Pod 反亲和性(关键业务均匀分布)
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: disktype
          operator: In
          values: ["ssd"]
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchExpressions:
        - key: app
          operator: In
          values: ["web"]
      topologyKey: kubernetes.io/hostname
  • 污点与容忍(专用 GPU 节点)
# 节点打污点
kubectl taint nodes node-gpu1 accelerator=nvidia:NoSchedule

# Pod 容忍
tolerations:
- key: "accelerator"
  operator: "Equal"
  value: "nvidia"
  effect: "NoSchedule"
  • 资源请求与限制(QoS:Burstable)
resources:
  requests:
    memory: "256Mi"
    cpu: "500m"
  limits:
    memory: "512Mi"
    cpu: "1"
  • 拓扑分布约束(跨节点均衡)
topologySpreadConstraints:
- maxSkew: 1
  topologyKey: kubernetes.io/hostname
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app: web
  • 命名空间配额与默认限额
# ResourceQuota
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-quota
  namespace: prod
spec:
  hard:
    requests.cpu: "10"
    requests.memory: "20Gi"
    limits.cpu: "20"
    limits.memory: "40Gi"

# LimitRange
apiVersion: v1
kind: LimitRange
metadata:
  name: default-limit
  namespace: prod
spec:
  limits:
  - default:
      memory: "512Mi"
      cpu: "500m"
    defaultRequest:
      memory: "256Mi"
      cpu: "250m"
    type: Container

上述策略与示例可直接用于 CentOS 节点,关键在于:为节点与业务合理打标签、为容器设置合适的 requests/limits、用 亲和/反亲和与拓扑分布 控制布局、以 配额与默认限额 做治理,并配合 HPA/CA 实现弹性。

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


若转载请注明出处: Kubernetes在CentOS上的资源调度策略如何
本文地址: https://pptw.com/jishu/775314.html
CentOS上如何定制Kubernetes的网络插件 Kubernetes如何在CentOS上进行网络配置

游客 回复需填写必要信息