从kubernetes1.8版本开始,新增了kube-proxy对ipvs的支持,并且在新版的kubernetes1.11版本中被纳入了GA。
iptables模式问题不好定位,规则多了性能会显著下降,甚至会出现规则丢失的情况;相比而言,ipvs就稳定的多。
这里使用的kubernetes版本为1.10.3,可以参考https://blog.csdn.net/shihao99/article/details/82384798进行部署。
1、加载内核模快
查看内核模块是否加载
lsmod|grep ip_vs
如果没有加载,使用如下命令加载ipvs相关模块
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
2、更改kube-proxy配置
kubectl edit configmap kube-proxy -n kube-system
找到如下部分的内容
minSyncPeriod: 0s
scheduler: ""
syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 127.0.0.1:10249
mode: "ipvs" # 加上这个
nodePortAddresses: null
其中mode原来是空,默认为iptables模式,改为ipvs
scheduler默认是空,默认负载均衡算法为轮训
编辑完,保存退出
3、删除所有kube-proxy的pod
kubectl delete pod xxx -n kube-system
4、查看kube-proxy的pod日志
kubectl logs kube-proxy-xxx -n kube-system
.有.....Using ipvs Proxier......即可.
5、安装ipvsadm
使用ipvsadm查看ipvs相关规则,如果没有这个命令可以直接yum安装
yum install -y ipvsadm