k8s + containerd下,容器启动时报错 failed to create shim task, incompatible CNI versions 问题解决

笔者手上有一个祖传的安装了containerd的服务器,这个服务器长期没有使用,近日由于需要部署一个nginx服务做一些流量转发,偶然想起手上还有这么个小宝贝就把他拿出来用。可是容器启动的时候报了failed to create shim task。错误原因是: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”]。这个错误实在让人摸不着头脑,笔者对此也是一脸懵逼。等到笔者再次在这台服务器上成功拉起nginx容器,已经是第二天了。这可真是个不大不小的坑,谁掉进去都得脱层皮。所以把这个解决过程记录下来,以帮助其他遇到这个坑的同道尽快脱困。

1. 问题

在containerd环境中启动一个容器(如busybox,nginx等),报出incompatible CNI versions错误。如下:

$ sudo nerdctl run -d busybox
FATA[0000] failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: time="2023-06-10T11:13:54+08:00" level=fatal msg="failed to call cni.Setup: 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\"]"
Failed to write to log, write /var/lib/nerdctl/1935db59/containers/default/4f806caefc70c47e41cd9f080f780946b680105ae0fc30cc0385fee5e68d9548/oci-hook.createRuntime.log: file already closed: unknown

2. 环境

发生错误的服务器长这样:

$ uname -a
Linux ubuntu-1 5.4.0-121-generic #137-Ubuntu SMP Wed Jun 15 13:33:07 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

$ sudo nerdctl version
Client:
 Version:       v0.20.0
 OS/Arch:       linux/amd64
 Git commit:    e77e05b5fd252274e3727e0439e9a2d45622ccb9

Server:
 containerd:
  Version:      1.6.6
  GitCommit:    10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1

#这台机器其实是一个k8s集群的节点,这个集群已经没什么用了,不过也没有关掉。
$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.2", GitCommit:"f66044f4361b9f1f96f0053dd46cb7dce5e990a8", GitTreeState:"clean", BuildDate:"2022-06-15T14:20:54Z", GoVersion:"go1.18.3", Compiler:"gc", Platform:"linux/amd64"}

3. 无效的解决方法

直接在网上搜索”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”]“,可以找到一篇官方的针对这个错误的文章:这里。主要意思就是把所有的容器啊插件啊什么的都升级,然后根据他给的模板更新/etc/cni/net.d/下的配置文件。文章并未给出具体要升级的插件清单,只是一句话,就全给我更新到最新版本。
在这里插入图片描述
笔者看到这里也有点想骂娘,不过由于笔者的containerd是1.6.6,这里说是1.6.0-1.6.3,所以估计不是在说我吧。所以决定先跳过这一步先往下走,毕竟不会做的题就先跳过的优良传统不能丢。先把配置文件改一下看看。官方给的模板长这样:
在这里插入图片描述
笔者的containerd当时的网络插件是用的cni-flannel。所以文件名和例子给的有点不一样。

$ sudo ls /etc/cni/net.d
10-flannel.conflist

根据例子一顿爆改之后各种重启不提。再次尝试拉起busybox:

$ sudo nerdctl run busybox
FATA[0001] failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: time="2023-06-10T12:00:12+08:00" level=fatal msg="failed to call cni.Setup: 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\"]"
Failed to write to log, write /var/lib/nerdctl/1935db59/containers/default/fb4f5fd84c5432f7e1448e948479b5694cddc6affc28091cfd0d3e2659671a2d/oci-hook.createRuntime.log: file already closed: unknown

一声叹息。。。
然后还尝试了包括升级flannel等各种折腾,也没用。如果有人看到这里,可以先别学笔者这么干。

4. 有用的解决方法

真正对笔者有用的方法来源于这篇文章。有多个相同内容的文章,真实出处笔者并未细考。在此鸣谢当初的那位作者了。说来也简单,就是服务器中的cni插件版本过于陈旧了。只要把新版本的cni插件部署进去就可以了。

# 下载包
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 

搞定

$ sudo nerdctl run -it busybox
/ # 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
错误信息"failed to create task for container: failed to create shim task"表示Docker在创建容器任务时遇到了问题。这可能是由于多种原因引起的,比如Docker版本不兼容、缺少依赖、配置错误等。 要解决问题,可以尝试以下几个方法: 1. 首先,确保你的Docker版本与你想要加载的镜像兼容。可以运行命令`docker version`来检查Docker的版本信息。如果发现版本不一致,可以尝试升级或降级Docker。 2. 检查系统是否安装了正确的依赖项。Docker需要依赖一些软件包和库,确保这些依赖已经正确安装。你可以查看Docker的官方文档以获取详细的依赖项列表。 3. 检查Docker的配置是否正确。确保Docker的配置文件中没有任何错误或遗漏的信息。可以通过编辑Docker的配置文件来进行检查。 4. 如果以上方法都无效,可以尝试重新安装Docker。首先卸载旧版本的Docker,然后重新安装最新版本的Docker。确保在重新安装之前备份好重要的数据。 总之,解决"failed to create task for container: failed to create shim task"的问题需要综合考虑多个因素,包括Docker版本、依赖项和配置等。根据具体情况,选择合适的方法来解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [docker: Error response from daemon: failed to create task for container: failed to create shim task:](https://blog.csdn.net/guo_zhen_qian/article/details/132277608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [docker安装完成启动不了(报错Failed to start Docker Application Container Engine.)](https://download.csdn.net/download/weixin_38558655/14052226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值