南宁网站建设咨q479185700上墙新网站百度有审核期
一、 提示
需要重启服务器
 操作之前备份 k8s 中所有资源的 yaml 文件
 如下是备份脚本,仅供参考
# 创建备份目录
test -d $3 || mkdir $3
# $1 命名空间
# $2 资源名称: sts  deploy   configMap  svc 等
# $3 资源备份存放的目录名称for app in  `kubectl -n $1 get $2 |awk '/spms/ {print $1}'`
dokubectl -n $1 get $2 $app -o yaml > $3/$app.yml
donesed -i '/resourceVersion/ d' $3/*
sed -i '/uid/ d' $3/*
sed -i '/last-applied-configuration:/,+1 d' $3/*
sed -i '/creationTimestamp/ d' $3/*
sed -i '/generation/ d' $3/*
sed -ri '/^status:/,$ d' $3/*if [ "$2" == "service" ];thensed -i '/clusterIP:/ d' $3/*sed -i '/clusterIPs:/,+1 d' $3/*
fi 
二、修改设置
1 修改 flannel 环境配置文件
集群中每个节点都要修改
vi /run/flannel/subnet.env
 
FLANNEL_NETWORK=10.244.0.0/16  # 修改
FLANNEL_SUBNET=10.244.2.1/24   # 修改
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
 
2 修改 k8s 集群中 flannel 的 configMap 和 kube-proxy configMap
flannel
kubectl -n kube-system edit configMap kube-flannel-cfg
 
修改如下内容
  net-conf.json: |{"Network": "10.244.0.0/16",  # 这里修改成你想要的网络"Backend": {"Type": "vxlan"}} 
kube-proxy
kubectl -n kube-system edit configmaps kube-proxy
 

3 删除并重建 flannel 和 kube-proxy 的 pod
flannel 和 kube-proxy 是 k8s 中的守护进程,删除 pod 会自动创建,因此这里只需要删除现有的 pod 即可。
for pd in `kubectl -n kube-system get pod  |grep -P 'flannel-ds|kube-proxy'|awk '{print $1}'`
dokubectl -n kube-system delete po $pd
done
 
4 修改集群 contrlor 资源文件
在所有 master 节点修改
修改文件 /etc/kubernetes/manifests/kube-controller-manager.yaml
spec:containers:- command:...# 修改这个- --cluster-cidr=10.244.0.0/16... 
修改完成后,集群会自动更新此 Pod
5 备份 集群所有节点的 yaml 文件,并修改里面的 podCIDR 和 podCIDRs
备份
 kubectl get nodes node_name -o yaml > node_name.yml
 
修改这里
...
spec:podCIDR: 10.244.2.0/24podCIDRs:- 10.244.2.0/24
...
 
删除并重新加入节点
kubectl delete nodes  node_name
kubectl apply -f node_name.yml
 
6 删除接口
ifconfig cni0 down    # 关闭接口
ip link delete cni0     # 删除配置ifconfig flannel.1 down  
ip link delete flannel.1
 
7 重启服务
systemctl restart docker kubelet
 
8 验证
检查是否出现了 新的 flannel.1 和 cni0 接口
ip -4 a
 
如果没有出现,重启服务器
验证 iptables 规则, 在 FORWARD 连中应该出现新的网络的转发规则
iptables -nL
 

验证 nat 表的 POSTROUTING 链和 KUBE-SERVICES 链
iptables -nL -t nat --line-number |grep POSTROUTING -A 10
 

 如果还存在原来 pod 子网的条目用如下命令删除
iptables -t nat  -D POSTROUTING 5
 
5 是 规则条目号,如下图中所示

