
K8s 默认配置是为中小规模设计的。当节点数突破 100、Pod 数上万时,etcd 空间满、API 超时、调度延迟、iptables 规则爆炸这些问题会集中爆发。本文整理了生产环境验证过的调优参数,按组件分类,可直接落地。
kubectl get pods --all-namespaces 耗时数十秒根源是默认参数撑不住大规模,需要系统性调优。
etcd 是集群上限的决定因素。
参数 | 默认值 | 建议值 | 说明 |
|---|---|---|---|
--quota-backend-bytes | 2GB | 8GB | 防止存储写满 |
--auto-compaction-retention | 0 | 8h | 定时压缩历史版本 |
--auto-compaction-mode | - | periodic | 周期性压缩模式 |
--max-request-bytes | 1.5MB | 10MB | 限制单请求大小,防大 ConfigMap 冲击 |
kubeadm 配置片段:
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/内存,不要和其他组件混部。
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 | 防止系统组件饿死用户请求 |
配置示例:
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% | 调度质量与速度平衡 |
配置示例:
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 用哈希表,性能更稳定。
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
ipvs:
scheduler: rr
conntrack:
maxPerCore: 32768
min: 1048576系统内核参数
# /etc/sysctl.conf
fs.file-max =2097152
net.core.somaxconn =32768
net.netfilter.nf_conntrack_max =1048576
vm.swappiness =0为控制平面组件设置明确的 requests/limits,防止和业务容器争抢资源。
# kube-apiserver 示例
spec:
containers:
- name: kube-apiserver
resources:
requests:
cpu: "2"
memory: "8Gi"
limits:
cpu: "8"
memory: "16Gi"调优顺序:先稳 etcd,再扩 apiserver 并发,然后放开各组件限流,最后切 IPVS + 调内核。不要一次性全改,分批验证。
“无他,惟手熟尔”!有需要的用起来!
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!