最新消息:

Kube-proxy会自动将nf_conntrack_max改为131072

IT技术 ipcpu 8154浏览

一、发现问题

新搭建了Kubernetes1.8.1,想对ingress和nodeport性能进行测试。结果ab跑了没几个请求,K8S的机器就报错了。

kernel: nf_conntrack: table full, dropping packet

二、排查定位

这也算经典的错误了,查了下nf_conntrack_max只有131072,肯定是不够的,CentOS7.3默认应该是65536*4=262144。肯定是有地方改动这个值了,查了一圈没找到,最后看了下Kube-proxy的日志,结果还真是它改的!

[root@k8s-m-1 ~]# kubectl logs kube-proxy-q2s4h -n kube-system
W0110 09:32:36.679540      1 server_others.go:263] Flag proxy-mode="" unknown, assuming iptables proxy
I0110 09:32:36.681946      1 server_others.go:117] Using iptables Proxier.
I0110 09:32:36.699112      1 server_others.go:152] Tearing down inactive rules.
I0110 09:32:36.860064      1 conntrack.go:98] Set sysctl 'net/netfilter/nf_conntrack_max' to 131072
I0110 09:32:36.860138      1 conntrack.go:52] Setting nf_conntrack_max to 131072
I0110 09:32:36.860192      1 conntrack.go:98] Set sysctl 'net/netfilter/nf_conntrack_tcp_timeout_established' to 86400
I0110 09:32:36.860230      1 conntrack.go:98] Set sysctl 'net/netfilter/nf_conntrack_tcp_timeout_close_wait' to 3600
I0110 09:32:36.860480      1 config.go:102] Starting endpoints config controller

三、寻找罪魁祸首

翻看了一下源代码,发现这是一个预设值,在kube-proxy的参数里可以找到。

--conntrack-max-per-core int32                Maximum number of NAT connections to track per CPU core (0 to leave the limit as-is and ignore conntrack-min). (default 32768)
#@每个核默认32768个,总数就是32768*CPU核数
--conntrack-min int32                          Minimum number of conntrack entries to allocate, regardless of conntrack-max-per-core (set conntrack-max-per-core=0 to leave the limit as-is). (default 131072)
#@最小值是131072个,CPU核数低于或者等于4,默认是131072

四、解决

找到原因了,如何修改kube-proxy的参数呢?

我的K8S使用kubeadm安装的,kube-proxy是运行在容器里的,只能去dashboard里面去修改YAML文件了。

            "command": [
              "/usr/local/bin/kube-proxy",
              "--kubeconfig=/var/lib/kube-proxy/kubeconfig.conf",
              "--cluster-cidr=10.96.0.0/12",
              "--conntrack-min=524288"
            ],

改完就自动生效了。

看来Kubernetes的预设值还有很多坑,得仔细看看。

五、参考资料

https://kubernetes.io/docs/reference/generated/kube-proxy/

转载请注明:IPCPU-网络之路 » Kube-proxy会自动将nf_conntrack_max改为131072