Kubernetes Linux 内核参数最佳实践配置指南
1. 网络相关 (net.*)
2. 虚拟内存管理 (vm.*)
3. 文件系统 (fs.*)
4. 进程调度 (kernel.*)
5. 容器专用参数
# 容器网络转发(必需)
net.ipv4.ip_forward = 1
▸ 原理:允许 IPv4 数据包转发,实现跨节点容器通信
# 提升连接跟踪表大小(解决大规模集群连接问题)
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 86400
▸ 场景:处理大量短连接时避免 "nf_conntrack: table full" 错误
# TIME-WAIT 优化(应对端口耗尽)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 16384
❗ 注意:内核 ≥4.12 已移除 tcp_tw_recycle,不可使用
# 扩大端口范围(NodePort 服务场景)
net.ipv4.ip_local_port_range = 1024 65535
端口耗尽(Port Exhaustion)是指系统中可用的端口号被耗尽的情况。每个TCP或UDP连接都需要一个唯一的端口号,因此如果系统创建了大量的连接,尤其是在短时间内,就可能会耗尽端口号。以下是一些可能导致端口耗尽的情况:
高并发连接:
连接泄漏:
网络扫描或攻击:
配置不当:
长时间运行的连接:
NAT网关或负载均衡器限制:
优化应用程序:
增加本地端口范围:
/proc/sys/net/ipv4/ip_local_port_range
参数来增加可用的本地端口范围。使用连接池:
限制并发连接数:
监控和报警:
使用更高效的资源管理策略:
网络防火墙和安全组规则:
通过上述方法,可以有效地防止端口耗尽问题,确保系统的稳定运行。
# 禁用交换分区(K8s 默认要求)
vm.swappiness = 0
▸ 例外:若必须使用 swap,建议设置 1-10 并配置 kubelet --fail-swap-on=false
# 内存过量分配(处理突发负载)
vm.overcommit_memory = 1
vm.overcommit_ratio = 85
▸ 原理:允许超过物理内存的分配,配合 OOM Killer 工作
# 提升 inotify 监控数量(监控组件场景)
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 524288
▸ 适用:Prometheus、Fluentd 等需要监控大量文件的场景
# 文件句柄数优化
fs.file-max = 2097152
fs.nr_open = 2097152
# 防止 fork 炸弹(安全加固)
kernel.pid_max = 4194303
user.max_user_namespaces = 15000
▸ K8s 需要启用 user namespace
# 容器专用参数
kernel.panic_on_oops = 1
kernel.panic = 10
▸ 系统异常时快速重启
# 提升网络栈性能
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_syn_backlog = 8096
# 调整 PID 限制
kernel.threads-max = 1200000
# 大页内存支持
vm.nr_hugepages = [所需数量]
▸ 需配合 Kubernetes HugePages 特性使用
# RDMA 优化
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
sysctl -w net.ipv4.ip_forward=1
vi /etc/sysctl.d/99-kubernetes.conf
sysctl -p /etc/sysctl.d/99-kubernetes.conf
sysctl -a | grep <参数名>
cat /proc/sys/[参数路径]
“Too many open files” 错误
# 检查当前限制
cat /proc/sys/fs/file-nr
# 临时解决方案
ulimit -n 65535
网络丢包诊断
# 查看丢包统计
netstat -su # UDP
netstat -st # TCP
# 检查连接跟踪表
sysctl net.netfilter.nf_conntrack_count
# 关键指标监控项
- nf_conntrack_count
- tcp_tw_count
- slab内存使用 (slabtop)
- 文件句柄使用率
docker run --rm --pid=host -v /etc:/etc:ro -v /var:/var:ro aquasec/kube-bench:latest
通过合理配置这些参数,可显著提升 Kubernetes 集群的稳定性、性能和安全性。建议根据实际工作负载特征进行针对性调优,并建立持续监控机制。