kubernetes修改pod cidr以及service cidr

目前环境是k8s 1.20.11 使用flannel作为cni插件
calico可以参考https://club.kdcloud.com/article/253621747767767552

一 首先需要修改配置文件参数

1.controller 需要修改

--cluster-cidr=10.1.0.0/16 \

2.kube-proxy需要修改

clusterCIDR: 10.1.0.0/16

3.然后重启controller以及kube-proxy

systemctl daemon-reload  && systemctl restart kube-controller-manager.service  kube-proxy.service

4.然后需要修改的就是flannel的configmap里面的pod cidr了

  cni-conf.json: |
    {
      "name": "cbr0",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "flannel",
          "delegate": {
            "hairpinMode": true,
            "isDefaultGateway": true
          }
        },
        {
          "type": "portmap",
          "capabilities": {
            "portMappings": true
          }
        }
      ]
    }
  net-conf.json: |
    {
      "Network": "10.1.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

这里需要修改Network 然后重启所有flanneld 这里估计大概率起不来 不要担心

 kubectl get pod -n kube-system  | grep flann | awk '{print $1}' | xargs kubectl delete  pod -n kube-system

二 修改node的cidr

这里我们需要删除node节点并且通过yaml的方式添加因为我们需要修改pod的cidr

精简以后的node yaml为

apiVersion: v1
kind: Node
metadata:
  labels:
    beta.kubernetes.io/arch: amd64
    beta.kubernetes.io/os: linux
    k8s_cluster: alibj-dingdd-online-01
    kubernetes.io/arch: amd64
    kubernetes.io/hostname: HOSTNAME
    kubernetes.io/os: linux
  name: HOSTNAME
spec:
  podCIDR: clusterCIDR/24
  podCIDRs:
  - clusterCIDR/24

这里需要注意每一个node的yaml会包含vni 这个不能复制之前的我们要删除 他会重新创建

批量替换脚本为

#!/bin/bash
hostname=$1
ip=$2
podcidr=$(kubectl get node ${hostname} -o yaml  | grep -iw podCIDR  | grep -v 'f:' | awk '{print $2}' | sed 's/7/1/g'| awk -F/  '{print $1}')
cp n-1 ${hostname}
sed -i "s/IP/${ip}/g"  ${hostname}
sed -i "s/HOSTNAME/${hostname}/g"  ${hostname}
sed -i "s/clusterCIDR/${podcidr}/g" ${hostname}
kubectl delete node ${hostname}
kubectl apply -f ${hostname}
#我们还需要在对应的节点执行
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
systemctl restart kubelet docker

我们全部重新替换完成node以后通过route -n 以及ifconfig 看一下flanneld的网卡以及路由 会发生变化

然后如果pod还有问题 那么就查看controller日志

如果日志如下 因为部分原因日志不方便放出来,类似于下面的日志这种的 会出现nodeipam或者网段问题的现象

在这里插入图片描述

大概率是因为我们更换的node节点中有部分节点ip没换对 我们需要看一下

kubectl get node -o yaml  | grep -i cidr | grep -v 'apiVersion' | grep -v 'f:' | grep -v 'podCIDRs'

或者通过etcdctl查看

get /registry/minions/nodename

通过etcd的这个key来看
然后我们批量删除pod 重新启动 podip就会变成我们新规划的pod cidr了

三 修改svc的cidr

1.证书添加

修改svc的cidr我们首先考虑到的就是需要在证书里面添加coredns的可信任ip

修改完毕后重启所有组件

2.修改配置

apiserver

--service-cluster-ip-range=10.2.0.0/16 \

kube-controller

--service-cluster-ip-range=10.2.0.0/16 \

kubelet

clusterDNS:
  - 10.2.0.2

修改完毕后重启服务
这里分为两种情况

(1)如果我们从24位掩码更换为16 那么这里不需要做操作

(2)如果我们换了ip地址段

我们需要重新创建svc

kubectl get svc --all-namespaces | grep -v -w kubernetes| awk '$4 !~ /None|CLUSTER/{print "kubectl get svc -n "$1" " $2 " -o yaml && echo ---"}' | bash | sed 's/10.8/10.2/'   > all.yaml
kubectl get svc --all-namespaces | awk '$4 !~ /None|CLUSTER/{print "kubectl delete svc -n "$1" " $2}' | bash
kubectl apply -f all.yaml
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

来自万古的忧伤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值