1.3 安装并配置Containerd(在vms101上)

【必知必会】安装Containerd并配置加速器。

Docker是运行时,Containerd也是运行时。这里我们主要讲Containerd的使用,前面看了Docker的结构,那么再来看一下Containerd的结构,如图1-9所示。

图1-9 Containerd的结构

当我们安装好Containerd并启动Containerd服务后,就是把服务器端Containerd运行起来了,这个服务器端提供了一个gRPC协议的接口/var/run/containerd/containerd.sock供客户端连接。

如果要管理镜像、管理容器,则需要一个客户端工具,常见的客户端工具包括nerdctl、crictl、ctr等,这些工具通过/var/run/containerd/containerd.sock接口连接到Containerd服务器端。

1.3.1 安装Containerd

本小节的操作都是在vms101上进行的。

第1步 配置yum源。

第2步 安装Containerd。

第3步 生成Containerd的配置文件。

第4步 配置加速器。

修改/etc/containerd/config.toml,按如下内容进行修改。

第一:搜索mirrors,把

改为

第二:搜索sandbox,把

改为

此文件也可以通过如下命令来下载。

第5步 启动Containerd并设置开机启动。

第6步 设置crictl客户端连接到Containerd。

因为crictl是一个客户端,它默认是不知道要连接到哪个服务器端的,所以执行crictl命令比如crictl ps命令时会报错。

这是因为crictl不知道从哪里连接到服务器端,所以我们需要明确地告诉crictl要连接到哪个服务器端,故需要执行如下命令。

这时再次执行crictl命令就不会报错了。

1.3.2 安装Containerd客户端nerdctl

因为Containerd是服务器端,为了能够更好地使用Containerd,我们可以安装第三方客户端nerdctl。

1. 下载nerdctl和CNI网络插件

到https://github.com/containerd/nerdctl/releases下载最新版的nerdctl,如图1-10所示。

到https://github.com/containernetworking/plugins/releases下载CNI网络插件,如图1-11所示。

图1-10 下载nerdctl

图1-11 下载CNI网络插件

第1步 安装nerdctl。

第2步 安装CNI网络插件。

第3步 创建nerdctl所需要的配置文件。

配置文件里的address指定了nerdctl这个客户端到哪里连接服务器端,namespace指定了nerdctl使用的命名空间是default,下面我们来了解一下命名空间的概念。

2. 了解Containerd里的命名空间

如同我们通过文件夹可以归类很多不同的文件一样,我们也可以通过命名空间归类不同的容器和镜像。在Containerd里有几个不同的命名空间,crictl默认使用的是k8s.io命名空间,nerdctl默认使用的是default命名空间,如图1-12所示。

图1-12 Containerd里的命名空间

crictl拉取的镜像都放在k8s.io命名空间里,nerdctl查看镜像时查看的是default命名空间里的镜像,所以nerdctl看不到crictl拉取的镜像。如果要让nerdctl也使用k8s.io命名空间,我们可以修改nerdctl的配置文件/etc/nerdctl/nerdctl.toml,把里面的namespace的值设置为k8s.io,或者通过修改变量export CONTAINERD_NAMESPACE=k8s.io来实现。

后面的练习里,nerdctl都是在default命名空间里做的,更建议拉取和查看镜像使用crictl命令来做,对容器的管理用nerdctl来做。

第4步 设置nerdctl可以使用Tab键。

编辑/etc/profile,在第二行里添加source <(nerdctl completion bash),如图1-13所示。

图1-13 设置nerdctl可以使用Tab键

之后执行source /etc/profile命令让修改生效。

在vms101上拉取BusyBox镜像。