containerd中文翻译系列(三) 操作和管理containerd

containerd 是一个可在任何系统上运行的简单守护进程。它提供了一个带有旋钮的最小配置,用于配置守护进程和必要时使用的插件。

名称:
   containerd -
                    __        _                     __
  _________  ____  / /_____ _(_)___  ___  _________/ /
 / ___/ __ \/ __ \/ __/ __ `/ / __ \/ _ \/ ___/ __  /
/ /__/ /_/ / / / / /_/ /_/ / / / / /  __/ /  / /_/ /
\___/\____/_/ /_/\__/\__,_/_/_/ /_/\___/_/   \__,_/

高性能容器运行时


用法:
   containerd [global options] command [command options] [arguments...]

版本:
   v2.0.0-beta.0

说明

containerd 是一种高性能容器运行时,其守护进程可通过使用此命令启动。如果没有指定*config*、*publish*、*oci-hook*或*help*命令,**containerd**命令的默认操作是启动容器运行时的守护进程。命令,**containerd** 命令的默认操作是在前台启动
containerd守护进程。

如果未指定TOML配置或默认文件目录没有TOML配置文件,则使用默认配置。
*containerd config* 命令可用于生成 containerd 的默认配置。该命令的输出
可用作自定义配置,并根据需要进行修改。

命令:
   config   配置信息
   publish  向容器发布事件
   oci-hook 为 OCI 运行时钩子提供基础,以便注入参数。
   help, h 显示命令列表或某个命令的帮助

全局选项:
   --config value, -c value 配置文件的路径(默认:"/etc/containerd/config.toml")。
   --log-level value, -l value 设置日志记录级别 [trace, debug, info, warn, error, fatal, panic] (默认值:"/etc/containerd/config.toml")。
   --address value, -a value containerd的GRPC服务器地址
   --root value containerd根目录
   --state value containerd状态目录
   --help, -h 显示帮助
   --version, -v 打印版本

虽然可以通过 CLI 标志设置一些守护进程级别的选项,但 containerd 的大部分配置都保存在配置文件中。配置文件的默认路径位于 /etc/containerd/config.toml。启动守护进程时,可以通过 --config,-c标志更改该路径。

systemd

如果使用 systemd 作为启动系统(大多数现代 Linux 操作系统都使用 systemd),则需要对服务文件进行一些修改。

[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

Delegate=yesKillMode=process是你需要在[Service]部分做出的两个最重要的更改。

Delegate允许 containerd 及其运行时管理它创建的容器的cgroup。如果不设置该选项,systemd 会尝试将进程移入它自己的 cgroup,从而导致containerd 及其运行时无法正确计算容器的资源使用情况。

KillMode用于处理containerd的关闭。默认情况下,systemd 会在其命名的cgroup中查找并杀死它所知道的服务的所有进程。这不是我们想要的。作为操作人员,我们希望能够升级 containerd,并允许现有容器不间断地继续运行。将 KillMode 设置为 process 可以确保 systemd 只杀死 containerd 守护进程,而不杀死任何子进程,如shim和容器。

下面的 systemd-run 命令以类似方式启动 containerd:

sudo systemd-run -p Delegate=yes -p KillMode=process /usr/local/bin/containerd

基本配置

在 containerd 配置文件中,你可以找到持久和运行时存储位置的设置,以及各种 API 的 grpc、debug和metrics地址。

有几个设置对运行非常重要。第一个设置是 oom_score 。 由于 containerd 将管理多个容器,我们需要确保在 containerd 守护进程出现内存不足的情况之前杀死容器。我们也不想让 containerd长生不死,但我们想把它的得分降低到其他系统守护进程的水平。

containerd 还通过 /v1/metrics 下的 Prometheus 指标格式导出它自己的指标和容器级指标。目前,Prometheus 只支持 TCP 端点,因此,metrics 地址应该是 Prometheus 基础架构可以从中抓取指标的 TCP 地址。

containerd 在主机系统上还有两个不同的存储位置。一个用于存储持久数据,另一个用于存储运行时状态。

root将用于存储containerd 的任何类型的持久性数据。快照、内容、容器和映像的元数据以及任何插件数据都将保存在这个位置。根目录还为 containerd 加载的插件命名空间化。每个插件都有自己的目录来存储数据。实际上,containerd 本身并不需要存储任何持久性数据,它的功能来自于加载的插件。

/var/lib/containerd/
├── io.containerd.content.v1.content
│   ├── blobs
│   └── ingest
├── io.containerd.metadata.v1.bolt
│   └── meta.db
├── io.containerd.runtime.v2.task
│   ├── default
│   └── example
├── io.containerd.snapshotter.v1.btrfs
└── io.containerd.snapshotter.v1.overlayfs
    ├── metadata.db
    └── snapshots

state 将用于存储任何类型的短暂数据。套接字、pids、运行时状态、挂载点和其他在重启时不能持久存在的插件数据都存储在此位置。

/run/containerd
├── containerd.sock
├── debug.sock
├── io.containerd.runtime.v2.task
│   └── default
│       └── redis
│           ├── config.json
│           ├── init.pid
│           ├── log.json
│           └── rootfs
│               ├── bin
│               ├── data
│               ├── dev
│               ├── etc
│               ├── home
│               ├── lib
│               ├── media
│               ├── mnt
│               ├── proc
│               ├── root
│               ├── run
│               ├── sbin
│               ├── srv
│               ├── sys
│               ├── tmp
│               ├── usr
│               └── var
└── runc
    └── default
        └── redis
            └── state.json

rootstate目录都是为插件命名空间化的。这两个目录是 containerd 及其插件的实现细节。它们不应被篡改,因为损坏和 bug 可能会发生。众所周知,当 ontainerd 和/或其插件试图清理资源时,读取或观察这些目录中变化的外部应用程序会导致 EBUSY 和陈旧的文件句柄。

version = 2

# persistent data location
root = "/var/lib/containerd"
# runtime state information
state = "/run/containerd"
# set containerd's OOM score
oom_score = -999

# grpc configuration
[grpc]
  address = "/run/containerd/containerd.sock"
  # socket uid
  uid = 0
  # socket gid
  gid = 0

# debug configuration
[debug]
  address = "/run/containerd/debug.sock"
  # socket uid
  uid = 0
  # socket gid
  gid = 0
  # debug level
  level = "info"

# metrics configuration
[metrics]
  # tcp address!
  address = "127.0.0.1:1234"

插件配置

说到底,containerd 的核心非常小。真正的功能来自插件。从快照器、运行时到内容都是在运行时注册的插件。由于这些插件千差万别,我们需要一种为插件提供类型安全配置的方法。我们能做到这一点的唯一方法是通过配置文件,而不是 CLI 标志。

在配置文件中,您可以通过"[plugins.]"部分为您使用的插件集指定插件级选项。你必须阅读插件的具体文档,才能找到你的插件所接受的选项。

请参阅 containerd 的插件文档

Bolt 元数据插件

bolt 元数据插件允许配置命名空间之间的内容共享策略。

默认模式为 shared,一旦 blob 被拉入任何命名空间,它将在所有命名空间中可用。如果写入器使用后端已存在的 Expected摘要打开,blob 将被拉入命名空间。

另一种模式是 isolated模式,要求客户端在将 Blob 添加到命名空间之前,通过向摄取(内容引入或引用)提供所有内容来证明自己有访问内容的权限。

这两种模式都共享后备数据,而shared模式会减少整个命名空间的总带宽,但代价是只需知道摘要就可以访问任何 Blob。

默认模式为 shared。虽然这是最理想的策略,但也可以通过以下配置更改为 isolated模式:

version = 2

[plugins."io.containerd.metadata.v1.bolt"]
	content_sharing_policy = "isolated"

在 "isolated "模式下,还可以通过在特定命名空间中添加标签 containerd.io/namespace.shareable=true,只共享该命名空间的内容。这样,即使内容共享策略设置为 isolated,其 blobs 也可以在所有其他命名空间中使用。如果将标签值设置为 true以外的任何其他值,命名空间的内容将不会被共享。

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 通过containerd API或CLI,可以使用以下步骤配置containerd管理容器: 1. 安装containerd; 2. 通过配置文件配置containerd服务; 3. 使用containerd API或CLI操作命令管理容器,如创建、启动、停止等。 更详细的配置方法请参考containerd文档。 ### 回答2: 通过containerd API或CLI,可以通过以下步骤配置和管理容器: 1. 安装containerd:首先需要安装containerd并启动守护进程。 2. 创建镜像:使用containerd API或CLI,可以从远程仓库或本地构建一个容器镜像。通过指定镜像的名称和标签,可以在本地保存镜像。 3. 创建容器:使用containerd API或CLI,可以创建一个新的容器。需要指定容器的名称、所使用的镜像、挂载点、网络设置、环境变量等信息。创建容器后,可以对其进行配置和管理。 4. 查看容器状态:使用containerd的状态查询API或CLI命令,可以获取容器的详细信息,包括容器的ID、状态、挂载点、网络设置等。 5. 启动和停止容器:使用containerd API或CLI,可以启动或停止已创建的容器。启动容器后,它将在后台运行。停止容器时,可以选择立即停止或优雅地关闭容器。 6. 调整容器资源:使用containerd的资源管理API或CLI命令,可以调整容器的CPU、内存、磁盘等资源。可以根据容器的需求增加或减少资源的分配。 7. 日志和监控:containerd API和CLI提供了获取和监控容器的日志和性能指标的功能。可以查看容器的日志、CPU使用率、内存使用情况等,以便及时调整容器的配置。 通过以上步骤,可以使用containerd API或CLI对容器进行配置和管理,实现容器的创建、启动、停止、资源调整等操作。这些功能提供了一个灵活和可扩展的方式来管理容器,使其适应不同应用场景的需求。 ### 回答3: 通过containerd API或CLI,可以使用以下步骤来配置和管理容器: 1. 安装containerd:首先,需要安装并配置containerd。可以通过在操作系统上运行适当的命令来安装containerd,如 `sudo apt-get install containerd` 或 `yum install containerd`。 2. 配置containerd:安装完成后,需要进行一些基本配置。可以通过修改 `/etc/containerd/config.toml` 文件来配置containerd。例如,可以设置默认的运行时和容器存储位置,以及网络配置等。 3. 启动containerd:配置完成后,可以使用适当的命令来启动containerd。例如,可以运行 `sudo systemctl start containerd` 命令来启动containerd服务。 4. 创建容器:使用containerd API或CLI,可以创建容器。可以通过指定容器的名称、图像、命令等来创建容器。例如,可以使用CLI命令 `containerd ctr run -d <镜像名称> <容器名称> <命令>` 来创建容器。 5. 管理容器:一旦容器创建完成,可以使用containerd API或CLI来管理容器。可以使用容器的ID或名称来执行各种操作,如启动容器、停止容器、重启容器、查看容器状态等。 6. 删除容器:如果不再需要某个容器,可以使用containerd API或CLI来删除容器。例如,可以使用CLI命令 `containerd ctr task kill -s KILL <容器ID>` 来立即终止容器。 通过以上步骤,可以使用containerd API或CLI来配置和管理容器。注意,具体的命令和操作可能会因为操作系统的不同而有所差异,可以根据实际情况进行调整和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值