containerd服务相关

一、Containerd概念

在2016年12月14日,Docker 公司宣布将 containerd 从 Docker 分离,由开源社区独立发展和运营。

Containerd 完全可以单独运行并管理容器,而 Containerd 的主要职责是镜像管理和容器执行。
Containerd 提供了 containerd-shim 接口封装层,向下继续对接 runC项目,使得容器引擎 Docker Daemon 可以独立升级。

Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等。主要负责以下事情:

  • 容器生命周期管理:容器的创建、启动、停止、删除、暂停、恢复、重启、查看、执行等
  • 拉取和推送容器镜像
  • 存储管理:容器的镜像和容器数据的存储
  • 调用 runC 运行容器
  • 管理容器网络接口及网络

1、Containerd 和 Docker 的关系

Docker 包含 Containerd,但是 Containerd 不包含 Docker。Docker 依赖于 Containerd,但是 Containerd 不依赖于 Docker。Docker 除了容器管理之外,还可以完成镜像构建之类的功能。

Containerd 提供的API偏底层,不是给普通用户直接用的,容器编排的开发者才需要 Containerd。

2、Containerd 在容器生态中扮演的角色

Containerd 是一个守护进程,它可以管理容器的生命周期,但是它不会自己创建容器,而是通过和其他工具的配合来实现容器的创建和管理。比如,Docker 通过 Containerd 来管理容器的生命周期,但是 Docker 会自己创建容器。

Containerd 并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如 Kubernetes 和 Mesos 等容器编排系统。

Containerd 以 daemon 的形式运行在系统上,通过 unix domain socket 暴露底层的 grpc API,供上层的工具调用。

二、Containerd架构

三、Kubernetes 与 Containerd

Kubernetes 与 Containerd 的关系如下图所示:(待补充)

1、Kubernetes 与 Docker

Kubernetes 1.20 版本开始,支持使用 Containerd 作为容器运行时。在 Kubernetes 1.20 之前,Kubernetes 一直使用 Docker 作为容器运行时。

Kubernetes 1.24 版本将移除对 Docker 的支持,只支持 Containerd。

2、CRI(Container Runtime Interface)

容器运行时接口(CRI) 是 Kubernetes 为了支持多种容器运行时而定义的一套接口规范,它定义了容器运行时必须实现的接口,包括镜像管理、容器生命周期管理、容器资源管理等。

CRI 是一个插件接口,它使 kubelet 能够使用各种容器运行时,需要在集群的每个节点上都有一个可以正常工作的容器运行时,这样 kubelet 能启动 Pod 及其容器。容器运行时接口(CRI)是 kubelet 和容器运行时之间通讯的主要协议。

Kubernetes 通过 CRI 与容器运行时进行通信,而不是直接调用容器运行时的 API。这样,Kubernetes 就可以支持多种容器运行时,而不需要修改代码。

Kubernetes 1.5 版本引入了 CRI,但是当时只支持 Docker。Kubernetes 1.11 版本开始,支持使用 CRI 来管理容器(创建、运行、销毁等工作),而不是直接调用 Docker 的 API。

Kubernetes 1.20 版本开始,支持使用 Containerd 作为容器运行时。在 Kubernetes 1.20 之前,Kubernetes 一直使用 Docker 作为容器运行时。

3、OCI(Open Container Initiative)

OCI(开放容器倡议) 是一个开放的容器标准,它定义了容器的镜像格式和容器运行时。OCI 由 Linux 基金会维护,它的目标是为容器提供一个开放的标准。

OCI 项目由 Docker,CoreOS(后来被 Red Hat 收购),Mesosphere,Microsoft,IBM,Huawei,Alibaba 等公司在 2015 年 6 月发起,它的目标是为容器提供一个开放的标准。

OCI 项目包含两个子项目:runtime-specimage-specruntime-spec 定义了容器运行时的标准,image-spec 定义了容器镜像的标准。

使用containerd作为K8S容器运行时缘故:

  • 如果使用 Docker 作为 kubelet 容器运行时的话,kubelet 需要先通过 dockershim 去调用 Docker,再通过 Docker 去调用 containerd。
  • 如果使用 containerd 作为 kubelet 容器运行时的话,kubelet 可以直接调用 containerd,不需要经过 dockershim 和 Docker。
  • 使用 containerd 作为 kubelet 容器运行时,不仅性能提高了,而且资源占用也会变小。(Docker 不是一个纯粹的容器运行时,具有大量其他功能)

四、Containerd安装和配置

1、安装

安装 docker 可以自动安装 containerd,也可以以如下方式单独安装 containerd。

# 配置 docker-ce.repo的yum源
[root@af116724e217 yum.repos.d]# yum install yum-utils -y
[root@af116724e217 yum.repos.d]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, ovl
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

# 安装 containerd
[root@af116724e217 yum.repos.d]# yum install containerd -y
[root@af116724e217 yum.repos.d]# systemctl enable containerd
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service, pointing to /usr/lib/systemd/system/containerd.service.
[root@af116724e217 yum.repos.d]# systemctl start containerd

2、配置

containerd 的配置文件是 /etc/containerd/config.toml,默认情况下,containerd 会使用默认配置,不需要修改配置文件。

如修改配置文件,需要重启 containerd 服务。

[root@af116724e217 yum.repos.d]# systemctl daemon-reload
[root@af116724e217 yum.repos.d]# systemctl restart containerd

五、Containerd使用

Containerd 的命令行工具是 ctr,它的功能非常强大,可以用来管理容器、镜像、快照、命名空间、任务、事件等。

[root@af116724e217 yum.repos.d]# ctr --help
NAME:
   ctr - 

containerd CLI

USAGE:
   ctr [global options] command [command options] [arguments...]

VERSION:
   1.6.21

DESCRIPTION:
   
ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.

COMMANDS:
   plugins, plugin            provides information about containerd plugins
   version                    print the client and server versions
   containers, c, container   manage containers
   content                    manage content
   events, event              display containerd events
   images, image, i           manage images
   leases                     manage leases
   namespaces, namespace, ns  manage namespaces
   pprof                      provide golang pprof outputs for containerd
   run                        run a container
   snapshots, snapshot        manage snapshots
   tasks, t, task             manage tasks
   install                    install a new package
   oci                        OCI tools
   shim                       interact with a shim directly
   help, h                    Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug                      enable debug output in logs
   --address value, -a value    address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]
   --timeout value              total timeout for ctr commands (default: 0s)
   --connect-timeout value      timeout for connecting to containerd (default: 0s)
   --namespace value, -n value  namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]
   --help, -h                   show help
   --version, -v                print the version

1、镜像管理

[root@master harbor]# ctr image --help
NAME:
   ctr images - manage images
USAGE:
   ctr images command [command options] [arguments...]
COMMANDS:
   check                    check existing images to ensure all content is available locally
   export                   export images
   import                   import images
   list, ls                 list images known to containerd      # 查看镜像列表
   mount                    mount an image to a target path
   unmount                  unmount the image from the target
   pull                     pull an image from a remote
   push                     push an image to a remote
   delete, del, remove, rm  remove one or more images by reference
   tag                      tag an image
   label                    set and clear labels for an image
   convert                  convert an image
OPTIONS:
   --help, -h  show help

# 拉取镜像(镜像地址需要加上前缀 docker.io/)
[root@master harbor]# ctr image pull docker.io/library/nginx:latest
docker.io/library/nginx:latest:                                                   resolved       |++++++++++++++++++++++++++++++++++++++| 
index-sha256:593dac25b7733ffb7afe1a72649a43e574778bf025ad60514ef40f6b5d606247:    done           |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:d2b2f2980e9ccc570e5726b56b54580f23a018b7b7314c9eaff7e5e479c78657: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:4a85ce26214d83c77b5464631a67c71e1c2793b655261befe52ba0e20ffc3bd1:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:3b9543f2b5005b74aae0ffaa779803f2b162ec3bd461c9e10a21671512718c87:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:b0e1283145af839c63923f671b4ab6c5d9e22826ab4372c6660db5a5556446c8:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:4b98867cde79486d55399cb95957331018b849a2bf04ee9a6dcae9b8bc482d76:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:ca89ed5461a9f2c681ebd39ed6583a7405d82f51b42177b7388c99eb6869e780:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:5b5fe70539cd6989aa19f25826309f9715a9489cf1c057982d6a84c1ad8975c7:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:441a1b46536703aec84bf2cabdd2524d4cc7dad9c6772491e01ff8ffe15b5507:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:eb4a57159180767450cb8426e6367f11b999653d8f185b5e3b78a9ca30c2c31d:   done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 17.5s                                                                    total:  67.3 M (3.8 MiB/s)                                       
unpacking linux/amd64 sha256:593dac25b7733ffb7afe1a72649a43e574778bf025ad60514ef40f6b5d606247...
done: 2.938661087s	

# 查看本地镜像
[root@master harbor]# ctr image ls
REF                            TYPE                                                      DIGEST                                                                  SIZE     PLATFORMS                                                                                               LABELS 
docker.io/library/nginx:latest application/vnd.docker.distribution.manifest.list.v2+json sha256:593dac25b7733ffb7afe1a72649a43e574778bf025ad60514ef40f6b5d606247 67.3 MiB linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x -  

# 检查镜像
[root@master harbor]# ctr image check docker.io/library/nginx:latest
ctr: failed listing images: filters: parse error: [docker.io >|/|< library/nginx:latest]: expected an operator ("=="|"!="|"~="): invalid argument: invalid argument

2、容器管理

[root@master harbor]# ctr container --help
NAME:
   ctr containers - manage containers
USAGE:
   ctr containers command [command options] [arguments...]
COMMANDS:
   create                   create container
   delete, del, remove, rm  delete one or more existing containers    # 删除容器
   info                     get info about a container       # 查看容器数据信息
   list, ls                 list containers
   label                    set and clear labels for a container
   checkpoint               checkpoint a container
   restore                  restore a container from checkpoint
OPTIONS:
   --help, -h  show help

3、快照管理

[root@master harbor]# ctr snapshot --help
NAME:
   ctr snapshots - manage snapshots
USAGE:
   ctr snapshots command [command options] [arguments...]
COMMANDS:
   commit                   commit an active snapshot into the provided name
   diff                     get the diff of two snapshots. the default second snapshot is the first snapshot's parent.
   info                     get info about a snapshot
   list, ls                 list snapshots
   mounts, m, mount         mount gets mount commands for the snapshots
   prepare                  prepare a snapshot from a committed snapshot
   delete, del, remove, rm  remove snapshots
   label                    add labels to content
   tree                     display tree view of snapshot branches
   unpack                   unpack applies layers from a manifest to a snapshot
   usage                    usage snapshots
   view                     create a read-only snapshot from a committed snapshot
OPTIONS:
   --snapshotter value  snapshotter name. Empty value stands for the default value. [$CONTAINERD_SNAPSHOTTER]
   --help, -h           show help
posted @ 2023-06-19 15:15  休耕  阅读(260)  评论(0编辑  收藏  举报