kubernetes集群内核参数优化
这是宝贵的一线生产经验(涉及到一点关于特定云厂商的内容),如果对大家有帮助请不吝打赏,谢谢支持。
网络参数,分别套用到node和pod,其中pod级通过dot发布时候注入init-container生效,node级通过运维初始化机器脚本生效到内存。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash # node瓶颈是conntrack # 下面2项令TCP窗口和状态追踪更加宽松 sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1 sysctl -w net.netfilter.nf_conntrack_tcp_loose=1 # 下面3项调大了conntrack表,保证操作效率 sysctl -w net.netfilter.nf_conntrack_max=3200000 sysctl -w net.netfilter.nf_conntrack_buckets=1600512 sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30 # pod瓶颈是TCP协议栈 sysctl -w net.ipv4.tcp_timestamps=1 # 与tw_reuse一起用 sysctl -w net.ipv4.tcp_tw_reuse=1 # 仅作用于客户端,允许复用TIME_WAIT端口(与tcp_rw_recycle不同,该选项不受NAT场景下时间戳不一致问题影响) sysctl -w net.ipv4.ip_local_port_range="5120 65000" # 端口范围 sysctl -w net.ipv4.tcp_fin_timeout=30 # 缩短TIME_WAIT时间,加速端口回收 # 下面3个均为加强握手队列能力 sysctl -w net.ipv4.tcp_max_syn_backlog=10240 sysctl -w net.core.somaxconn=10240 sysctl -w net.ipv4.tcp_syncookies=1 |
node开机后需要关闭透明大页,否则影响程序性能(来自VM PHP运维经验):
1 2 |
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag |
在init-container做信号量限制放开(主要是给php cat以及nodejs cat使用):
1 |
sysctl -w kernel.sem="1034 32000 100 1000"; |
清空pod内iptables规则,以便禁用pod内conntrack特性(Ucloud的CNI在POD内下发了一条无用的MASQUERADE规则,需要清理):
1 |
iptables -t nat -F |
因为短连接调用方式的问题,单node内核处理能力有限,不适合选择太高的硬件配置,建议16核32G,并选择ucloud快杰网络增强2.0机型,确保PPS充足。
最后,确保开启网卡多队列,负载均衡软中断。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~
