引言
kube-proxy 目前(v1.17)支持多种工作模式,如:userspace、iptables、ipvs,以及仅在 windows 环境可选的 kernelspace 等。在 linux 环境,未配置 kube-proxy 工作模式的情况下,将优先使用 iptables 模式运行,在不满足 iptables 模式工作条件时,自动回退到 userspace 模式。在 windows 环境,如未配置工作模式,将使用 userspace 模式运行。
ipvs 相比 iptables 提供了更优的性能,那么如何在 linux 环境启用 ipvs 模式呢?
其实很简单,只需要修改 kube-proxy 的启动配置(kube-system/kube-proxy
ConfigMap),将 mode
修改为 ipvs
即可:
# kubectl edit cm kube-proxy -n kube-system
mode: "ipvs"
nodePortAddresses: null
oomScoreAdj: null
portRange: ""
-- INSERT --
保存配置后,为了保证生效,重启 kube-proxy
服务(其实 kube-proxy
是支持自动重启的,奈何博主实验时并未正常重启,这是一个已知的 bug…)
# kubectl delete pod -l k8s-app=kube-proxy -n kube-system
pod "kube-proxy-j8586" deleted
pod "kube-proxy-pd4pz" deleted
pod "kube-proxy-ttrv8" deleted
查看 kube-proxy
启动日志,发现已经启用 ipvs
:
如果您在设置后,发现并未成功启用 ipvs
,可能是操作系统未达要求的原因,需要在安装缺失的内核模块后重试。笔者实验的操作系统为 CentOS Linux release 7.6.1810 (Core)
,直接启用 ipvs
即可成功。