大家好,欢迎来到IT知识分享网。
使用kubeadm默认安装的kubernetes集群,每个节点会以pod方式运行kube-proxy组件,其主要作用是引导访问Service的流量到对应Pod上,如下图,
kube-proxy工作在网络层,有三种工作模式:
- 用户空间模式(因为性能很弱,已淘汰,本文不涉及)
- iptables(kubeadm安装集群时默认使用的模式)
- ipvs
如果你手头没有供测试的kubernetes集群,可参考这篇文章部署一个,8G内存的笔记本就可以。
为什么要改变?
kube-proxy组件默认工作在iptables模式,因为整个处理流程发生在内核层,处理速度并不弱。但当集群规模很大时,Service对象的数量超过了1000,这时性能减弱就比较明显。主要是因为iptable规则是顺序查找,时间复杂度可认为是O(n),而ipvs模式依靠ipset,底层实现使用hash存储规则,时间复杂度是O(1)。这样的话,规则的查找速度就和集群中Service的数量多少没有关系。ipvs模式还有一个明显的优势:支持丰富的负载均衡策略,如轮循、最少连接、最短延时等。iptables和ipvs模式对CPU、内存资源的使用也有不同,具体可上网查询。
修改iptables为ipvs
1,安装所需包
笔者使用的主机操作系统是CentOS 7,读者根据实际情况选择安装方法,
安装ipset和ipvsadm,
yum install ipset ipvsadm -y
配置系统启动自动加载ipvs模块,
cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && \ bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
2,配置kube-proxy
- 全新安装集群
生成“kubeadm init”命令使用的配置文件,
kubeadm config print init-defaults > kubeadm.yaml
文件末尾加入下面的内容,
--- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs
- 修改已部署的集群
更新kube-proxy配置,将其工作模式修改为“ipvs”,
kubectl edit configmap kube-proxy -n kube-system ... mode: ipvs
删除集群中正在运行的kube-proxy Pod,
kubectl get po -n kube-system kubectl delete po -n kube-system <pod-name>
查看Pod输出的日志,确定是否修改成功
kubectl logs [kube-proxy pod] | grep "Using ipvs Proxier"
下面输出,表明配置成功!
[root@master ~]# kubectl logs kube-proxy-ks42r -n kube-system | grep "Using ipvs Proxier" I0227 05:56:29. 1 server_others.go:269] "Using ipvs Proxier"
可以创建一个测试服务,使用命令“ipvsadm -Ln”查看结果。
总结
文章介绍了将kube-proxy修改为ipvs工作模式的方法,如果你使用公有云平台,如阿里的容器服务-ACK,可以通过点选实现,操作就更简单。不管怎样,熟悉工作原理最重要。希望这篇文章能帮到正在努力的你,欢迎点赞、评论!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/86965.html