Kubernetes(七)修改 pod 网络(flannel 插件)

一、 提示

需要重启服务器
操作之前备份 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}'`
do
    kubectl -n $1 get $2 $app -o yaml > $3/$app.yml
done

sed -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" ];then
    sed -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}'`
do
   kubectl -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/24
  podCIDRs:
  - 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 是 规则条目号,如下图中所示
在这里插入图片描述

要在Kubernetes集群上安装Flannel网络插件,请按照以下步骤进行操作: 1. 在Kubernetes主节点和工作节点上安装etcd和Flannel。可以使用以下命令在Ubuntu上安装它们: ``` sudo apt-get update sudo apt-get install etcd-client etcd-server -y sudo apt-get install curl -y curl -L https://github.com/coreos/flannel/releases/download/v0.13.1/flannel-v0.13.1-linux-amd64.tar.gz -o flannel.tar.gz tar -xzvf flannel.tar.gz sudo cp flanneld /usr/local/bin/ sudo chmod +x /usr/local/bin/flanneld sudo cp flanneld.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable flanneld sudo systemctl start flanneld ``` 2. 创建Flannel的配置文件。在主节点上创建以下文件: ``` sudo mkdir /etc/kubernetes sudo vim /etc/kubernetes/flannel.json ``` 然后将以下内容复制到文件中: ``` { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } } ``` 注意:如果您使用的是不同的CIDR范围,请在上述配置中相应地更改网络范围。 3. 配置kubelet服务以使用Flannel插件。在每个工作节点上,编辑kubelet的配置文件: ``` sudo vim /etc/default/kubelet ``` 添加以下内容: ``` KUBELET_EXTRA_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin ``` 4. 重启kubelet服务: ``` sudo systemctl daemon-reload sudo systemctl restart kubelet ``` 5. 验证Flannel是否已成功安装。您可以使用以下命令: ``` kubectl get pods --all-namespaces ``` 如果看到Flannelpod在运行中,则表示Flannel已成功安装。 注意,以上步骤仅适用于具有systemd的Linux发行版。如果您使用的是其他发行版,则必须在步骤2和3中使用不同的命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_西瓜甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值