《Kubernetes故障篇:unable to retrieve OCI runtime error》

一、背景信息

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

如下图所示:
《Kubernetes故障篇:unable to retrieve OCI runtime error》_第1张图片


二、解决方法

说明:这个是说缺少依赖包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集群运维实战

你可能感兴趣的:(《企业级K8s集群运维实战》,kubernetes,容器,云原生)