Kubernetes 1.24+单节点部署Flannel时CNI插件未初始化求助
解决Ubuntu 20.04上单节点Kubernetes 1.24+ CNI插件未初始化问题
核心问题分析
Kubernetes 1.24起移除了dockershim组件,默认容器运行时切换为containerd,而Flannel的CNI适配逻辑、系统CNI插件路径或kubelet配置可能存在兼容性差异,这是导致CNI插件未初始化的核心诱因。
针对性解决步骤
1. 校验containerd的CNI配置
K8s 1.24+默认依赖containerd,需确保其CNI相关路径配置正确:
- 编辑containerd主配置文件:
sudo nano /etc/containerd/config.toml - 定位到
[plugins."io.containerd.grpc.v1.cri".cni]配置段,确认以下参数:conf_dir = "/etc/cni/net.d" bin_dir = "/opt/cni/bin" - 保存后重启containerd服务:
sudo systemctl restart containerd
2. 补全CNI二进制插件
Flannel依赖完整的CNI插件集,K8s 1.24+环境可能未自动安装:
- 创建CNI插件目录(若不存在):
sudo mkdir -p /opt/cni/bin - 前往CNI插件发布页面下载对应架构的压缩包(推荐v1.3.0版本),解压到
/opt/cni/bin:sudo tar -C /opt/cni/bin -xz -f cni-plugins-linux-amd64-v1.3.0.tgz - 赋予插件执行权限:
sudo chmod +x /opt/cni/bin/*
3. 调整Flannel配置并重新部署
- 删除现有Flannel资源:
kubectl delete -n kube-system deployment,pod,configmap,daemonset -l app=flannel - 获取Flannel的配置文件到本地,编辑其中的
cni-conf.json部分,确保配置如下:{ "name": "cbr0", "cniVersion": "0.3.1", "plugins": [ { "type": "flannel", "delegate": { "hairpinMode": true, "isDefaultGateway": true } }, { "type": "portmap", "capabilities": { "portMappings": true } } ] } - 应用修改后的配置:
kubectl apply -f ./kube-flannel.yml
4. 校验kubelet的CNI路径配置
确保kubelet指向正确的CNI配置和插件目录:
- 查看kubelet配置文件:
sudo cat /var/lib/kubelet/config.yaml - 确认
cniConfDir值为/etc/cni/net.d,cniBinDir值为/opt/cni/bin - 若配置不符,修改后重启kubelet:
sudo systemctl restart kubelet
5. 调整kube-proxy模式(可选)
部分场景下,kube-proxy的ipvs模式可能干扰CNI初始化,可切换为iptables模式:
- 编辑kube-proxy的ConfigMap:
kubectl edit configmap kube-proxy -n kube-system - 将
mode字段修改为iptables,保存退出后重启kube-proxy Pod:kubectl delete pod -n kube-system -l k8s-app=kube-proxy
额外排查动作
- 查看kubelet实时日志定位细节:
journalctl -u kubelet -f,重点搜索CNI相关报错 - 确认节点IP转发功能开启:
sudo sysctl net.ipv4.ip_forward=1 sudo sysctl -p - 检查
/run/flannel/subnet.env中的FLANNEL_SUBNET和节点PodCIDR是否匹配:kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

