容器系列-2使用containerd管理容器
上篇讲了高级别runtime包括docker、containerd、podman等,本节演示containerd的使用。
安装及配置containerd
步骤1:安装containerd
[root@vms103 ~]# yum install containerd.io cri-tools -y
...大量输出...
作为依赖被安装:
...
selinux-policy.noarch 0:3.13.1-268.el7_9.2 selinux-policy-targeted.noarch 0:3.13.1-268.el7_9.2
完毕!
[root@vms103 ~]#
步骤2:修改配置文件
containerd的配置文件是/etc/containerd/config.toml。修改配置文件内容如下:
[root@vms103 ~]# cat /etc/containerd/config.toml
disabled_plugins = ["restart"]
[plugins.linux]
shim_debug = true
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://frz7i079.mirror.aliyuncs.com"]
[root@vms103 ~]#
这里设置了加速器。
这个文件的内容可以根据如下命令生成然后修改:
containerd config default > /etc/containerd/config.toml
步骤3:启动containerd并设置为开机自动启动
[root@vms103 ~]# systemctl enable containerd
Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /usr/lib/systemd/system/containerd.service.
[root@vms103 ~]# systemctl start containerd
[root@vms103 ~]#
containerd客户端工具有ctr和crictl两个。
如果使用crictl命令的话需要执行
[root@vms103 ~]# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
[root@vms103 ~]#
镜像管理
步骤4:查看现有镜像
[root@vms103 ~]# ctr i list
REF TYPE DIGEST SIZE PLATFORMS LABELS
[root@vms103 ~]#
[root@vms103 ~]# crictl images
IMAGE TAG IMAGE ID SIZE
[root@vms103 ~]#
从这里可以看到,使用两个客户端查看都没有镜像。
步骤5:拉取镜像
使用crictl下载镜像的命令为 crictl pull 镜像,比如下载nginx镜像:
[root@vms103 ~]# crictl pull docker.io/nginx
Image is up to date for sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74
[root@vms103 ~]#
(使用ctr下载镜像的命令是ctr i pull 镜像名)
但是使用ctr命令进行查看的时候却是没有的,这是为何?
[root@vms103 ~]# ctr i list
REF TYPE DIGEST SIZE PLATFORMS LABELS
[root@vms103 ~]#
因为containerd和docker相比多了命名空间的概念。当使用crictl命令的时候,都是在k8s.io这个命名空间里的,而ctr默认是在default这个命名空间里。
所以当crictl下载镜像之后,会自动创建一个k8s.io,而下载的镜像就是放在k8s.io里的。
[root@vms103 ~]# ctr ns list
NAME LABELS
k8s.io
[root@vms103 ~]#
因为ctr默认查看的是default命名空间,所以看不到下载的镜像。如果想查看其他命名空间里的镜像需要加上-n指定命名空间。
步骤6:查看k8s.io命名空间里的镜像
[root@vms103 ~]# ctr -n k8s.io i list -q
docker.io/library/nginx:latest
docker.io/library/nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74
[root@vms103 ~]#
步骤7:修改默认的命名空间
如果ctr想切换到其他命名空间,只需定义变量CONTAINERD_NAMESPACE,比如:
[root@vms103 ~]# export CONTAINERD_NAMESPACE=k8s.io
[root@vms103 ~]# ctr i list -q
docker.io/library/nginx:latest
docker.io/library/nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74
[root@vms103 ~]#
此时就不用指定命名空间了。
[root@vms103 ~]# ctr -n default i list -q
[root@vms103 ~]#
对镜像重新打标签tag,语法为
ctr i tag 旧镜像 新镜像
步骤8:为镜像docker.io/library/nginx:latest打标签
[root@vms103 ~]# ctr i tag docker.io/library/nginx:latest rhce.cc/cka/nginx:v1
rhce.cc/cka/nginx:v1
[root@vms103 ~]#
查看镜像
[root@vms103 ~]# ctr i list -q
docker.io/library/nginx:latest
docker.io/library/nginx@sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aa
rhce.cc/cka/nginx:v1
sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74
[root@vms103 ~]#
步骤9:删除镜像
[root@vms103 ~]# ctr i rm docker.io/library/nginx:latest
docker.io/library/nginx:latest
[root@vms103 ~]#
容器管理
下面开始创建容器
步骤10:首先查看当前是否存在容器
[root@vms103 ~]# ctr c list
CONTAINER IMAGE RUNTIME
[root@vms103 ~]#
步骤11:创建容器
创建一个 名字为web1的容器
[root@vms103 ~]# ctr container create rhce.cc/cka/nginx:v1 web1
[root@vms103 ~]#
[root@vms103 ~]# ctr c list
CONTAINER IMAGE RUNTIME
web1 rhce.cc/cka/nginx:v1 io.containerd.runc.v2
[root@vms103 ~]#
步骤12:删除容器
[root@vms103 ~]# ctr c rm web1
[root@vms103 ~]# ctr c list
CONTAINER IMAGE RUNTIME
[root@vms103 ~]#
总体来说containerd 客户端使用起来的体验感比docker差了很多,虽说k8s在1.23版本将从kubelet中移除dockershim,但是我们仍然可以用docker构建镜像、搭建私有仓库等。
下节将会讲解如何在k8s中使用containerd。