有没有办法在初始化后在 kubeadm 中分配 pod-network-cidr?

Is there a way to assign pod-network-cidr in kubeadm after initialization?

我用kubeadm初始化了我的K8 master。但是,我错过了与 flannel 一起使用的 --pod-network-cidr=10.244.0.0/16 标志。有没有一种方法(或配置文件)可以修改以反映此子网,而无需再次执行重新初始化过程?

使用 IP 源范围 10.244.0.0/16

覆盖所有 k8s 节点资源上的 PodCIDR 参数
$ kubectl edit nodes nodename

将相关 Flannel ConfigMap 中 net-conf.json header 下的 "Network" 字段替换为新的网络 IP 范围:

$ kubectl edit cm kube-flannel-cfg -n kube-system
net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }

擦除保留旧网络池的当前 CNI 网络接口:

$ sudo ip link del cni0; sudo ip link del flannel.1

Re-spawn Flannel 和 CoreDNS pods 分别为:

$ kubectl delete pod --selector=app=flannel -n kube-system
$ kubectl delete pod --selector=k8s-app=kube-dns -n kube-system

等到 CoreDNS pods 从新的网络池中获取 IP 地址。请记住,您的自定义 Pods 仍会保留容器内的旧 IP 地址,除非您也手动 re-create 它们