k8s爬坑系列-incompatible CNI versions

报错内容

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 的版本是有问题的。

具体的解决方案在官方网站中是这样说的:

k8s爬坑系列-incompatible CNI versions

具体内容可以看这里: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 这个问题。

k8s爬坑系列-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 下载对应版本即可, 今天是 2022722日,我就下载了最新的一版本。

简单粗暴的 /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 , bridgeCNIcontainerd, 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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!