报错内容
Warning FailedCreatePodSandBox 5m17s kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "1ded5da71b38996763e74f28f609d8d8f26a4cc1e4fdd3272312bf3e168e4111": plugin type="bridge" failed (add): incompatible CNI versions; config is "1.0.0", plugin supports ["0.1.0" "0.2.0" "0.3.0" "0.3.1" "0.4.0"]
部署的环境
centos 8
kubernetes 1.24.3
解决问题
这个问题的主要内容是: incompatible CNI versions
. 当你去网上去搜索解决方案大都是 说 使用 containerd
的版本不对,也就是说, 确实是 CNI
的版本是有问题的。
具体的解决方案在官方网站中是这样说的:
具体内容可以看这里:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors/#updating-your-cni-plugins-and-cni-config-files
首先可以查看 当前的 containerd
的版本.
[root@k8s-master-01 ~]# containerd -v
containerd github.com/containerd/containerd v1.6.4 212e8b6fa2f44b9c21b2798135fc6fb7c53efc16
不在 v1.6.0-v1.6.3
中。文档中说 在 v1.6.4
版本中已经修复了这个问题.
查看 /etc/cni/net.d/10-containerd-net.conflist
这个文件, cni版本 "cniVersion": "1.0.0",
, 也确实是1.0.0
继续搜索
在 https://github.com/containerd/containerd/issues/6876 中,有一个人遇到了 v1.6.4
版本中出现了 incompatible CNI versions
这个问题。
仔细看他的这个问题,是我遇到的这个问题是一样的 plugins type='bridge'
. 而这个 issure
中提到的问题, 是当 plugins type = 'loooback'
. 这也是上图中 hakman
提到的。
仔细看 mikebrow
所说的,需要安装一个 1.0.0
版本的 bridge
.
那就在网络中搜索 : k8s 是安装 bridge
, 在 https://blog.csdn.net/m0_48594855/article/details/107870839
看到 安装bridge 的方法,他这里是使用 git仓库 源码编译。其实直接打开 git仓库 https://github.com/containernetworking/plugins/releases/tag/v1.1.1
下载对应版本即可, 今天是 2022
年7
月22
日,我就下载了最新的一版本。
简单粗暴的 /opt/cni/bin/
下的内容,全部替换掉,然后重启 kubelet
服务就可以了。
# 下载包
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
# 备份一下驱动
mv /opt/cni/bin /opt/cni/bin.bak
# 解压到指定目录
tar -zxvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin
# 重启 kubelet
systemctl restart kubelet
然后在所有的节点上都执行一遍上面的内容, 然后就可以了。
可以通过 kubectl describe pod
查看下是否开始下载镜像了。
问题解决思路
-
先看下 contrainerd
版本是否>=1.6.4
-
如果 <=1.6.3
那么就需要升级contrainerd
运行环境. -
如果还有这样的问题,那就是要看下对应的插件类型是否满足版本要求了。 -
如果不满足,那就重新安装下对应的插件就行了,比如我的问题中的 bridge
插件。
举一反三
假设有一棵树,那个问题只是这棵树的一片叶子, 这里面还涉及到很多 k8s
的概念性的东西。比如 CNI
网络插件都有什么, 每种插件的功能是什么, 以及对应的网络驱动是什么,比如 Calico
, fannel
, bridge
。CNI
和 containerd
, cri-o
都是什么关系. 所以,要从根儿上去理解这些概念。废话不多说, 下篇文章见。
参考文档
1、https://github.com/containerd/containerd/issues/6876 2、https://blog.csdn.net/m0_48594855/article/details/107870839 3、https://github.com/containernetworking/plugins/releases/tag/v1.1.1 4、https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors/#updating-your-cni-plugins-and-cni-config-files
原文始发于微信公众号(方家小白):k8s爬坑系列-incompatible CNI versions
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/37618.html