修改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"