实战-centos7上containerd的安装-v1-6-10-20221205-测试成功-荐
实战:centos7上containerd的安装(v1.6.10)-2022.12.5(测试成功)【荐】
环境
实验环境
软件 | 版本 |
---|---|
操作系统 | centos7.6_x64 1810 mini(其他centos7.x版本也行) |
containerd | v1.6.10 |
实验软件
由于 Containerd 需要依赖底层的 runc 工具,所以我们也需要先安装 runc,不过 Containerd 提供了一个包含相关依赖的压缩包 cri-containerd-cni-${VERSION}.${OS}-${ARCH}.tar.gz
,可以直接使用这个包来进行安装,强烈建议使用该安装包,不然可能因为 runc 版本问题导致不兼容。(这个安装包包含了一些包,例如runc,ctr命令等) 首先从 release 页面下载最新的 1.6.10 版本的压缩包:
[root@master1 ~]#wget https:# 如果有限制,也可以替换成下面的 URL 加速下载(本次就用的这个加速地址)wgethttps:[root@master1 ~]#tar tf cri-containerd-1.6.10-linux-amd64.tar.gz etc/crictl.yamletc/systemd/etc/systemd/system/etc/systemd/system/containerd.serviceusr/usr/local/usr/local/bin/usr/local/bin/ctrusr/local/bin/critestusr/local/bin/crictlusr/local/bin/containerdusr/local/bin/containerd-shimusr/local/bin/ctd-decoderusr/local/bin/containerd-stressusr/local/bin/containerd-shim-runc-v2usr/local/bin/containerd-shim-runc-v1usr/local/sbin/usr/local/sbin/runcopt/containerd/opt/containerd/cluster/opt/containerd/cluster/versionopt/containerd/cluster/gce/opt/containerd/cluster/gce/configure.shopt/containerd/cluster/gce/cni.templateopt/containerd/cluster/gce/cloud-init/opt/containerd/cluster/gce/cloud-init/master.yamlopt/containerd/cluster/gce/cloud-init/node.yamlopt/containerd/cluster/gce/env[root@master1 ~]#tar -C / -xzf cri-containerd-1.6.10-linux-amd64.tar.gz
记得将 /usr/local/bin 和 /usr/local/sbin 追加到 PATH 环境变量中:(默认就在环境变量里的)
[root@master1 ~]#echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@master1 ~]#containerd -vcontainerdgithub.com/containerd/containerdv1.6.10770bd0108c32f3fb5c73ae1264f7e503fe7b2661[root@master1 ~]#runc -hrunc:symbollookuperror:runc:undefinedsymbol:seccomp_notify_respond
可以正常执行 containerd -v 命令证明 Containerd 安装成功了,但是执行 runc -h 命令的时候却出现了类似runc:undefined symbol:seccomp_notify_respond 的错误,这是因为我们当前系统默认安装的 libseccomp是 2.3.1 版本,该版本已经不能满足我们这里的 v1.6.10 版本的 Containerd 了(从 1.5.7 版本开始就不兼容了),需要 2.4 以上的版本,所以我们需要重新安装一个高版本的 libseccomp 。
注意:
老师说先要卸载老版本的
libseccomp-2.3.1-4
包,但是之前的chrony软件包会依赖这个libseccomp包,卸载libseccomp包的同时chrony也会被卸载掉。后面安装好高版本libseccomp-2.5.1-1要记得再次安装下chrony软件。 另外,新版本libseccomp-2.5.1-1.el8.x86_64.rpm是el8的,但是直接安装到el7上也是没问题的哦;
这里开始操作:
1、卸载老版本libseccom包[root@master1 ~]#rpm -qa |greplibseccomplibseccomp-2.3.1-4.el7.x86_642、查询哪些包对这个libseccomp软件包有依赖关系[root@master1 ~]#rpm -e --test libseccomperror:Faileddependencies:libseccomp.so.2()(64bit) is needed by (installed) chrony-3.4-1.el7.x86_64#可以发现libseccomp软件包只背chrony软件依赖3、卸载老版本libseccomp包[root@master1 ~]#yum remove -y libseccomp #yum remove/erase 删除一个软件的时候也会删除对该软件具有依赖关系的包。……Removed:libseccomp.x86_640:2.3.1-4.el7DependencyRemoved:chrony.x86_640:3.4-1.el7Complete![root@master1 ~]#rpm -qa |greplibseccomp#查看老版本libseccomp已被卸载[root@master1 ~]#4、#下载高于2.4以上的包并安装[root@master1 ~]#wget http:[root@master1 ~]#yum install libseccomp-2.5.1-1.el8.x86_64.rpm -y……Installed:libseccomp.x86_640:2.5.1-1.el8Complete![root@master1 ~]#rpm -qa |greplibseccomp#再次查看,发现此时libseccomp已经是最新版本的了。libseccomp-2.5.1-1.el8.x86_645、重新安装chrony软件yuminstallchrony-ysystemctlenablechronyd--nowchronycsources
现在 runc 命令就可以正常使用了:
[root@master1 ~]#runc -vruncversion1.1.4commit:v1.1.4-0-g5fd4c4d1spec:1.0.2-devgo:go1.18.8libseccomp:2.5.1[root@master1 ~]#runc -hNAME:runc-OpenContainerInitiativeruntimeruncisacommandlineclientforrunningapplicationspackagedaccordingtotheOpenContainerInitiative(OCI) format and is a compliant implementation of theOpenContainerInitiativespecification.runcintegrateswellwithexistingprocesssupervisorstoprovideaproductioncontainerruntimeenvironmentforapplications.Itcanbeusedwithyourexistingprocessmonitoringtoolsandthecontainerwillbespawnedasadirectchildoftheprocesssupervisor.Containersareconfiguredusingbundles.Abundleforacontainerisadirectorythatincludesaspecificationfilenamed"config.json"andarootfilesystem.Therootfilesystemcontainsthecontentsofthecontainer.Tostartanewinstanceofacontainer:# runc run [-b bundle ] <container-id>Where"<container-id>"isyournamefortheinstanceofthecontainerthatyouarestarting.Thenameyouprovideforthecontainerinstancemustbeuniqueonyourhost.Providingthebundledirectoryusing"-b"isoptional.Thedefaultvaluefor"bundle"isthecurrentdirectory.USAGE:runc[global options]command[command options][arguments...]VERSION:1.1.4commit:v1.1.4-0-g5fd4c4d1spec:1.0.2-devgo:go1.18.8libseccomp:2.5.1
2.配置containerd
Containerd 的默认配置文件为 /etc/containerd/config.toml,我们可以通过如下所示的命令生成一个默认的配置:
[root@master1 ~]#mkdir -p /etc/containerd[root@master1 ~]#containerd config default >/etc/containerd/config.toml
containerd都是插件化的。
1.修改containerd 的 cgroup driver类型为systemd
将 containerd 的 cgroup driver 配置为 systemd。
对于使用 systemd 作为 init system 的 Linux 的发行版,使用 systemd
作为容器的 cgroup driver
可以确保节点在资源紧张的情况更加稳定,所以推荐将 containerd 的 cgroup driver 配置为 systemd。
修改前面生成的配置文件 /etc/containerd/config.toml
,在 plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options
配置块下面将 SystemdCgroup
设置为 true
:
[root@master1 ~]#vim /etc/containerd/config.toml#通过搜索SystemdCgroup进行定位[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]……[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup=true....
2.配置镜像加速器地址
然后再为镜像仓库配置一个加速器,需要在 cri 配置块下面的 registry
配置块下面进行配置 registry.mirrors
:(注意缩进)
[root@master1 ~]#vim /etc/containerd/config.toml#通过搜索registry.mirrors进行定位144[plugins."io.containerd.grpc.v1.cri".registry]……152153[plugins."io.containerd.grpc.v1.cri".registry.mirrors]154[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]155endpoint=["https:endpoint=["https:[plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]endpoint=["https:……sandbox_image="registry.aliyuncs.com/k8sxio/pause:3.8"……
修改前: 修改后:
3.启动containerd服务
由于上面我们下载的 containerd 压缩包中包含一个 etc/systemd/system/containerd.service
的文件,这样我们就可以通过 systemd 来配置 containerd 作为守护进程运行了,现在我们就可以启动 containerd 了,直接执行下面的命令即可:
[root@master1 ~]#systemctl daemon-reload[root@master1 ~]#systemctl enable containerd --nowCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/containerd.serviceto/etc/systemd/system/containerd.service.
4.验证
启动完成后就可以使用 containerd 的本地 CLI 工具 ctr
和 crictl
了,比如查看版本:
[root@master1 ~]#containerd -vcontainerd github.com/containerd/containerd v1.6.10 770bd0108c32f3fb5c73ae1264f7e503fe7b2661[root@master1 ~]#ctr version #ctr--containerd类似于docker--dockerd。Client:Version:v1.6.10Revision:770bd0108c32f3fb5c73ae1264f7e503fe7b2661Go version:go1.18.8Server:Version:v1.6.10Revision:770bd0108c32f3fb5c73ae1264f7e503fe7b2661UUID:4b5d9dc9-7e39-47ce-be54-c9f4c0fa4865[root@master1 ~]#crictl version #crictl是操作k8s里的cri的。Version:0.1.0RuntimeName:containerdRuntimeVersion:v1.6.10RuntimeApiVersion:v1
至此,containerd安装完成。
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码 x2675263825 (舍得), qq:2675263825。
🍀 微信公众号 《云原生架构师实战》
🍀 个人博客站点