kubernetes1.12 kube-proxy开启ipvs 模式

以 ipvs 模式 运行kube-proxy

前提条件:
确保IPVS需要内核模块
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
检查已编译到节点内核中
grep -e ipvs -e nf_conntrack_ipv4 /lib/modules/$(uname -r)/modules.builtin

是否被加载
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

to check loaded modules, use

lsmod | grep -e ipvs -e nf_conntrack_ipv4

or

cut -f1 -d " " /proc/modules | grep -e ip_vs -e nf_conntrack_ipv4

注:
linux kernel 4.19版本已经将nf_conntrack_ipv4 更新为 nf_conntrack, 而 kube-proxy 1.13 以下版本,强依赖 nf_conntrack_ipv4。 解决方式:
1、降级内核到 4.18
2、升级kube-proxy到 1.13+ (推荐,无需重启机器,影响小)

升级kube-proxy:
1、下载bin文件
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.13.md#node-binaries
wget https://dl.k8s.io/v1.13.2/kubernetes-node-linux-amd64.tar.gz

2、解压后替换 kube-proxy文件,更新配置,完成重启
tar -zxvf kubernetes-node-linux-amd64.tar.gz
mv /usr/local/bin/kube-proxy /usr/local/bin/kube-proxy.1.12.3
cp kubernetes/node/bin/kube-proxy /usr/local/bin/

配置文件更新如下:

/etc/systemd/system/kube-proxy.service

...
--proxy-mode=ipvs
...

systemctl restart kube-proxy.service # 重启服务

3、 查看日志确认没有异常
journalctl -u kube-proxy.service
日志中输出:
server_others.go:189] Using ipvs Proxier. 表示配置ipvs模式成功

接下来验证 ipvs 规则:
(需提前安装好 ipvsadm 管理工具)
#ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.17.0.1:30443 rr
-> 10.244.0.23:443 Masq 1 0 0
TCP 172.17.0.1:36142 rr
-> 10.244.1.4:9090 Masq 1 0 0
TCP 172.17.0.1:39000 rr
-> 10.244.0.25:9090 Masq 1 0 0
TCP 172.17.0.1:39001 rr
-> 10.244.2.13:9093 Masq 1 0 0
TCP 10.68.0.1:443 rr

我们可以看到有相关的规则,表示service 已经开始使用ipvs 进行流量负载均衡了。

4、压力测试:
简单启动nginx 服务, 暴露nodeport
#kubectl create deployment nginxtest --image=nginx:1.12
#kubectl expose deployment nginxtest --port=80 --type=NodePort

#kubectl get svc nginxtest
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginxtest NodePort 10.68.10.190 <none> 80:35896/TCP 84s
#kubectl get deployments nginxtest
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginxtest 1 1 1 1 118s

使用ab进行测试:
#ab -c 100 -n 100000 http://10.68.10.190/
#ab -c 100 -n 100000 http://10.188.1.201:35896/

如无异常,则表示ipvs功能正常可用了。

踩的一些坑:
#使用ab测试,发现有许多耗时非常大的请求,有时也会失败。 查看dmesg日志后发现有如下日志输出:

net_ratelimit: 544 callbacks suppressed
nf_conntrack: nf_conntrack: table full, dropping packet

-------》 提示 nf_conntrack: table full,增加如下值到 sysctl.conf中。 kube-proxy 默认会调整到 131072
net.netfilter.nf_conntrack_max=1048576
net.nf_conntrack_max=1048576

apr_socket_recv: Connection reset by peer 

-------》 ab测试的时候出现,这个主要防止 syn***的, 内网我们可以打开 echo " net.ipv4.tcp_syncookies = 0" >> /etc/sysctl.conf && sysctl -p

参考文献: https://kubernetes.io/zh/blog/2018/07/09/ipvs-based-in-cluster-load-balancing-deep-dive/
https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/README.md#run-kube-proxy-in-ipvs-mode
https://testerhome.com/topics/7509

原文地址:https://blog.51cto.com/devops9527/2355193

时间: 2024-11-15 01:05:31

kubernetes1.12 kube-proxy开启ipvs 模式的相关文章

kubernetes1.11.0安装教程,开启ipvs时代

包地址:http://sealyun.com/pro/products/ master上: cd shell && sh init.sh && sh master.sh node上:cd shell && sh init.sh 在node上执行master输出的join命令即可 (命令忘记了可以用这个查看,kubeadm token create -print–join-command)本次包更新内容,增加了crictl,否则无法使用kubeadm安装集群新

CentOS7.5 使用 kubeadm 安装配置 Kubernetes1.12(四)

在之前的文章,我们已经演示了yum 和二进制方式的安装方式,本文我们将用官方推荐的kubeadm来进行安装部署. kubeadm是 Kubernetes 官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践. 一.所有节点环境准备 1.软件版本 软件 版本 kubernetes v1.12.2 CentOS 7.

[k8s]k8s 1.9(on the fly搭建) 1.9_cni-flannel部署排错 ipvs模式

角色 节点名 节点ip master n1 192.168.14.11 节点1 n2 192.168.14.12 节点2 n3 192.168.14.13 https://raw.githubusercontent.com/lannyMa/scripts/master/k8s/ 准备token.csv和bootstrap.kubeconfig文件 - 在master生成token.csv BOOTSTRAP_TOKEN="41f7e4ba8b7be874fcff18bf5cf41a7c"

微信开发——开启开发者模式

微信开发的第一步--就是开启开发者模式. 1.后台写好相关的验证信息 1 import java.io.IOException; 2 import java.io.InputStream; 3 import java.io.PrintWriter; 4 import java.util.Arrays; 5 import java.util.Map; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.http.Htt

Kube-proxy使用IPVS模式转发

操作系统: CentOS 7.5 内核版本:3.10 1.安装ipvsadm.conntrackyum -y install ipvsadm conntrack-tools 2.加载ipvs模块vim /etc/sysconfig/modules/ipvs.modules #!/bin/bash ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip

【FE前端学习】sublime开启vim模式

学习目标:在sublime下开启vim模式,了解基本vim的编辑快捷键. 下载安装Sublime Text 3 :http://www.sublimetext.com/3 Vim/Vi: Vim/Vi 是一个文本编辑器,没有菜单,只有命令,适合写前端代码.高效命令行使用vim编辑文本,只需在键盘上操作就可以,根本无需用到鼠标.. 开启vim模式: 在菜单栏中: Preferences -> Setting - User 即可打开配置文件进行编辑,将 ignored_packages 项的[]里面

lnmp1.2 开启pathinfo模式

默认的lnmp没有开启pathinfo模式,但很多框架需要用到. cd /usr/local/nginx/conf vim enable-php.conf location ~ [^/]\.php(/|$) { # comment try_files $uri =404; to enable pathinfo #try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fa

M80T开启高性能模式教程

首先,为win8平板吧平反,开启高性能模式的方法本吧一样能研究出来,而 网络世界 重在分享,没必要独自秀优越感,以下本人研究2天的成果与教程,大家尝试吧,有用的就顶1顶贴 @只是侦探  @拉出来的遛遛 ★高性能模式与所谓的华硕推送更新.控制面板多一项功能完全无关,别再受他人误导了! 1)桌面模式下按win+R,输入regedt32,运行注册表: 2)注册表内按照路径hkey_local_machine>system>currentcontrolset>control>power,在

是否开启调试模式

ini_set()具有更改PHP.ini设置的功能.此函数接收两个参数:需要调整的配置变量名,以及变量的新值. // 是否开启调试模式define('DEBUG',true);if(DEBUG){ ini_set('display_errors','on'); }else{ ini_set('display_errors','off');}