引言
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
即可成功。