更改Kubernetes为ipvs代理模式
资源列表
操作系统 | 配置 | 主机名 | IP | 所需软件 |
---|---|---|---|---|
CentOS 7.9 | 2C4G | k8s-master | 192.168.93.101 | Docker、K8S使用kubeadm安装 |
CentOS 7.9 | 2C4G | k8s-node01 | 192.168.93.102 | Docker、K8S使用kubeadm安装 |
CentOS 7.9 | 2C4G | k8s-node02 | 192.168.93.103 | Docker、K8S使用kubeadm安装 |
基础环境
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭内核安全机制
sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
一、kube-proxy介绍
- kube-proxy负责k8s service的实现,即实现了k8s内部从pod到service和外部从node port到service的访问
- 每个节点都有一个kube-proxy容器进程。kube-proxy管理将寻址到集群Kubernetes Service对象的虚拟IP地址(VIP)的流量转发到适当的后端Pod。
- kube-proxy有三种代理模式
1.1、userspace模式
-
最早的代理模式。在userspace模式下,kube-proxy会在每个节点上创建一个监听指定端口的用户空间进程,该进程负责接收外部流量并将其转发到相应的Service和Pod。在k8s v1.2版本以后就已经淘汰了。
-
缺点:性能较差,因为每个流量都需要经过用户空间进程的处理,导致较高的延迟和资源消耗
1.2、iptables代理模式
- 在k8s v1.12版本之前的默认模式。该模式完全利用内核iptables规则来实现service的代理和负载均衡。
- 该模式的优点是较userspace模式效率更高,当部署服务多的时候会生成大量的iptables规则。
1.3、ipvs代理模式
-
k8s v1.12版本之后的默认模式。与iptables类似,在内核实现,基于netfilter,监控service、pod的变化并创建对应的ipvs规则,不需要改变iptables规则链
-
两则比较的话:ipvs和iptables都是基于netfilter实现的。但ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块;
-
iptables:规则灵活、功能强大;规则遍历匹配和更新,呈线性时延;
-
IPVS:工作在内核态,有更好的性能;调度算法丰富:rr,wrr,lc,wlc,ip hash…
二、更改代理模式
2.1、查看kube-proxy代理模式
- master节点操作
# 方法1:如果回显是跟下面一样那使用的是默认的代理模式iptables
[root@k8s-master ~]# kubectl get cm kube-proxy -n kube-system -o yaml | grep mode
mode: ""
# 方法2
[root@k8s-master ~]# curl localhost:10249/proxyMode
iptables[root@k8s-master ~]#
2.2、更改代理模式
- 更改代理模式的方式有很多种我这里只采取其中的一种
- 修改kube-proxy的配置文件以configmap方式存储,如果让所有节点kube-proxy生效,需要重建新的pod。使用kubernetes部署k8s,若初始化k8s集群时,默认没有开启IPVS。则需要通过修改kube-proxy的配置文件来开启IPVS
2.2.1、所有节点安装IPVS软件
yum -y install ipset ipvsadm
2.2.2、所有节点加载IPVS模块
# 注意:linux kernel(内核)如果是4.19以上版本的请将nf_conntrack_ipv4 更新为 nf_conntrack。
uname -r
3.10.0-1160.71.1.el7.x86_64
cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/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
sh /etc/sysconfig/modules/ipvs.modules
# 查看内核模块
lsmod | grep ip_vs
lsmod | grep nf_conntrack_ipv4
2.2.3、master节点修改kube-proxy的配置文件
[root@k8s-master ~]# kubectl edit configmaps kube-proxy -n kube-system
# 默认大概在43行左右,添加ipvs,使其更改为ipvs代理模式,更改之后会自动生效
mode: "ipvs"
## 部分内容省略
# 保存退出后将会有以下回显
configmap/kube-proxy edited
2.2.4、查看kube-system命名空间下的kube-proxy
[root@k8s-master ~]# kubectl get pod -n kube-system | grep kube-proxy
kube-proxy-2c282 1/1 Running 1 3d10h
kube-proxy-6n6pn 1/1 Running 1 3d10h
kube-proxy-zhm2m 1/1 Running 1 3d10h
2.2.5、查看旧的kube-proxy,k8s会自动生成新的kube-proxy
[root@k8s-master ~]# kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
pod "kube-proxy-2c282" deleted
pod "kube-proxy-6n6pn" deleted
pod "kube-proxy-zhm2m" deleted
2.2.6、查看新的kube-proxy
- 通过pod名称去判定是否为新的porxy的pod
[root@k8s-master ~]# kubectl get pod -n kube-system | grep kube-proxy
kube-proxy-2bbrd 1/1 Running 0 48s
kube-proxy-brjjl 1/1 Running 0 57s
kube-proxy-bwv8k 1/1 Running 0 58s
2.2.7、查看是否更改
[root@k8s-master ~]# kubectl get cm kube-proxy -n kube-system -o yaml | grep mode
mode: "ipvs"
[root@k8s-master ~]# curl localhost:10249/proxyMode
ipvs[root@k8s-master ~]#
2.2.8、查看负载调度策略
- 未必一样
[root@k8s-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.96.0.1:443 rr
-> 192.168.93.101:6443 Masq 1 0 0
TCP 10.96.0.10:53 rr
-> 10.244.58.194:53 Masq 1 0 0
-> 10.244.85.194:53 Masq 1 0 0
TCP 10.96.0.10:9153 rr
-> 10.244.58.194:9153 Masq 1 0 0
-> 10.244.85.194:9153 Masq 1 0 0
UDP 10.96.0.10:53 rr
-> 10.244.58.194:53 Masq 1 0 0
-> 10.244.85.194:53 Masq 1 0 0
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 【云原生】更改Kubernetes为ipvs代理模式
发表评论 取消回复