当前位置:首页 > 英文周记 > 正文内容

containerd「containers」

更新时间:2026-07-18 07:50:47 周记网3年前 (2023-02-15)英文周记295

containerd导入本地镜像的一个小坑

containerd 命令行工具为 ctr

containerd「containers」

本地镜像导入命令:

注意:当tar包没有tag信息时,导入之后,无报错,errno 为0,但是 通过 ctr images ls 查看却没有相关的镜像。这种情况,需要添加 --digests=true 来导入:

同步自个人博客 hxysayhi

Containerd的安装和配置

Containerd Github: containerd/containerd

直接将压缩包解压到系统目录中:

添加环境变量

生成配置文件

containerd安装包中含有 containerd.server 文件在 etc/systemd/system/containerd.service 下,所以我们能通过systemd 来配置 containerd 作为守护进程运行,其文件内容为

启动containerd

查看Containerd本地CLI命令工具ctr的版本

查看兼容CRI的容器运行时命令行接口crictl的版本:

生成默认的配置文件: containerd config default /etc/containerd/config.toml

配置文档地址: containerd / containerd 。

在/etc/containerd/config.toml 文件中添加需要加速的镜像信息:

其中, registry.mirrors."xxx" 表示需要配置 mirror 的镜像仓库原镜像仓库, endpoint 表示提供 mirror 的镜像加速服务。

跳过tls验证:

/etc/containerd/config.toml 配置文件中的内容仅会对crictl生效。

crictl images list = ctr -n=k8s.io image list

pull image:

ctr接口只有containerd才有吗

ctr接口不只有containerd才有。

Containerd是一个工业标准的容器运行时,重点是它简洁,健壮,便携,在Linux和window上可以作为一个守护进程运行。

它可以管理主机系统上容器的完整的生命周期:镜像传输和存储,容器的执行和监控,低级别的存储和网络。containerd和docker不同,containerd重点是继承在大规模的系统中,例如kubernetes,而不是面向开发者,让开发者使用,更多的是容器运行时的概念,承载容器运行。

将Kubernetes的Runtime由Docker修改为containerd

Kubernetes 从 v1.20 开始弃用 Docker,并推荐用户切换到基于容器运行时接口(CRI)的容器引擎,如 containerd、cri-o 等。如果你使用了云服务商提供的托管 Kubernetes 服务,那你不用担心,像 GKE、AKS 等云服务商都已经在新版集群中把默认的运行时切换到 containerd 。如果是自管的集群则需要手动修改集群的Runtime,以下介绍集群Runtime的修改方法。

首先将需要修改的节点设置成不可调度

驱逐该节点上除了daemonset的pod

关闭docker、containerd 和 kubelet:

我们在使用docker-ce作为集群runtime时默认安装了containerd,先将其卸载。

安装containerd可参考我的文章: Containerd的安装和配置

/etc/containerd/config.toml 修改默认的 pause 镜像为国内的地址,替换 [plugins."io.containerd.grpc.v1.cri"] 下面的 sandbox_image:

配置下镜像仓库的加速器地址:

修改 kubelet 配置,将容器运行时配置为 containerd,编辑/etc/sysconfig/kubelet 文件,在该文件中可以添加kubelet 启动参数:

或者修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf文件

--container-runtime :指定使用的容器运行时的,可选值为 docker 或者 remote,默认是 docker,除 docker 之外的容器运行时都应该指定为 remote。

--container-runtime-endpoint:是用来指定远程的运行时服务的 endpiont 地址的,在 Linux 系统中一般都是使用 unix 套接字的形式,unix:///run/containerd/containerd.sock。

--image-service-endpoint:指定远程 CRI 的镜像服务地址,如果没有指定则默认使用 --container-runtime-endpoint 的值了,因为 CRI 都会实现容器和镜像服务的。

配置完成后重启 containerd 和 kubelet 即可:

查看服务

允许调度

Docker 组件基本介绍

供用户使用的命令行工具,负责请求 docker API 与 dockerd 交互,使得用户可以便捷友好的操作 docker。

监听 Docker API 请求,通过 containerd 管理 container 生命周期。

dockerd 通过 unix、tcp、fd 三种类型方式来接收 API 请求。默认的 unix socket 创建在 /var/run/docker.sock ,启动 dockerd 需要 root 权限或者 docker group 权限。

dockerd 在启动的时候会拉起 containerd,并与 containerd 保持通信。

pre data-tool="mdnice编辑器" style="margin: 10px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.54902) 0px 2px 10px;"`$ ps aux | grep dockerd

/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock` /pre

containerd 的主要职责是管理容器的生命周期,此外它还做:

containerd 包含一个暴露 gRPC API 的 daemon 服务,这些 API 比较底层,为了被更好层调用,或者基于此做扩展。Docker 有很好的分层机制, containerd 不会直接被用户使用, 自己也是通过 runc 去运行容器。

containerd 拥有很强的适配性,其已是事实上的工业标准。containerd 通过 UNIX socket 对外暴露 gRPC API 。通过 containerd 的启动命令,可以很轻易的找到 sokcet 文件的具**置。

/usr/bin/docker-runc 可以视作 containerd 的一部分,它是一个运行遵从 OCI 标准容器的二进制工具。容器镜像通过 OCI 标准的格式打包,通常包括一个 config.json 文件和系统根目录。

config.json 文件具体都记录了点什么呢?主要字段包括:

containerd-shim 的存在使得 container 可以脱离 containerd 独立运行。(默认的,停掉 dockerd,container 也停止了,但可以通过 daemon.json 配置实现 dockerd 停掉后,container 照常运行。)

作为 container 的父进程,container-shim 主要负责如下职责:

当我们启动 docker 后, dockerd 会默认拉起 containerd

假使我们运行一个 container ,这时就会看到 containerd-shim

调用顺序是 dockerd -- containerd -- container-shim -- "sleep 60"

原文链接:

Containerd 入门基础操作

Containerd 被 Docker、Kubernetes CRI 和其他一些项目使用

Containerd 旨在轻松嵌入到更大的系统中。Docker 在后台使用 containerd来运行容器。Kubernetes 可以通过 CRI 使用 containerd来管理单个节点上的容器。

生成默认配置

配置镜像加速器

ctr 相当于核心组件,通过加载插件的方式来支持各种操作。

使用 ctr plugins ls 来查看当前加载的插件和支持的操作。

ctr plugins ls 命令会展示三列 ,第二列 ID 就是对应的命令。

例如 plugins 的 id 为 content 可使用 ctr content --help 来查看帮助,以及其他命令来执行操作。

查看有哪些命名空间

查看 k8s.io 空间下的镜像有哪些

接下来 从 容器的 生命周期流程 来说明 ctr 命令的使用。

ctr images ls 查看镜像

ctr images pull 拉取镜像

只有通过 crictl 或者 Kubernetes 调用时 mirror 才会生效,通过 ctr 拉取是不会生效的。

ctr images rm 删除镜像

ctr images mount 挂载

ctr images unmount 卸载

ctr images export 导出镜像

ctr images import 导入镜像

ctr中 containers 是镜像实例化的一个虚拟环境,提供一个磁盘,模拟空间,就好比你电脑处于关机状态一样。

ctr中 tasks 是将容器运行起来,电脑开机了 ,初始化进程等 ,task就是的这么个形式。

ctr containers ls 查看容器

ctr containers create 创建容器

ctr containers rm 删除容器

ctr containers info 查看详细信息

create 的命令创建了容器后,并没有处于运行状态,只是一个静态的容器。一个 container 对象只是包含了运行一个容器所需的资源及配置的数据结构,这意味着 namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程(这里是 nginx)还没有启动。

ctr tasks start -d 在后台运行容器

ctr task exec 进入容器,id随便写就行,需要将其唯一

ctr task pause 暂停容器

ctr task resume 恢复容器

ctr task kill 杀死容器

ctr task metrics获取容器信息

ctr tasks rm 删除容器

CSDN、GitHub、知乎、开源中国、思否、掘金、、腾讯云、哔哩哔哩、今日头条、新浪微博、个人博客、全网可搜《小陈运维》

标签: containerd

“containerd「containers」” 的相关文章

containerd「container的中文翻译」

containerd「container的中文翻译」

Containerd的安装和配置 Containerd Github: containerd/containerd 直接将压缩包解压到系统目录中: 添加环境变量 生成配置文件 containerd...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。