Debian上Kubernetes性能优化实战指南
一 基础系统与内核优化
- 关闭或禁用 Swap:Kubelet 默认不支持 Swap,建议执行
sudo swapoff -a 并在 /etc/fstab 中注释 swap 条目,避免内存颠簸与 OOM 误杀。
- 网络内核参数:提升连接与端口复用能力,编辑 /etc/sysctl.conf 或 /etc/sysctl.d/99-kubernetes.conf 并
sysctl -p 生效:
- net.core.somaxconn=65535
- net.ipv4.tcp_max_syn_backlog=65535
- net.ipv4.ip_local_port_range=1024 65535
- net.ipv4.tcp_tw_reuse=1;net.ipv4.tcp_fin_timeout=30;net.ipv4.tcp_max_tw_buckets=180000
- 容器网络转发:net.bridge.bridge-nf-call-iptables=1;net.ipv4.ip_forward=1
- 内存回收倾向:vm.swappiness=10(避免过早换页,兼顾稳定性与性能)
- 容器运行时与版本:自 v1.24 起建议使用 containerd 作为运行时;如使用 Docker,需通过 cri-dockerd 适配。
- 基础加固与网络:系统更新到稳定版本(如 Debian 12 Bookworm),合理放行节点间通信端口(如 6443/179/4789/51820-51821 等,视所用 CNI/隧道而定),并配置 kubectl 上下文以便运维。
二 调度与资源编排优化
- 为工作负载设置合理的资源请求与限制:避免无请求导致“不可调度”或无限制引发节点资源竞争;结合应用特性设置 requests/limits,减少 OOM 与 CPU 限流。
- 亲和与反亲和:
- 使用 nodeSelector/nodeAffinity 将高 IO/低延迟应用调度到高性能节点或指定节点池。
- 通过 podAntiAffinity 将关键副本分散到不同节点/故障域,提升可用性与吞吐。
- 污点与容忍:为 GPU/AI、专用硬件或维护窗口打污点(如 NoSchedule/NoExecute),仅允许匹配容忍的 Pod 调度,保障资源隔离与稳定性。
- 拓扑分布约束:使用 topologySpreadConstraints 在节点/机架/可用区等拓扑域上均匀打散副本,降低“热点”风险。
- 自动扩缩容:基于 CPU/内存 或自定义指标配置 HPA,并设置合理的 minReplicas/maxReplicas 与目标利用率,平滑应对流量波动。
- 批量与拓扑感知:对 Gang Scheduling(全有或全无)与 拓扑感知调度 敏感的工作负载(如分布式训练/大数据作业),优先将协同 Pod 放置在同一低时延拓扑域,减少跨域通信开销。
三 网络与存储性能优化
- CNI 与 MTU:选择高性能 CNI 插件(如 Calico/Flannel/Weave),并根据底层网络设置正确的 MTU(1500 或 9000/Jumbo Frames),避免分片与吞吐损失。
- 服务入口与负载均衡:为 Service 配置 LoadBalancer 或 NodePort,在多节点前放置 HAProxy/Nginx 等四层/七层负载均衡,提升吞吐与可用性。
- 持久化与本地盘:有状态服务优先使用 高性能 SSD/NVMe 与本地 PV,减少网络存储抖动;合理设置 StorageClass 与 QoS,避免节点 IO 争用。
- 网络策略与安全:最小化 NetworkPolicy,仅放行必要流量,减少无效广播与策略匹配开销。
四 运行时与节点级优化
- CPU 与 NUMA 亲和:对延迟敏感型应用启用 CPU 拓扑感知调度,将 Pod 固定到特定 CPU 核心/NUMA 节点,减少跨 NUMA 访存与上下文切换抖动。
- CPU Burst:允许容器在空闲时积累时间片,应对启动/突发流量,降低 CPU Throttled 导致的延迟波动。
- QoS 与优先级:为关键业务设置 Guaranteed/Burstable QoS,低优任务使用 BestEffort 或弹性限额,结合 弹性资源限制/CPU QoS/内存 QoS/L3 Cache 与内存带宽隔离 实现在离线混部与性能隔离。
- 重调度与热点打散:启用 重调度 与 负载热点打散,在节点负载不均或资源碎片时自动迁移 Pod,维持集群长期均衡。
- 节点资源水位:结合 负载感知调度 优先将 Pod 调度到负载较低节点,避免单点过热。
五 监控可观测性与容量规划
- 监控与告警:部署 Prometheus + Grafana 采集 节点/Pod/容器 指标,关注 CPU Throttled、内存压力、网络丢包/重传、磁盘 IO 等待 等关键面板并设置阈值告警。
- 日志与排障:集中式日志(如 ELK)统一采集容器日志,结合 事件(Events) 与 kubectl describe pod 快速定位调度失败、镜像拉取、健康检查等问题。
- 容量与扩展:基于监控数据规划 节点规模 与 资源配额(ResourceQuota),必要时横向扩容节点或纵向提升规格;为 etcd 采用 SSD、多实例与定期备份,保障控制面稳定与低延迟。