containerd

一.什么是Containerd

        Containerd(ContainerDaemon)是一个开源的容器运行时,它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由Docker开发团队创建的,并在后来成为一个独立的项目,被纳入了c1oudNativeComputingFoundation(云原生计算基金会CNCF)的解化项目中
        以下是containerd的主要特点和功能:
        容器生命周期管理: Containerd管理容器的生命周期,包括容器的创建、运行、暂停、恢复、停止和销毁等操作。
        标准化接口: Containerd提供了一个标准化的容器运行时接口,使得它可以与多个容器编排系统和工具集成,例如Kubernetes、DockerCompose等
        镜像管理:它支持容器镜像的拉取、推送、保存和加载等操作。Containerd使用OCI(OperContainerInitiative)规范定义容器镜像的格式
        插件体系结构:Containerd具有可扩展的插件体系结构,允许用户通过插件来扩展其功能,例如存储驱动、网络插件等。
        跨平台支持: Containerd可以在不同的操作系统上运行,从而提供了跨平台的支持。
        与Kubernetes集成: Containerd作为Kubernetes的默认容器运行时,与Kubernetes紧密集成,为容器工作负载的管理提供了良好的支持。
        安全性和隔离:Containerd实现了严格的容器隔离和安全性措施,确保容器之间的隔离性以及对主机系统的安全性。
        总体而言,Containerd提供了一个轻量级、高度可定制的容器运行时,为容器生态系统的发展提供个稳定和可靠的基础。它在容器生命周期管理、镜像管理和插件支持等方面为用户提供了丰富的功能

二.架构概述

        containerd的架构是modularity(模块化)和可扩展性的体现,他被设计为一个轻量级,高度可定制的容器运行时。

        可以看出Containerd采用的也是C/S架构,服务端通过unix domain socket暴露低层的gRPC API接口出去,客户端通过这些API管理节点上的容器,每个Containerd只负责一台机器,pull镜像,对容器的操作(启动,停止),网络,存储都是由Containerd完成。具体运行容器由run负责。       

        为了解耦,Containerd将系统划分成不同的组件,每个组件都由一个或多个模块协作完成(core部分),每一种类型的模块都以插件的形式集成到Containerd中。

三.核心组件解析

        Containerd组件大致分为storage,Metadata和Runtime三个方面。

1.Storage(存储)

Content(内容)

功能:Content存储了容器镜像的实际数据,包括文件系统层和元数据,用于创建和管理容器的基础文件系统。

snapshot(快照)

功能:snapshot存储容器的快照数据,每个容器都可以有一个或多个快照,允许它们共享相同的文件系统层,提高效率。

Diff(差异)

功能:Diff存储容器文件系统层之间的差异。当容器运行时需要修改文件系统时,会在已有的文件系统层窗机一个差异层,已保存变更。

2.Metadata(元数据)

Image(镜像)

功能:Image存储容器镜像的元数据,包括镜像的标签,大小,创建时间等信息。Metadata中的Images组件允许容器对镜像进行管理和操作

Containers(容器)

功能:Containers存储容器的元数据,包括容器的状态,配置信息,网络设置等,这部分元数据使得容器能够有效地管理容器的生命周期。

3.Runtime(运行时)

Tasks(任务)

功能:Tasks包括容器内的进程组,每个容器运行都有关联的task,他负责管理容器内的所有进程。Tasks与Shim一起工作,维护容器的状态。

Events(事件)

功能:Event组件记录了容器的各种事件,如容器的创建,启动,停止。这些事件可以用于监控和日志记录,帮组用户了解容器的运行状况。

四.Containerd的安装

1.配置阿里yum仓库为源

rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all

2.到阿里镜像站,搜索Docker,复制以下内容

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE

3.列出可用版本

yum list containerd.io --showduplicates

4.安装最新版Containerd

yum -y install containerd.io

五.配置Containerd

(1)查看配置文件

mkdir -p /etc/contaunterd
cd /etc/contaunterd
containerd config default>config.toml
或
Containerd config default | sudo tee /etc/containerd/config.toml

备注:

sudo tee  etc/containerd/config.toml:

tee命令通常用来读取标准输入,并将其内容写入文件和输出到终端

/etc/containerd/config.toml是containerd的配置文件路径,这里指定了配置文件的具体位置

使用containerdconfigdefauit命令获取containerd的默认配置信息

通过管道将这些配置信息传递给tee命令

使用sudotee/etc/containerd/config.toml以管理员权限创建或覆etc/containerd/config.tom文件,开将之前获取的配置信息与入其中

(2)配置镜像加速

vim /etc/containerd/config.toml

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.config."docker.io"]
          endpoint = ["https://registry.cn-hangzhou.aliyuncs.com" ,"https://registry-1.docker.io"]

(3)启动服务查看版本

systemctl enable Containerd
systemctl start Containerd
ctr version

六.Containerd基本操作

1.镜像类操作

(1)拉取镜像

ctr images pull 镜像名称:[镜像标签]

ctr Images pull hub.atomgit.com/amd64/nginx:1.25.2-perl

备注:hub.atomgit.com/amd64/nginx:1.25.2-perl可以从https://hub.atomgit.com/获取

(2)查看镜像

ctr images ls

 (3)检测本地镜像

主要查看其中ATATUS,complete表示镜像时完整可用的状态

ctr images check

(4)重新命名和打标签

ctr image tag hub.atomgit.com/amd64/nginx:1.25.2-perl nginx:v1

(5)删除镜像

ctr images rm 镜像名称 新镜像名称

ctr images  rm nginx:v1

(6)镜像挂载到主机目录

ctr images mount 镜像 挂载点

ctr images mount nginx:v1 /mnt

查看挂载目录

ls -l /mnt

(7)镜像从主机目录卸载

ctr images mount 挂载点

(8)镜像导出

ctr images export --all-platforms 导出的文件名 镜像名称:[镜像标签] 

ctr images export --all-platforms nginx_v1.tar nginx:v1

有时候镜像导入导出的时候会有报错,ctr:content digest sha256:xxxxxxx not found

(9)镜像导入

ctr images import 文件名

ctr images import nginx_v1.tar

2.容器类操作

(1)创建容器

ctr containers create nginx:v1 nginx

(2)列出容器

ctr containers ls

(3)查看容器的详细信息

ctr containers info nginx

(4)删除容器

ctr containers rm nginx

3.任务类操作

        我们通过container create 命令创建的容器,并没有处于运行状态,只是一个静态的容器(仅仅只是一个创建容器的声明),一个container对象只是包含了运行一个容器所需的资源及相关配置数据,表示namespace,rootfs和容器的配置都已经初始化成功了,只是用户进程还没有启动。

        一个容器真正运行起来是由Task任务实现。

(1)启动容器

ctr task start -d nginx

备注:-d放在后台运行

(2)查看容器

ctr task ls

(3)进入容器里面

ctr task exec --exec-id 0 -t nginx sh

(4)停止容器

ctr tack pause nginx
ctr task ls

备注:停止后,查看容器时,字段STATUS会为 PAUSED 

(5)恢复容器

ctr task resume 容器名

备注:恢复后,查看容器时,字段STATUS会为RUNNING

(6) 杀死容器

ctr task kill 容器名
ctr task ls

备注:杀死后,查看容器时,字段STATUS会为 STOPPED 

(7)删除任务

ctr task rm nginx

备注:删除任务“ctr task rm nginx”虽然已经删除了任务,但是创建容器的时候,也创建了一个同名的快照,即便已经删除了任务,也可以使用“ctr task sart -d nginx”命令,利用此快照将已删除的任务启动起来,使得此容器恢复运行。 

(8)删除容器

删除任务
ctr task rm nginx
杀死任务
ctr task kill nginx
删除容器
ctr containers rm nginx

备注: 删除后容器快照也没有了

 (9)获取容器的内存,CPU和PID的限额和使用量

ctr task metrics nginx

关键字段解释如下: 

(10)查看容器中所有进程在宿主机中的PID

ctr task ps nginx
ps -ef | grep 1947

4.其他操作

(1)插件 

查看所有插件

ctr plugins ls

(2)命名空间

查看命名空间

ctr ns ls

创建命名空间

ctr ns create test

删除命名空间

ctr ns rm test

在做一些操作时也有指定命名空间如:拉取镜像,修改镜像名,创建容器等

ctr -n test images pull 镜像名
ctr -n test images tag 原镜像 新名
ctr -n test images ls 查看指定命名空间内的镜像
ctr  -n test containers create 镜像名 容器名

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值