Containerd的安装和是使用

一、Containerd介绍

 1、Containerd前世今生

       2013年docker公司在推出docker产品后,由于其对全球技术产生了一定的影响力,Google公司明显感觉到自己公司内部所使用的Brog系统江湖地位受到的威胁,希望Docker公司能够与自己联合打造一款开源的容器运行时作为Docker核心依赖,但Docker公司拒绝了;接着Google公司联合RedHat、IBM等公司说服Docker公司把其容器核心技术libcontainer捐给中立社区(OCI,Open Container Intiative),并更名为runC。

      为了进一步遏制Docker在未来技术市场影响力,避免在容器市场上Docker一家独大,Google公司带领导RedHat、IBM等成立了CNCF(Cloud Native Computing Fundation)基金会,即云原生计算基金会。CNCF的目标很明确,既然在容器应用领域无法与Docker相抗衡,那就做Google更有经验的技术市场------大规模容器编排应用场景,Google公司把自己内部使用的Brog系统开源------Kubernetes,也就是我们今天所说的云原生技术生态。

     2016年Docker公司推出了Docker Swarm,意在一统Docker生态,让Docker既可以实现容器应用管理,也可以实现大规模容器编排,经过近1年左右时间的市场验证后,发现在容器编排方面无法独立抗衡kubernetes,所以Docker公司于2017年正式宣布原生支持Kubernetes,至此,Docker在大规模容器编排应用市场败下阵来,但是Docker依然不甘心失败,把Docker核心依赖Containerd捐给了CNCF,依此说明Docker依旧是一个PaaS平台。

     2020年CNCF基金会宣布Kubernetes 1.20版本将不再仅支持Docker容器管理工具,此事的起因主要也与Docker捐给CNCF基金会的Containerd有关,早期为了实现Kubernetes能够使用Docker实现容器管理,专门在Kubernetes组件中集成一个shim(垫片)技术,用来将Kubernetes容器运行时接口(CRI,Container Runntime Interface)调用翻译成Docker的API,这样就可以很好地使用Docker了,但是随着Kubernetes在全球技术市场的广泛应用,有更多的容器管理工具的出现,它们都想能够借助于Kubernetes被用户所使用,所以就提出标准化容器运行时接口,只要适配了这个接口就可以集成到Kubernetes生态当中,所以Kubernetes取消了对shim的维护,并且由于Containerd技术的成功,可以实现无缝对接Kubernetes,所以接下来Kubernetes容器运行时的主角是Containerd。

 2、Containerd架构

      Containerd设计的目的是为了嵌入到Kubernetes中使用,它是一个工业级的容器运行时,不提供给开发人员和终端用户直接使用,这样就避免了与Docker产生竞争,但事实上,Containerd已经实现大多数容器管理功能,例如:容器生命周期管理、容器镜像传输和管理、容器存储与网络管理等。

- Containerd 采用标准的 C/S 架构
  - 服务端通过 GRPC 协议提供稳定的 API
  - 客户端通过调用服务端的 API 进行高级的操作

- 为了实现解耦,Containerd 将不同的职责划分给不同的组件,每个组件就相当于一个子系统(subsystem)。连接不同子系统的组件被称为模块。


- Containerd 两大子系统为:

  - Bundle : 在 Containerd 中,Bundle 包含了配置、元数据和根文件系统数据,你可以理解为容器的文件系统。而 Bundle 子系统允许用户从镜像中提取和打包 Bundles。
  - Runtime : Runtime 子系统用来执行 Bundles,比如创建容器。

  其中,每一个子系统的行为都由一个或多个模块协作完成(架构图中的 Core 部分)。每一种类型的模块都以插件的形式集成到 Containerd 中,而且插件之间是相互依赖的。

  例如,上图中的每一个长虚线的方框都表示一种类型的插件,包括 Service Plugin、Metadata Plugin、GC Plugin、Runtime Plugin 等,其中 Service Plugin 又会依赖 Metadata Plugin、GC Plugin 和 Runtime Plugin。每一个小方框都表示一个细分的插件,例如 Metadata Plugin 依赖 Containers Plugin、Content Plugin 等。 

 3、常用插件

Content Plugin: 提供对镜像中可寻址内容的访问,所有不可变的内容都被存储在这里。

Snapshot Plugin: 用来管理容器镜像的文件系统快照。镜像中的每一个 layer 都会被解压成文件系统快照,类似于 Docker 中的 `graphdriver`。

Metrics: 暴露各个组件的监控指标。

 

 

 

 

 二、安装使用

1、Rocky8.6安装

获取阿里云YUM源 :wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看YUM源中Containerd软件: # yum list | grep containerd 

下载安装: yum install -y containerd.io

[root@rocky8-6 ~]# rpm -qa | grep containerd
containerd.io-1.6.6-3.1.el8.x86_64
[root@rocky8-6 ~]#

设置containerd服务启动及开机自启动
systemctl enable containerd
systemctl start containerd
systemctl status containerd

 验证方式

2、Ubuntu20.04安装方式

2.1、下载安装包

wget https://github.com/containerd/containerd/releases/download/v1.6.6/cri-containerd-cni-1.6.6-linux-amd64.tar.gz

2.2、解压安装包

mkdir containerd && tar -xvzf cri-containerd-cni-1.6.6-linux-amd64.tar.gz -C containerd

 

cp -p /root/containerd/usr/local/bin/* /usr/local/bin/
cp -p /root/containerd/etc/systemd/system/containerd.service /usr/lib/systemd/system/containerd.service
chmod +x /usr/lib/systemd/system/containerd.service

2.3、生成containerd 的配置文件

Containerd 的默认配置文件为 `/etc/containerd/config.toml`,可以使用`containerd config default > /etc/containerd/config.toml`命令创建一份模块配置文件

mkdir -p /etc/containerd/
生成配置文件
containerd config default > /etc/containerd/config.toml
cp -a /etc/containerd/config.toml /etc/containerd/config.toml.bak

验证方式

3、containerd使用

ctr images ls 查看containerd镜像

# 下载镜像
# containerd支持oci标准的镜像,所以可以直接使用docker官方或dockerfile构建的镜像
# ctr images pull --platform linux/amd64 docker.io/library/nginx:alpine
# ctr images ls

镜像挂载
把已下载的容器镜像挂载至当前文件系统
# ctr images mount docker.io/library/nginx:alpine /mnt
卸载
# umount /mnt

 

把容器镜像导出
# ctr images pull --all-platforms docker.io/library/nginx:alpine   [下载]

# ctr images export --all-platforms nginx-alpine.img docker.io/library/nginx:alpine 【导出】

# ctr images pull --platform linux/amd64 docker.io/library/nginx:1.15   [下载]

# ctr images export --platform linux/amd64 nginx-1.15.img docker.io/library/nginx:1.15 [导出]

# ctr images pull docker.io/library/nginx:1.14 【下载】
# ctr images export --platform linux/amd64 nginx-1.14.tar docker.io/library/nginx:1.14 [导出]

删除指定容器镜像 
# ctr images rm docker.io/library/nginx:1.14 
# ctr images rm docker.io/library/nginx:1.15 
# ctr images rm docker.io/library/nginx:alpine 
# ctr images rm docker.io/library/nginx:latest 

再次查看容器镜像 
# ctr images ls REF TYPE DIGEST SIZE PLATFORMS LABELS


导入镜像
#ctr images import nginx-alpine.tar.gz


修改镜像tag
# ctr images tag docker.io/library/nginx:alpine nginx:alpine
nginx:alpine

说明:
把docker.io/library/nginx:alpine 修改为 nginx:alpine

# ctr images ls
# ctr images check
参考文档:https://blog.51cto.com/flyfish225/5360370
posted @ 2022-07-18 20:48  cyh00001  阅读(525)  评论(0编辑  收藏  举报