测试containerd是否能创建和启动成功
执行如下命令拉取镜像并创建容器:
拉取容器
ctr i pull docker.io/library/nginx:alpine
创建容器
ctr c create --net-host docker.io/library/nginx:alpine nginx
ctr task start -d nginx
查看Containerd服务启动信息:
systemctl status containerd -l
查看containerd组件加载情况,发现overlayfs异常
ctr plugin ls
通过以下命令查看containerd运行日志:
sudo journalctl -fu containerd
通过查看容器内的文件系统,确认为xfs文件系统:
df -Th
查阅官方资料:
其中有二条比较有用的:
OverlayFS是推荐的存储驱动程序,如果满足以下先决条件,则支持它:
4.0版或更高版本的Linux内核,或RHEL或使用3.10.0-514版或更高级内核的CentOS。(内核版本已经升级过了,符合条件)
overlay2驱动程序在xfs备份文件系统上受支持,但仅在启用d_type=true的情况下才受支持。(这个才是重点)
我设置的系统内核版本是Linux 6.4.9-1.el7.elrepo.x86_64,这个版本默认的存储驱动是fuse-overlayfs,而不是overlay2。因此,在使用docker时,默认会使用fuse-overlayfs作为存储驱动,想要使用overlay2作为存储驱动,还需要手动配置docker,将存储驱动设置为overlay2, 在/etc/docker/daemon.json中添加以下内容:{ “storage-driver”: “overlay2” },然后使用命令systemctl restart docker.service进行重启。接着让文件系统需要支持d_type=true,使用命令mount | grep overlay进行检查是否支持,最后使用docker info命令检查是否成功修改存储驱动为overlay2。
如果启动容器出现如下报错,是由于缺少runc并升级libseccomp,libseccomp需要高于2.4版本。
ctr: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error
(open /run/containerd/io.containerd.runtime.v2.task/default/nginx/log.json: no such file or directory):
fork/exec /
containerd在v1.6.4版本以后使用v1.1.2的runc和v1.1.1的cni。
下载链接:https://github.com/opencontainers/runc/releases/download/v1.1.2/runc.amd64?spm=a2c6h.12873639.article-detail.8.31cb4c6a6D2Htj&file=runc.amd64
下载之后,执行如下命令安装并查看版本号:
install -m 755 runc.amd64 /usr/local/sbin/runc
runc -v
执行如下命令升级libseccomp:
查询原来的版本
rpm -qa | grep libseccomp
卸载原来的版本
rpm -e libseccomp-2.3.1-4.el7.x86_64 --nodeps
下载高版本的
wget http://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/libseccomp-2.5.1-1.el8.x86_64.rpm
安装
rpm -ivh libseccomp-2.5.1-1.el8.x86_64.rpm