修改kube-porxy ipvs 模式

## 修改 kube-porxy ipvs 模式 Kubernetes 默认的 kube-proxy 模式为 iptables,但是 iptables 有时候会出现一些问题,比如 clusterip 不能相互 ping 通。所以决定把模式从 iptables 切换为 ipvs。 1. 查看 kube-proxy 信息 ``` kubectl get pods -n kube-system -o wide | grep proxy ``` 2. 使用 kubectl logs 可以看到目前 kube-proxy pod 的 proxy 模式 ``` kubectl logs kube-proxy-54z7p -n kube-system ``` 3. 启动 ipvs 模块 ``` 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/null if [ \$? -eq 0 ]; then /sbin/modprobe \$i fi done EOF chmod +x /etc/sysconfig/modules/ipvs.modules ; bash /etc/sysconfig/modules/ipvs.modules ``` 4. 确保所有节点的 ipvs 的模块已经运行 ``` lsmod | grep ip_vs ``` 5. 修改 kube-proxy configMap 文件,修改为 ipvs 模式 大概是在44行 在master端修改 ``` kubectl edit configmap kube-proxy -n kube-system + mode: "ipvs" # 原来为 mode: "" ``` 6. 删除所有 kube-proxy 的 pod,K8S 有自动愈合功能,当 pod 被删除之后,会重启被删除的 pod ``` kubectl delete pods `kubectl get pods -n kube-system | grep kube-proxy | awk '{print $1}'` -n kube-system 或以下命令也可以: kubectl delete pod -l k8s-app=kube-proxy -n kube-system ``` 7. 查看重启后的 kube-proxy pod 的 proxy 模式是否是 ipvs ``` kubectl get pods -n kube-system -o wide | grep proxy kubectl logs kube-proxy-4vvg2 -n kube-system ``` 8. 安装 ipvsadm 查看具体的 ipvs 规则 ``` # 安装 ipvsadm $ yum install -y ipvsadm # 查看 ipvsadm 已经启用的规则 # 从 forward 的 masq 标识来看,为 lvs/nat 模式 $ ipvsadm -ln ``` 查看k8s所有k8s默认支持的api 控制器 [root@master-01 ~]# kubectl api-resources | grep true 测试ipset负载均衡 kubectl create deployment nginx --image=nginx --replicas=2 kubectl scale --replicas=4 deployment nginx kubectl get pods -w #监控整个过程 kubectl expose deployment nginx --port=8080 --target-port=80 --type=NodePort #--port 8080为集群ip端口 --target-port=80为容器默认端口 kubectl get svc,pod -o wide 筛选对应的ip ipvsadm -L -n | grep -E "10.244.1.18|10.244.1.19"