适用于 CentOS 的 Kubernetes 性能调优要点
一 系统层与内核参数
- 关闭 Swap 并优化内存策略:执行 swapoff -a 并在 /etc/fstab 注释 swap 行;设置 vm.swappiness=0、vm.overcommit_memory=1,减少换页与内存分配抖动。
- 基础网络转发与桥接:开启 net.ipv4.ip_forward=1、net.bridge.bridge-nf-call-iptables=1、net.bridge.bridge-nf-call-ip6tables=1,确保容器跨网段转发与 iptables 策略生效。
- 连接跟踪与邻居表:提升大规模连接场景的稳定性,建议 net.netfilter.nf_conntrack_max=10485760;邻居表 net.ipv4.neigh.default.gc_thresh1=1024 / 4096 / 8192 分层阈值,减少 GC 抖动。
- 文件与事件监控:提高可观测与 inotify 上限,fs.file-max=1000000,fs.inotify.max_user_instances=524288,fs.inotify.max_user_watches=524288。
- 虚拟内存与文件系统:根据应用需求设置 vm.max_map_count=655360;块设备建议 noop/deadline I/O 调度(SSD/NVMe 友好)。
- 可选:内核与日志。对 CentOS 7 可考虑升级至 ELRepo 5.x 长期支持内核;为 systemd-journald 设置持久化与限流(Storage=persistent、SystemMaxUse=10G、MaxRetentionSec=2week)以避免磁盘被日志打满。
二 容器运行时与 kubelet 基础配置
- 容器运行时与驱动:优先选择 containerd/CRI-O;kubelet 与容器运行时保持一致的 cgroup driver(systemd 或 cgroupfs),避免资源统计与限额偏差。
- kubelet 关键参数:结合节点资源设置 –max-pods(避免超出节点可承载 Pods 上限);配置合理的 CPU/内存 requests/limits 与 eviction 阈值,减少节点 OOM 与驱逐风暴。
- 镜像与日志:使用 多阶段构建 与 轻量基础镜像 缩短拉取与启动时间;容器日志采用 json-file 并限制 max-size=100m,防止日志无限增长。
- 运行时存储:容器运行时使用 overlay2(稳定、性能佳)。
三 网络性能优化
- CNI 选择与 MTU:优先 Calico/Cilium/Flannel 等成熟 CNI;按网卡与封装开销设置 MTU(如 VXLAN 通常下调 50–100 字节),避免分片与吞吐劣化。
- 服务转发模式:在大规模 Service/Endpoint 场景优先 IPVS 模式(连接调度更高效);在中小规模或对规则遍历敏感场景可评估 iptables。
- 连接跟踪与 conntrack:为 kube-proxy 调整 –conntrack-max 与 –conntrack-ttl,缓解高并发短连接场景的 conntrack 瓶颈。
- 减少五元组转换:尽量使用 ClusterIP/内部 Service 或 LoadBalancer/Ingress 承载南北向流量,减少 NodePort 导致的 iptables/NAT 转换压力。
- 高速网络:优先 10Gbps+ NIC、合理 RSS/队列与中断绑定,降低软中断与网络抖动。
四 存储与 etcd 调优
- 存储硬件与调度:优先 SSD/NVMe 与低时延后端;为 etcd 单独挂载高性能磁盘,避免与容器/日志争用。
- etcd 关键参数:部署 奇数副本(≥3) 提升可用性与读吞吐;按延迟与规模调整 –heartbeat-interval 与 –election-timeout;必要时增大 –quota-backend-bytes 避免数据库空间受限。
- 存储类与动态供给:按应用 SLO 配置 StorageClass(如 SSD/HDD/混合),为数据库等高 IOPS 负载绑定高性能类;设置合理的 PV/PVC 容量与回收策略,避免资源浪费。
- 调度与拓扑:对 StatefulSet/Pod 使用 节点亲和/反亲和 与 拓扑分散,减少跨机架/跨可用区抖动并提升数据局部性。
五 调度、弹性与可观测性
- 资源与调度:为所有工作负载设置 requests/limits;结合 节点亲和/反亲和、污点与容忍、拓扑分布约束,提升资源利用率与稳定性。
- 弹性伸缩:启用 HPA(CPU/内存/自定义指标)与 Cluster Autoscaler,在负载峰值时自动扩缩节点与副本数。
- 监控与日志:部署 Prometheus + Grafana 监控节点/Pod/网络/etcd 关键指标;日志采用 EFK/ELK 聚合与降噪,避免采集与存储成为瓶颈。
- 变更与验证:调优遵循“单变量变更—压测—回滚预案”,在预发/灰度环境验证后再推广;持续关注 Kubernetes 与相关组件版本更新 获取性能修复与优化。