• 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    二、修改设置

    1 修改 flannel 环境配置文件

    集群中每个节点都要修改

    vi /run/flannel/subnet.env
    
    • 1
    FLANNEL_NETWORK=10.244.0.0/16  # 修改
    FLANNEL_SUBNET=10.244.2.1/24   # 修改
    FLANNEL_MTU=1450
    FLANNEL_IPMASQ=true
    
    • 1
    • 2
    • 3
    • 4

    2 修改 k8s 集群中 flannel 的 configMap 和 kube-proxy configMap

    flannel

    kubectl -n kube-system edit configMap kube-flannel-cfg
    
    • 1

    修改如下内容

      net-conf.json: |
        {
          "Network": "10.244.0.0/16",  # 这里修改成你想要的网络
          "Backend": {
            "Type": "vxlan"
          }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    kube-proxy

    kubectl -n kube-system edit configmaps kube-proxy
    
    • 1

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4

    4 修改集群 contrlor 资源文件

    在所有 master 节点修改

    修改文件 /etc/kubernetes/manifests/kube-controller-manager.yaml

    spec:
      containers:
      - command:
        ...
        # 修改这个
        - --cluster-cidr=10.244.0.0/16
        ...
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    修改完成后,集群会自动更新此 Pod

    5 备份 集群所有节点的 yaml 文件,并修改里面的 podCIDR 和 podCIDRs

    备份

     kubectl get nodes node_name -o yaml > node_name.yml
    
    • 1

    修改这里

    ...
    spec:
      podCIDR: 10.244.2.0/24
      podCIDRs:
      - 10.244.2.0/24
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    删除并重新加入节点

    kubectl delete nodes  node_name
    kubectl apply -f node_name.yml
    
    • 1
    • 2

    6 删除接口

    ifconfig cni0 down    # 关闭接口
    ip link delete cni0     # 删除配置
    
    ifconfig flannel.1 down  
    ip link delete flannel.1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7 重启服务

    systemctl restart docker kubelet
    
    • 1

    8 验证

    检查是否出现了 新的 flannel.1 和 cni0 接口

    ip -4 a
    
    • 1

    如果没有出现,重启服务器

    验证 iptables 规则, 在 FORWARD 连中应该出现新的网络的转发规则

    iptables -nL
    
    • 1

    在这里插入图片描述

    验证 nat 表的 POSTROUTING 链和 KUBE-SERVICES 链

    iptables -nL -t nat --line-number |grep POSTROUTING -A 10
    
    • 1

    在这里插入图片描述
    如果还存在原来 pod 子网的条目用如下命令删除

    iptables -t nat  -D POSTROUTING 5
    
    • 1

    5 是 规则条目号,如下图中所示
    在这里插入图片描述

  • 相关阅读:
    uni-app yrkDataPicker 日期和时间选择控件
    无法对wsl-docker-data本身的unbutu镜像扩容操作
    亚马逊加湿器UL998测试报告,测试项目
    西方经济学第四章
    『Echarts』基本使用
    什么是 BA ?BA怎么样?BA和BI是什么关系?
    无监督特征解耦的变声
    js对象和原型、原型链的关系
    基于 Apache Hudi 极致查询优化的探索实践
    深度学习100例 | 第31天-卷积神经网络(DenseNet)识别生活物品
  • 原文地址:https://blog.csdn.net/qq_22648091/article/details/132546609