インストール後にkube-proxyの動作モードをIPVSモードに変更する


今、家で使っているKubernetesクラスタについて、インストール時に気にかけておらず、 kube-proxyiptables モードで動いているのでは? と思ったので、確認して ipvs モードに変更してみた。

ちなみに、たしかにipvsモードのほうがパフォーマンスに優れると言われてはいる。 しかしながら、Calicoでおなじみのtigeraによると、大規模になれば違いはでてくるが、 100程度のオーダーでは違いは無いらしい。もはや、ただの自己満である。

https://www.tigera.io/blog/comparing-kube-proxy-modes-iptables-or-ipvs/

現状確認

設定見ればすぐだが、ログを見ても動作確認はできる。

$ kubectl -n kube-system logs kube-proxy-6vvrf kube-proxy
(trim)
W0711 06:32:25.413300       1 server_others.go:324] Unknown proxy mode "", assuming iptables proxy
I0711 06:32:25.418063       1 server_others.go:145] Using iptables Proxier.
I0711 06:32:25.418401       1 server.go:571] Version: v1.17.8
(trim)

未設定なので、iptagblesモードで動くよとばっちり出ている。

ipvsモードに修正

kubectl -n kube-system edit configmaps kube-proxy して、 mode: "" になっているところを、 mode: ipvs に修正する。

修正したら、 kubectl -n rollout restart daemonset kube-proxy して、再起動すればおしまい。 (もちろん、各Podをdeleteして再作成するのも可)

修正後確認

$ kubectl -n kube-system logs kube-proxy-z8nwd kube-proxy
I0727 14:02:58.646065       1 server_others.go:172] Using ipvs Proxier.
W0727 14:02:58.646292       1 proxier.go:420] IPVS scheduler not specified, use rr by default
I0727 14:02:58.646423       1 server.go:571] Version: v1.17.8

Warningがでているが、IPVSモードでは、kube-proxyの負荷分散方式を、ラウンドロビンや リーストコネクションなどから選べるようだ。 指定していないとラウンドロビンになるようだが、まあそれでいいのではないかな。

https://kubernetes.io/blog/2018/07/09/ipvs-based-in-cluster-load-balancing-deep-dive/#ipvs-based-kube-proxy

まとめ

ipvsの場合の負荷分散方式が、いろいろあるってことは知らなかったので、やってみてよかった。


See also

comments powered by Disqus