首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kubernetes 百级节点集群调优实战

Kubernetes 百级节点集群调优实战

作者头像
用户11081884
发布2026-07-20 20:18:30
发布2026-07-20 20:18:30
330
举报

K8s 默认配置是为中小规模设计的。当节点数突破 100、Pod 数上万时,etcd 空间满、API 超时、调度延迟、iptables 规则爆炸这些问题会集中爆发。本文整理了生产环境验证过的调优参数,按组件分类,可直接落地。

场景:150 节点集群的典型问题

  • etcd 频繁告警,甚至进入只读模式
  • kubectl get pods --all-namespaces 耗时数十秒
  • Deployment 滚动更新慢,Endpoint 更新滞后
  • 节点 NotReady,系统组件与业务容器资源争抢

根源是默认参数撑不住大规模,需要系统性调优。

etcd 调优

etcd 是集群上限的决定因素。

参数

默认值

建议值

说明

--quota-backend-bytes

2GB

8GB

防止存储写满

--auto-compaction-retention

0

8h

定时压缩历史版本

--auto-compaction-mode

-

periodic

周期性压缩模式

--max-request-bytes

1.5MB

10MB

限制单请求大小,防大 ConfigMap 冲击

kubeadm 配置片段:

代码语言:javascript
复制
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
etcd:
  local:
    extraArgs:
      quota-backend-bytes: "8589934592"
      auto-compaction-retention: "8h"
      auto-compaction-mode: "periodic"
      max-request-bytes: "10485760"

etcd 必须独占高性能硬件:SSD、独立 CPU/内存,不要和其他组件混部。

kube-apiserver 高并发调优

apiserver 是所有请求的入口。

参数

建议值

说明

--max-requests-inflight

600

读并发上限

--max-mutating-requests-inflight

300

写并发上限

--min-request-timeout

300s

大列表查询超时时间

--watch-cache-sizes

pods=10000,endpoints=5000,…

高频资源缓存大小

--enable-priority-and-fairness

true

防止系统组件饿死用户请求

配置示例:

代码语言:javascript
复制
apiServer:
  extraArgs:
    max-requests-inflight: "600"
    max-mutating-requests-inflight: "300"
    min-request-timeout: "300s"
    watch-cache-sizes: "pods=10000,endpoints=5000,services=1000,deployments=5000,replicasets=5000"
    enable-priority-and-fairness: "true"

控制器与调度器调优

组件

参数

建议值

说明

controller-manager

concurrent-deployment-syncs

20

Deployment 同步并发数

controller-manager

concurrent-endpoint-syncs

15

Endpoint 同步并发数

controller-manager

kube-api-qps / burst

100 / 200

客户端限流

scheduler

kube-api-qps / burst

200 / 400

客户端限流

scheduler

percentage-of-nodes-to-score

60%

调度质量与速度平衡

配置示例:

代码语言:javascript
复制
controllerManager:
  extraArgs:
    concurrent-deployment-syncs: "20"
    concurrent-endpoint-syncs: "15"
    kube-api-qps: "100"
    kube-api-burst: "200"
scheduler:
  extraArgs:
    kube-api-qps: "200"
    kube-api-burst: "400"
    percentage-of-nodes-to-score: "60"

网络与系统底座

kube-proxy 从 iptables 切到 IPVS

iptables 规则数随 Service 数量 O(N²) 增长,IPVS 用哈希表,性能更稳定。

代码语言:javascript
复制
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
ipvs:
  scheduler: rr
conntrack:
  maxPerCore: 32768
  min: 1048576

系统内核参数

代码语言:javascript
复制
# /etc/sysctl.conf
fs.file-max =2097152
net.core.somaxconn =32768
net.netfilter.nf_conntrack_max =1048576
vm.swappiness =0

资源保障

为控制平面组件设置明确的 requests/limits,防止和业务容器争抢资源。

代码语言:javascript
复制
# kube-apiserver 示例
spec:
  containers:
  - name: kube-apiserver
    resources:
      requests:
        cpu: "2"
        memory: "8Gi"
      limits:
        cpu: "8"
        memory: "16Gi"

落地建议

  1. 先评估:根据实际节点数、Pod 数、对象数微调上述推荐值
  2. 配置即代码:用 kubeadm-config.yaml 管理,版本控制
  3. 灰度验证:先在测试集群或非核心节点池应用
  4. 监控观察:重点看 etcd 延迟、API 响应时间、调度队列深度,至少观察 24-72 小时
  5. 迭代调优:根据监控数据调整,形成适合自身业务的基线

调优顺序:先稳 etcd,再扩 apiserver 并发,然后放开各组件限流,最后切 IPVS + 调内核。不要一次性全改,分批验证。

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景:150 节点集群的典型问题
  • etcd 调优
  • kube-apiserver 高并发调优
  • 控制器与调度器调优
  • 网络与系统底座
  • 资源保障
  • 落地建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档