背景
k8s集群已经初始化完毕,还没有选择CNI组件,如果想安装或更换 CNI 组件,需要配合修改 pod cidr,因为组件(比如 calico
cilium
flannel
)要求在 kubeadm init 的时候加入 --pod-network-cidr
参数指定cidr,但是重新初始化集群又太麻烦,耗时并且需要操作很多。于是就有了这篇文章。
表现
执行了 kubeadm init
初始化集群,并且执行 kubectl apply -f <add-on.yaml>
已经安装了 flannel
,发现 kube-flannel 相关 pod 并没有处于 Running 的状态:
当我们查看日志时,发现如下:
关键信息就是 Error registering network: failed to acquire lease: node "vb-n2" pod cidr not assigned
解决
修改集群配置 configmap, 在 networking
下 增加 podSubnet: 10.244.0.0/16
**注意:**修改的 CIDR 根据需要,不要照抄
kube edit cm kubeadm-config -n kube-system
修改 controller-manager 静态 pod 的启动参数,增加 --allocate-node-cidrs=true
--cluster-cidr=10.244.0.0/16
**注意:**修改的 CIDR 根据需要,不要照抄
sudo vim /etc/kubernetes/manifests/kube-controller-manager.yaml
检查配置是否生效
kubectl cluster-info dump | grep -m 1 cluster-cidr
如果更新较慢,可以手动删除相关 pod,如 kubectl delete pod -n kube-system kube-flannel-ds-amd64-***
检查集群及 CNI 组件 pod
提示
如果是在没有设置 pod cidr 而后安装 CNI 组件发现的异常,建议在设置完 cidr 后重新安装 CNI 组件。
参考
- k8s 中如何修改 pod-network-cidr 地址范围,文中第二个修改是有问题的,见第二个参考文档
- kubernetes.io/docs/refere…,见
--cluster-cidr string
CIDR Range for Pods in cluster. Requires --allocate-node-cidrs to be true