【云原生与DevOps】06-K8s大规模集群调度优化:3000节点经验分享
·
专栏: 云原生 & 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 是集群规模上来后最有效的单一参数调整。
更多推荐
所有评论(0)