一、背景信息
1、环境信息如下:
操作系统 | K8S版本 | containerd版本 |
---|---|---|
Centos7.6 | v1.24.12 | v1.6.12 |
2、报错信息如下:
Warning FailedCreatePodSandBox 106s (x39 over 10m) kubelet (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to create containerd task: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/k8s.io/2fa93d91b254ae6cfbd7acd1ce7b1a93c643da3aebfbe2bf08a7c2a697b7081e/log.json: no such file or directory): runc did not terminate successfully: exit status 127: unknown
如下图所示:
二、解决方法
说明:这个是说缺少依赖包libseccomp ,需要注意的是centos 7中yum下载的版本是2.3的,版本不满足我们最新containerd的需求,需要下载2.4以上的,故这里就安装一个2.5.1的版本。
#1、卸载旧版本
[root@k8s-master-49 opt]# rpm -qa | grep libseccomp
libseccomp-2.3.1-3.el7.x86_64
[root@k8s-master-49 opt]# rpm -e libseccomp-2.3.1-3.el7.x86_64 --nodeps
#2、安装新版本
[root@k8s-master-49 ~]# wget https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/libseccomp-2.5.1-1.el8.x86_64.rpm
[root@k8s-master-49 ~]# rpm -ivh libseccomp-2.5.1-1.el8.x86_64.rpm
#3、查看现有版本
[root@k8s-master-49 ~]# rpm -qa | grep libseccomp
libseccomp-2.5.1-1.el8.x86_64
[root@k8s-master-49 ~]# runc --version
runc version 1.1.4
libseccomp: 2.5.1
安装之后,不用重启containerd进程,就看到了目前pod的状态都正常了,如下图所示:
总结:这是一个关于容器管理工具 containerd.io依赖关系的错误。containerd.io要求安装版本为 2.4.0 的 libseccomp2 ,但系统上却安装了版本为2.3.1的libseccomp2。libseccomp 是一个 Linux系统调用安全限制库,它可以帮助限制程序对系统调用的访问权限。containerd.io作为容器管理工具,它需要使用 libseccomp来限制容器内部进程的系统调用权限。解决方案如下:
# 1、更新系统上的 libseccomp2 到 版本 2.4.0及以上版本。
# 2、如果不能更新 libseccomp2,可以尝试降低containerd.io的版本或者更换其他容器管理工具。
# 3、建议您在升级之前做好备份,并了解系统的影响
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战