在 Linux 上的 Kubernetes(K8s)集群中提升性能,通常可以从 操作系统、K8s 本身、容器运行环境、网络、存储和资源调度 等多个层面入手。下面给你一个系统化的优化思路,偏向生产环境落地 ✅。
重点优化网络与内存:
# 临时生效
sysctl -w net.core.somaxconn=32768
sysctl -w net.ipv4.tcp_max_syn_backlog=32768
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w vm.swappiness=0
常见优化项:
| 参数 | 作用 |
|---|---|
net.core.somaxconn |
提高连接队列 |
tcp_max_syn_backlog |
TCP 半连接队列 |
ip_local_port_range |
增加可用端口 |
vm.swappiness |
减少 swap 使用 |
vm.overcommit_memory=1 |
Redis / 内存型应用 |
✅ 建议写入 /etc/sysctl.d/k8s.conf
K8s 强烈建议关闭 swap:
swapoff -a
sed -i '/swap/d' /etc/fstab
否则会影响调度准确性与性能。
cpupower frequency-set -g performance
推荐:
noatime,nodiratime
--max-pods=110
--eviction-hard=memory.available<100Mi
--eviction-soft=memory.available<200Mi
说明:
✅ 必须设置
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
好处:
priorityClassName: system-cluster-critical
推荐:
避免:
conntrack 优化:sysctl -w net.netfilter.nf_conntrack_max=131072
volumeMode: Filesystem
emptyDircontainerd 而非 docker[plugins."io.containerd.grpc.v1.cri".containerd]
discard_unpacked_layers = true
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution: []
避免:
kubectl autoscale deployment app --min=2 --max=10 --cpu-percent=60
✅ 实现弹性扩容
重点指标:
| 现象 | 常见原因 |
|---|---|
| Pod 启动慢 | 镜像大、存储慢 |
| CPU 高但 QPS 低 | 限流、锁、GC |
| 网络抖动 | conntrack、MTU |
| OOM | Request 设置不合理 |
Linux + K8s 性能优化的核心:资源可预测 + 避免资源争抢 + 减少不必要开销
如果你愿意,我可以:
你现在集群规模多大?主要跑什么业务?