目录

  • 前言
  • kube-proxy ipvs和iptables的异同
  • 查看kube-proxy使用的模式
  • kube-proxy 切换为ipvs模式
  • 二进制部署的kube-proxy也是同样修改

前言

环境:centos7.9 k8s版本v1.22.12 kube-admin安装的k8s
我们知道kube-proxy有两种模式,iptables和ipvs两种模式,ipvs是性能最好的。

kube-proxy ipvs和iptables的异同

相同点:ipvs和iptables都是通过netfitle内核进行转发。
异同点:iptables只是为防火墙设计的,IPtable只是防火墙,而ipvs是专门用于高性能负载均衡的,并使用更高效的数据结构,如hash表并支持索引。
ipvs与iptables相比较,其优势为:
(1)ipvs为大型集群提供了更好的可扩展性和性能
(2)ipvs支持比iptables更复杂的负载均衡算法,如rr、wrr、lc、wlc
(3)ipvs支持服务健康检查和链接重试等功能
(4)ipvs可以动态修改ipset集合
目前大多数的k8s版本的kube-proxy都是默认使用iptables模式,为什么呢,因为无奈,因为主要是用户安装的Linux操作系统
和k8s集群,没有办法让用户安装ipvs,ipvs需要安装自己的模块。正是因为ipvs的高效性能,所以,将kube-proxy的模式切换为ipvs是很有必要的。

查看kube-proxy使用的模式

#先查看有几个kube-proxy
kubectl get pods -n kube-system -o wide| grep proxy
#查看现在的kube-proxy使用什么模式, 应该可以看到using iptables Proxier 这样的字眼就是iptables模式
kubectl logs kube-proxy-b5rt4 -n kube-system
#这样也能查看现在的kube-proxy使用什么模式
kubectl exec -it kube-proxy-b5rt4 -n kube-system -- curl 127.0.0.1:10249/proxyMode

kube-proxy 切换为ipvs模式

#在所有master、node节点上执行下面的脚本启动ipvs模块
touch /etc/sysconfig/modules/ipvs.modules
cat <<EOF >/etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules_dir="/usr/lib/modules/`uname -r`/kernel/net/netfilter/ipvs"
for i in \`ls \$ipvs_modules_dir | sed -r 's#(.*).ko.xz#\1#'\`; do/sbin/modinfo -F filename \$i &> /dev/nullif [ \$? -eq 0 ]; then/sbin/modprobe \$ifi
done
EOF#再次查看一下ipvs.modules文件,反引号的都替换了
[root@master ~]# cat /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules_dir="/usr/lib/modules/3.10.0-1160.71.1.el7.x86_64/kernel/net/netfilter/ipvs"
for i in `ls $ipvs_modules_dir | sed -r 's#(.*).ko.xz#\1#'`; do/sbin/modinfo -F filename $i &> /dev/nullif [ $? -eq 0 ]; then/sbin/modprobe $ifi
done
[root@master ~]#
#给脚本授权
chmod +x /etc/sysconfig/modules/ipvs.modules;
#开始执行脚本来载入ipvs的模块
bash /etc/sysconfig/modules/ipvs.modules;
#查看模块是否已经载入成功,发现已经载入ipvs模块,ipvs有很多算法
lsmod | grep ip_vs
[root@master ~]# lsmod | grep ip_vs
ip_vs_wlc              12519  0
ip_vs_sed              12519  0
ip_vs_pe_sip           12740  0
nf_conntrack_sip       33780  1 ip_vs_pe_sip
ip_vs_nq               12516  0
ip_vs_lc               12516  0
ip_vs_lblcr            12922  0
ip_vs_lblc             12819  0
ip_vs_ftp              13079  0
ip_vs_dh               12688  0
ip_vs_sh               12688  0
ip_vs_wrr              12697  0
ip_vs_rr               12600  0
ip_vs                 145458  26 ip_vs_dh,ip_vs_lc,ip_vs_nq,ip_vs_rr,ip_vs_sh,ip_vs_ftp,ip_vs_sed,ip_vs_wlc,ip_vs_wrr,ip_vs_pe_sip,ip_vs_lblcr,ip_vs_lblc
nf_nat                 26583  6 ip_vs_ftp,nf_nat_ipv4,nf_nat_ipv6,xt_nat,nf_nat_masquerade_ipv4,nf_nat_masquerade_ipv6
nf_conntrack          139264  11 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_nat_masquerade_ipv6,nf_conntrack_netlink,nf_conntrack_sip,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack
[root@master ~]#
#在master节点,修改编辑kube-proxy 这个configmap文件,修改模式为ipvs,如下面的图所示:
[root@master ~]# kubectl edit configmaps kube-proxy -n kube-system
configmap/kube-proxy edited
[root@master ~]#

#我们发现修改kube-proxy 这个configmap文件后,查看pod的日志,发现ipvs模式并没有立即生效,所以我们需要删除kube-proxy的pod,这些pod是
# 由DaemonSet控制,删除之后DaemonSet会重新在每个节点创建的
[root@master ~]# kubectl  delete pods -n kube-system -l k8s-app=kube-proxy
pod "kube-proxy-4lrt4" deleted
pod "kube-proxy-dphbz" deleted
pod "kube-proxy-tmw67" deleted
[root@master ~]# kubectl  get pods -n kube-system -l k8s-app=kube-proxy
NAME               READY   STATUS    RESTARTS   AGE
kube-proxy-dsq5s   1/1     Running   0          4s
kube-proxy-fcbtg   1/1     Running   0          4s
kube-proxy-w7w6g   1/1     Running   0          4s
[root@master ~]# kubectl  logs kube-proxy-dsq5s -n kube-system
......
I0829 06:43:46.215231       1 server_others.go:274] Using ipvs Proxier.       #已经是ipvs模式了
I0829 06:43:46.215241       1 server_others.go:276] creating dualStackProxier for ipvs.
W0829 06:43:46.215371       1 server_others.go:495] detect-local-mode set to ClusterCIDR, but no IPv6 cluster CIDR defined, , defaulting to no-op detect-local for IPv6
E0829 06:43:46.217340       1 proxier.go:379] "can't set sysctl net/ipv4/vs/conn_reuse_mode, kernel version must be at least 4.1"
I0829 06:43:46.217498       1 proxier.go:438] "IPVS scheduler not specified, use rr by default"
E0829 06:43:46.217993       1 proxier.go:379] "can't set sysctl net/ipv4/vs/conn_reuse_mode, kernel version must be at least 4.1"
I0829 06:43:46.218068       1 proxier.go:438] "IPVS scheduler not specified, use rr by default"
W0829 06:43:46.218086       1 ipset.go:113] ipset name truncated; [KUBE-6-LOAD-BALANCER-SOURCE-CIDR] -> [KUBE-6-LOAD-BALANCER-SOURCE-CID]
W0829 06:43:46.218096       1 ipset.go:113] ipset name truncated; [KUBE-6-NODE-PORT-LOCAL-SCTP-HASH] -> [KUBE-6-NODE-PORT-LOCAL-SCTP-HAS]
.......
[root@master ~]# 

至此,kube-proxy的模式已经设置为ipvs模式了。

二进制部署的kube-proxy也是同样修改

也是一样添加模块,然后在kube-proxy的配置文件添加参数:

[root@node1 ~]# cat /opt/kubernetes/config/kube-proxy.conf
KUBE_PROXY_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/opt/kubernetes/logs \
--hostname-override=node1 \
--proxy-mode=ipvs \                    #添加这个参数
--config=/opt/kubernetes/config/kube-proxy-config.yml"
[root@node1 ~]#
[root@node1 ~]# systemctl restart kube-proxy.service #重启#查看现在的kube-proxy使用什么模式, 应该可以看到ipvs 这样的字眼就是ipvs模式
journalctl -u kube-proxy.service
#这样也能查看现在的kube-proxy使用什么模式
curl 127.0.0.1:10249/proxyMode

kube-proxy 切换为ipvs模式相关推荐

  1. k8s组件说明:kubelet 和 kube proxy

    k8s的node节点需要安装三个组件:docker/kubelet/kube proxy pod是存储容器的容器,但容器不止docker一种. CRI:container runtime interf ...

  2. Kube-Proxy IPVS模式源码分析

    女主宣言 kube-proxy当前支持三种方式实现负载均衡,分别是: userspace, iptables, IPVS. 但前两者随着Service的数量增长,存在性能的瓶颈,在生产环境是不能接受的 ...

  3. k8s使用ipvs模式

    k8s的kube-proxy支持iptables.ipvs 模式,默认是iptables 模式 1.加载内核模快,内核支持: 查看当前系统支持的ip_vs : [root@node1 ~]# lsmo ...

  4. k8s开启IPVS模式

    在部署k8s时,默认不是开启的ipvs模式,在已经部署完成后,如果想更改为ipvs,操作如下: 在所有节点安装ipvs软件(Master跟所有的Node节点) yum -y install ipvsa ...

  5. android10全局黑暗,传Android 11或加入自动切换全局黑暗模式功能

    日前有外媒援引消息人士爆料称,谷歌曾在Android 10系统中带来了全局黑暗模式功能,但自动切换黑暗模式的功能却在Android 10系统的早期测试阶段意外遭砍!而据最新消息显示,Android 1 ...

  6. Edge使用手机版切换到电脑模式的方法

    edge浏览器是一个很方便的搜索浏览软件,很多用户都会使用这款软件的手机版进行使用,手机版使用更加的方便,移动化的搜索服务,可以为用户的生活带来更便捷的生活,但是有的时候,在搜索的时候会需要将浏览模式 ...

  7. [转]magento2项目上线注意事项 切换到产品模式

    本文转自:https://segmentfault.com/a/1190000007929783 切换到产品模式 php magento deploy:mode:set production 执行以上 ...

  8. android 分屏切换流程,一种切换分屏模式和多窗口模式的方法与流程

    本发明涉及一种切换分屏模式和多窗口模式的方法,适用于常见的带有触摸的电子设备,包括但不限于在系统的用户界面中使用触摸的方法进行导航的电子设备. 背景技术: 分屏模式是一种将两个应用扩充到全屏幕的交互方 ...

  9. Android使用AudioManager切换到听筒模式

    Android使用AudioManager切换到听筒模式 一.目标 二.参考资料 1. 相关的功能类 2. 参考文章 三.测试结果 1. 手机 2. 有线耳机 3. 蓝牙音箱 4. 有线耳机+蓝牙音箱 ...

最新文章

  1. CIO的职业之路应该朝向何方 做主角还是配角?
  2. python导入xlsxwriter要安装什么吗_Python 模块:XlsxWriter 的使用
  3. c语言的考试是操作电脑还是写试卷,C语言考试试卷都是基础的题目,由于本人没学过C语言,求各位帮忙, 爱问知识人...
  4. php跳转传值,php如何跳转页面并传值?
  5. php串行化,PHP串行化与JSON
  6. IT英语职场之网管英语大全
  7. 从今开始,好好学习一下算法!
  8. 我的第一个Python程序(简单的用户名密码登录程序)
  9. OpenGL:freeglut ERROR: Function <glutCreateWindow> called without first calling ‘glutInit‘.
  10. 【白皮书分享】创新中国2030:释放技术红利,解锁增长动能-埃森哲.pdf(附下载链接)...
  11. 阿里再发最严口罩禁令;铁路再次调整免费退票;iOS 13.4 测试版发布 | 极客头条...
  12. python 画图--简单开始及折线图
  13. python输入文字字符串、如何提取字符_如何使用python从字符串中提取url?
  14. 用户相关命令与文件权限(普通、特殊、隐藏、ACL)
  15. C++ MFC日志Log类 棒棒的 控制台或文件或一起输出
  16. 怎样将pdf压缩得很小?如何把pdf压缩到最小?怎么把pdf压缩到最小?如何把pdf文档压缩变小?怎么将pdf文档压缩至更小?怎么把pdf压缩到最小方法软件网站有哪些?
  17. 边缘态半无穷格林函数谱函数计算
  18. json.loads和Json.load()的区别
  19. RTL设计——亚稳态相关概念
  20. 【Visual C++】游戏开发五十一 浅墨DirectX教程十九 网格模型进阶之路

热门文章

  1. 吉首大学2019年程序设计竞赛(重现赛) B 干物妹小埋
  2. android 10.0 展讯 MTK内置可卸载app
  3. python .py文件转exe和更换图标
  4. python求解析解,Python解微分方程
  5. 【Unity】加载时 Newtonsoft.Json 提示 Metadata file `Newtonsoft.Json.dll` does not contain valid metadata
  6. 有关计算机病毒的说法中正确的是,以下有关计算机病毒的说法中,正确的是()。A.计算机病毒是一些人为编制的程序B.计算机病毒具有隐蔽...
  7. AOV网络——初了解
  8. Linux C/C++ 设置混杂模式的三种方法
  9. 2022-2028全球核反应堆安全壳市场现状及未来发展趋势
  10. 今夏成为小葫芦娃的最后机会!