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

3/30/2020

I used kubeadm to initialize my K8 master. However, I missed the --pod-network-cidr=10.244.0.0/16 flag to be used with flannel. Is there a way (or a config file) I can modify to reflect this subnet without carrying out the re-init process again?

-- saruftw
flannel
kubeadm
kubernetes

1 Answer

3/31/2020

Override PodCIDR parameter on the all k8s Node resource with a IP source range 10.244.0.0/16

$ kubectl edit nodes nodename

Replace "Network" field under net-conf.json header in the relevant Flannel ConfigMap with a new network IP range:

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

Wipe current CNI network interfaces remaining the old network pool:

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

Re-spawn Flannel and CoreDNS pods respectively:

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

Wait until CoreDNS pods obtain IP address from a new network pool. Keep in mind that your custom Pods will still retain the old IP addresses inside containers unless you re-create them manually as well

-- Arghya Sadhu
Source: StackOverflow