专栏: 云原生 & DevOps
难度: 专家
标签: Kubernetes 调度优化 大规模集群 scheduler 性能


前言

当 K8s 集群规模到达 1000+ 节点时,默认配置开始出现调度延迟高、Pod 排队积压的问题。本文分享从实际3000节点集群中提炼的调优经验。


一、调度瓶颈分析

# 查看调度延迟
kubectl get events --field-selector reason=FailedScheduling -A

# 查看调度器指标
kubectl port-forward -n kube-system svc/kube-scheduler 10259:10259
curl http://127.0.0.1:10259/metrics | grep scheduler_

二、Scheduler 配置调优

# kube-scheduler-config.yaml
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
  plugins:
    score:
      enabled:
      - name: NodeResourcesFit
      - name: NodeAffinity
  pluginConfig:
  - name: NodeResourcesFit
    args:
      scoringStrategy:
        type: LeastAllocated  # 优先调度到资源最空闲的节点
percentageOfNodesToScore: 50  # 只对50%的节点打分(大集群关键参数)

三、节点分组策略

# 用节点标签划分资源池
kubectl label node node01 node-role=compute
kubectl label node node02 node-role=memory-optimized

# 部署时指定节点组
nodeSelector:
  node-role: memory-optimized

四、优先级与抢占

# 定义优先级类
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 100000
globalDefault: false
description: "用于核心业务,可抢占低优先级Pod"
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: low-priority
value: 1000

五、大规模集群 etcd 优化

# etcd性能指标监控
etcdctl endpoint status --cluster -w table

# 关键配置
--quota-backend-bytes=8589934592   # 8GB存储上限
--auto-compaction-retention=1      # 自动压缩1小时
--snapshot-count=50000             # 减少快照频率

# 独立etcd磁盘(最重要!)
# etcd数据目录必须在SSD上,不能和系统盘共用

结语: 大规模K8s调优没有捷径,核心是理解调度算法原理,然后针对性地调整参数。percentageOfNodesToScore 是集群规模上来后最有效的单一参数调整。

更多推荐