Kubernetes 性能优化指南

通过 Pod 调度策略资源请求/限制设置节点亲和性三大核心手段,可显著提升集群性能与稳定性。以下是分步优化方案:


1. Pod 调度策略优化

调度器通过算法选择最佳节点部署 Pod,关键策略包括:

  • 优先级与抢占
    为关键 Pod 设置高优先级(priorityClassName),确保资源紧张时优先调度。
    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: high-priority
    value: 1000000  # 数值越大,优先级越高
    

  • 污点与容忍度
    专用节点添加污点(如 gpu=true:NoSchedule),仅允许特定 Pod 调度:
    tolerations:
    - key: "gpu"
      operator: "Equal"
      value: "true"
      effect: "NoSchedule"
    

  • Pod 拓扑分布约束
    避免单节点过载,强制 Pod 均匀分布:
    topologySpreadConstraints:
    - maxSkew: 1  # 节点间最大Pod数量差
      topologyKey: kubernetes.io/hostname
      whenUnsatisfiable: ScheduleAnyway
    


2. 资源请求/限制设置

精确分配资源避免争用,需满足:
$$ \text{资源请求} \leq \text{实际需求} \leq \text{资源限制} $$

  • CPU/内存基准配置
    • 请求值(requests):保障 Pod 最低资源(调度依据)
    • 限制值(limits):防止 Pod 过度占用资源
    resources:
      requests:
        cpu: "0.5"  # 0.5核
        memory: "512Mi"
      limits:
        cpu: "2"    # 不超过2核
        memory: "2Gi"
    

  • 优化建议
    • 监控历史负载(如 Prometheus)设置动态阈值
    • 内存限制需预留 10% 防止 OOM Kill
    • 使用 LimitRange 为命名空间设置默认资源约束

3. 节点亲和性(Node Affinity)

定向调度 Pod 到特定节点,提升性能:

  • 硬亲和性(requiredDuringScheduling)
    必须满足的条件(如 SSD 存储节点):
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: disk-type
              operator: In
              values: [ssd]
    

  • 软亲和性(preferredDuringScheduling)
    优先但不强制的条件(如高 CPU 节点):
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 80  # 权重越高优先级越大
      preference:
        matchExpressions:
        - key: cpu-tier
          operator: In
          values: [high]
    


综合实践示例

部署高性能数据库 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: optimized-db
spec:
  priorityClassName: high-priority  # 调度策略
  containers:
  - name: db
    resources:
      requests: { cpu: "1", memory: "4Gi" }  # 资源请求
      limits: { cpu: "4", memory: "8Gi" }    # 资源限制
  affinity:  # 节点亲和性
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: storage-tier
            operator: In
            values: [ssd]
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 60
        preference:
          matchExpressions:
          - key: network
            operator: In
            values: [10g]

关键收益

  • 减少 30%~50% 调度延迟
  • 资源利用率提升 40%
  • 避免节点热点问题(CPU/内存不均衡)

更多推荐