【云原生】更改Kubernetes为ipvs代理模式

更改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

相关推荐
人生匆匆10 分钟前
docker安装elasticesarch-head
运维·docker·jenkins
Graceful_scenery18 分钟前
工具指南 - jenkins
运维·jenkins
中云DDoS CC防护蔡蔡1 小时前
爬虫爬数据犯法吗
运维·服务器·爬虫·python·http
爱技术的小伙子1 小时前
Linux中的LVM逻辑卷管理:创建、扩展和缩减逻辑卷
linux·运维·服务器
OkeyProxy1 小时前
IP地址設置的全面指南-okeyproxy
代理模式·proxy模式·代理ip·代理服务器·代理协议
阿然成长日记1 小时前
【Linux】静态库的制作和使用详解
linux·运维·服务器
盏灯2 小时前
🚢🚢🚢云服务器Docker快速通关——从部署到实战
docker
shark_西瓜甜3 小时前
shark云原生-日志体系-ECK
elasticsearch·docker·云原生
大虾别跑3 小时前
欧拉openEuler 22.03 LTS-部署k8sv1.03.1
云原生·容器·kubernetes
噫吁嚱!!!3 小时前
Linux安装elasticsearch单机版
linux·运维·ubuntu