本文致力于学习并梳理Containerd,信息来源均参考至官方Github,原文链接如下补充。
开始使用
link: https://github.com/containerd/containerd/blob/main/docs/getting-started.md
仅梳理Linux二进制安装,其他信息并未梳理。
依赖与限制
独立使用containerd
依赖于runc
与CNI plugins
,可采用cri-containerd-cni-1.7.16-linux-amd64.tar.gz
完整包安装,或拆分后各自安装。containerd
是为基于glibc
的Linux
发行版动态构建的,所以musl
类的如Alpine
则可能无法运行。
若作为Kubernetes
的容器运行时使用,只需要使用containerd-<VERSION>-<OS>-<ARCH>.tar.gz
类型的二进制包。从containerd 2.0
起,cri-containerd-*
命名的二进制包、档案已弃用。
安装程序
$ wget https://github.com/containerd/containerd/releases/download/v1.6.31/containerd-1.6.2-linux-amd64.tar.gz
$ tar Cxzf /usr/local containerd-1.6.2-linux-amd64.tar.gz
bin/
bin/containerd-shim-runc-v2
bin/containerd-shim
bin/ctr
bin/containerd-shim-runc-v1
bin/containerd
bin/containerd-stress
以Systemd启动
$ curl https://raw.githubusercontent.com/containerd/containerd/main/containerd.service | sudo tee -a /usr/local/lib/systemd/system/containerd.service
# Copyright The containerd Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now containerd
配置解释
link: https://github.com/containerd/containerd/blob/main/docs/ops.md
Delegate
允许 containerd 及其运行时管理它创建的容器的 cgroup。如果不设置此选项,systemd 将尝试将进程移至其自己的 cgroup 中,从而导致 containerd 及其运行时无法正确考虑容器的资源使用情况。
关闭服务时,systemd
默认会找服务的cgroup
并杀死服务的每个进程,对于containerd
而言会导致现有容器异常。设置KillMode
为process
可确保systemd
只杀死Containerd
守护进程而不杀死子进程。
OOMScoreAdjust
保障containerd
因内存不足而被杀死的优先级。( 可设为 -1000(禁止被杀死) 到 1000(最先被杀死)之间的整数值。)
runc & cni
# install runc
$ wget https://github.com/opencontainers/runc/releases/download/v1.1.11/runc.amd64
$ install -m 755 runc.amd64 /usr/local/sbin/runc
# install cni
$ wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
$ mkdir -p /opt/cni/bin
$ tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz
./
./macvlan
./static
./vlan
./portmap
./host-local
./vrf
./bridge
./tuning
./firewall
./host-device
./sbr
./loopback
./dhcp
./ptp
./ipvlan
./bandwidth
基础设计模式
link: https://github.com/containerd/containerd/blob/main/docs/ops.md
完整配置文件link: https://github.com/containerd/containerd/blob/main/docs/man/containerd-config.toml.5.md
Containerd
在未指定config
, publish
, oci-hook
, help
二级命令时则以前台形式启动Containerd
守护进程。默认读取的配置文件在/etc/containerd/config.toml
,可以使用--config,-c
指定文件。默认配置文件可用containerd config default > /etc/containerd/config.toml
生成,后文的配置文件来自于containerd v1.7.14
默认生成,与链接文档中的配置稍有变化。
containerd
核心非常小,真正功能都来自于插件。通过[plugins.<plugin_name>]
指定配置插件,需要阅读对应的插件文档得到具体的配置项。
基础配置
# 根据插件ID选择性禁用,插件将不会被初始化与启动
disabled_plugins = []
# 导入拆分的子配置文件,会覆盖一些简单字段(`int`,`string`要求非空)。
imports = []
# 效果同`systemd`中`OOMScoreAdjust`。
oom_score = 0
# 动态插件存放目录
plugin_dir = ""
# 必要插件,当对应插件不存在或初始化失败或启动失败,containerd会退出。
required_plugins = []
# containerd元数据的根目录,存放容器的快照、元数据、读写数据,镜像,各个插件的数据。
root = "/var/lib/containerd"
# 存储任何类型的临时数据。套接字、pid、运行时状态、挂载点和其他不得长期保留的插件数据。
state = "/run/containerd"
temp = ""
# version 2 自containerd1.3引入;version 1 将在containerd2.0删除; version 3 自 containerd 2 启用。
version = 2
# 设置Linux cgroup
[cgroup]
# 为容器设置置顶cgroup路径
path = ""
# 启用与配置debug socket监听器
[debug]
# 默认 /run/containerd/debug.sock。(实际默认配置生产结果为空)
address = ""
# 输出格式,默认text或选择json。(实际默认配置生产结果为空)
format = ""
gid = 0
# 日志级别,默认info,支持"trace", "debug", "info", "warn", "error", "fatal", "panic"。(实际默认配置生产结果为空)
level = ""
uid = 0
# grpc socket 监听器配置
[grpc]
address = "/run/containerd/containerd.sock"
gid = 0
max_recv_message_size = 16777216
max_send_message_size = 16777216
tcp_address = ""
tcp_tls_ca = ""
tcp_tls_cert = ""
tcp_tls_key = ""
uid = 0
# 启用与配置健康指标监听器
[metrics]
# containerd支持暴露自己的指标,以/v1/metrics路径交付prometheus读取
# Metrics 端点默认不监听
address = ""
# 打开或关闭 gRPC 直方图指标
grpc_histogram = false
数据目录树展示
/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
/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
插件能力
link: https://github.com/containerd/containerd/blob/main/docs/PLUGINS.md
containerd
采取了智能客户端架构,即绝大部份非必要功能都可以由外部扩展功能以插件形式并入containerd
,而非从头编译。而containerd
保留了创建容器规范、镜像仓库交互、从tar包引入镜像的必要功能。
有两种方式引入插件,分别是插件二进制包存入containerd
的PATH
路径、通过containerd
代理其他grpc
服务。
基于上述特性,containerd
实现了v2 runtimes
,可以实现不同的容器使用不同的容器运行时;proxy plugins
,可以让containerd
链接本地代理服务的socket
,以得到本地服务的某些功能。
检查插件
containerd
内部也使用了插件的形式保证了功能解耦合、稳定,且与外部插件一般同等对待。
ctr plugins ls
可以查看到所有插件,这会展示出各类插件,对应id,当前平台,状态描述。以zfs aufs
插件为例,插件状态具体信息可以使用ctr plugins ls -d id==aufs id==zfs
查看,而此处是因为主机不支持。
$ ctr plugins ls
TYPE ID PLATFORMS STATUS
io.containerd.content.v1 content - ok
io.containerd.snapshotter.v1 btrfs linux/amd64 ok
io.containerd.snapshotter.v1 aufs linux/amd64 error
io.containerd.snapshotter.v1 native linux/amd64 ok
io.containerd.snapshotter.v1 overlayfs linux/amd64 ok
io.containerd.snapshotter.v1 zfs linux/amd64 error
io.containerd.metadata.v1 bolt - ok
io.containerd.differ.v1 walking linux/amd64 ok
io.containerd.gc.v1 scheduler - ok
io.containerd.service.v1 containers-service - ok
io.containerd.service.v1 content-service - ok
io.containerd.service.v1 diff-service - ok
io.containerd.service.v1 images-service - ok
io.containerd.service.v1 leases-service - ok
io.containerd.service.v1 namespaces-service - ok
io.containerd.service.v1 snapshots-service - ok
io.containerd.runtime.v1 linux linux/amd64 ok
io.containerd.runtime.v2 task linux/amd64 ok
io.containerd.monitor.v1 cgroups linux/amd64 ok
io.containerd.service.v1 tasks-service - ok
io.containerd.internal.v1 restart - ok
io.containerd.grpc.v1 containers - ok
io.containerd.grpc.v1 content - ok
io.containerd.grpc.v1 diff - ok
io.containerd.grpc.v1 events - ok
io.containerd.grpc.v1 healthcheck - ok
io.containerd.grpc.v1 images - ok
io.containerd.grpc.v1 leases - ok
io.containerd.grpc.v1 namespaces - ok
io.containerd.grpc.v1 snapshots - ok
io.containerd.grpc.v1 tasks - ok
io.containerd.grpc.v1 version - ok
io.containerd.grpc.v1 cri linux/amd64 ok
对于插件配置块,需要满足[plugins."<plugin type>.<plugin id>"]
形式(考虑v1基本废弃就不再描述),实例如下。
[plugins]
[plugins."io.containerd.monitor.v1.cgroups"]
no_prometheus = false
插件配置
link: https://github.com/containerd/containerd/blob/main/docs/man/containerd-config.toml.5.md
link: https://github.com/containerd/containerd/blob/main/docs/cri/config.md
link: https://pkg.go.dev/github.com/containerd/containerd/pkg/cri/config
# plugins 配置块包含已安装插件的配置。默认启用以下插件,对应配置如下。
# 默认情况下未启动的插件提供自己的配置文档。
[plugins]
# 调度程序高级调整
[plugins."io.containerd.gc.v1.scheduler"]
# 指定n次删除后触发GC,默认0(不触发)
deletion_threshold = 0
# 保证n次数据库变化后触发GC,默认100
mutation_threshold = 100
# GC调度最长时间,默认0.02
pause_threshold = 0.02
# 定义触发事件后延迟多久调度GC,默认0ms(立即调度GC)
schedule_delay = "0s"
# 定义启动后延迟多久调度GC,默认100ms
startup_delay = "100ms"
# 所有cri服务端配置
[plugins."io.containerd.grpc.v1.cri"]
# 扫描cdi规范文件的目录列表
cdi_spec_dirs = ["/etc/cdi", "/var/run/cdi"]
# 指定容器设备uid/gid的定义行为
## 开启后从Pod的SecurityContext获取指定uid/gid,否则使用宿主机的
device_ownership_from_security_context = false
# 关闭使用apparmor,建议当守护进程无权限使用apparmor时配置该项为开启
disable_apparmor = false
# 关闭使用cgroup,建议当守护进程无权限使用cgroup时开启
disable_cgroup = false
# 静默地禁用hugetlb controller,即使其存在于/sys/fs/cgroup/cgroup.controllers
## 有利于不使用hugetlb controller而运行rootless、systemd、cgroup v2
disable_hugetlb_controller = true
# 禁用Kubernets ProcMount支持,限制kubernetes<=1.11且使用containerd时启用
disable_proc_mount = false
# 是否禁用以TCP形式提供CRI服务
# 如果在[grpc]中配置`TCPAddress`将默认启动TCP服务
disable_tcp_service = true
# 设置执行init进程后等待ExecSync的IO流反馈最大超时时长,零值表示无超时
drain_exec_sync_io_timeout = "0s"
# 启用容器设备接口,参见https://tags.cncf.io/container-device-interface
enable_cdi = false
# 启动selinux支持
enable_selinux = false
# 开启tls模式
# 需要同时设置x509_key_pair_streaming,否则会产生自签证书
enable_tls_streaming = false
# 相关issue参加https://github.com/kubernetes/kubernetes/issues/102612
# 对所有没有使用主机网络、没有运行在用户命名空间,且没有被PodSandboxConfig覆盖配置的容器设置net.ipv4.ping_group_range="0 2147483647"
enable_unprivileged_icmp = false
# 对所有没有使用主机网络、且没有被PodSandboxConfig覆盖配置的容器设置net.ipv4.ip_unprivileged_port_start=0
enable_unprivileged_ports = false
# 忽略废弃告警
ignore_deprecation_warnings = []
# 忽略镜像定义的volume卷
# 使用 ReadOnlyRootFilesystem 时,可用于更好的资源隔离、安全性以及及早检测安装配置中的问题,因为容器不会静默安装临时卷。
ignore_image_defined_volumes = false
# 镜像拉取超时时长
image_pull_progress_timeout = "5m0s"
# 实验性配置,解包时强制同步文件系统以保证数据完整性
image_pull_with_sync_fs = false
# 限制下载镜像的并发数量
max_concurrent_downloads = 3
# 定义容器日志最大行数量,以字节bytes为单位
# 超长日志行将被切分多行
# -1 代表不限制
max_container_log_line_size = 16384
# 开启后网络命名空间所有挂载将放在`StateDir/netns`,而非硬编码目录`/var/run/nets`
# 更改设置会删除所有容器
netns_mounts_under_state_dir = false
# 将`OOMScoreAdj`的下限限制为`Containerd`的当前`OOMScoreAdj`
## 当contianerd无权减少OOMScoreAdj时很有用
restrict_oom_score_adj = false
# 指定沙箱容器镜像
sandbox_image = "registry.k8s.io/pause:3.8"
# 设置selinux分类上线。(0或不设置都会转化为selinux默认的1024)
selinux_category_range = 1024
# 快照统计信息收集周期(秒)
stats_collect_period = 10
# 流服务最大链接超时
stream_idle_timeout = "4h0m0s"
# 流服务监听地址
stream_server_address = "127.0.0.1"
# 流服务监听端口
stream_server_port = "0"
# 启动system cgroup支持
## 仅对runtime type "io.containerd.runtime.v1.linux"有效,v1废弃后该配置将被删除
systemd_cgroup = false
# 如果设置false且限制huge page(巨页)的cgroup控制器不存在
# 当创建或更新容器具有巨页控制时会报错
tolerate_missing_hugetlb_controller = true
# 如果pod/congtainert没有设置(或nil)通过CRI请求seccomp文件,则`containerd/cri`将使用此处定义的`seccomp_profile`
# 如果未设置则默认映射为`unconfined`
unset_seccomp_profile = ""
[plugins."io.containerd.grpc.v1.cri".cni]
# cni插件目录
bin_dir = "/opt/cni/bin"
# cni 配置文件目录
conf_dir = "/etc/cni/net.d"
# 用于生产cni配置的golang模板文件
## 如果设置会使用模板文件生产配置;否则等待服务器管理员或cni进程在conf_dir创建配置文件
conf_template = ""
# 指定为pod选择主ip地址的策略
## 默认ipv4,选择ipv4地址
## ipv4,选择ipv6地址
## cni,使用来自cni插件反馈的第一个地址
ip_pref = ""
# 设置从conf_dir中加载cni配置文件数量,默认1个
## 如果多个,则调整为对应梳理;如果为0,表示加载所有配置
max_conf_num = 1
# 当conf_dir存在多个配置文件,且max_conf_num大于1时,是否开启串行网络
setup_serially = false
[plugins."io.containerd.grpc.v1.cri".containerd]
# 默认使用的runtime
default_runtime_name = "runc"
# 禁止将镜像附加注解信息传递给快照程序(snapshotters)
## 而stargz快照程序需要该信息
disable_snapshot_annotations = true
# 用于GC程序将镜像layers层解包至快照后将其删除
discard_unpacked_layers = false
# 在未启用 blockio 支持时禁用与 blockio 相关的错误。默认情况下,如果尚未启用 blockio,尝试通过注释设置容器的 blockio 类会产生错误。 该配置选项实际上为 blockio 启用了“软”模式,其中这些错误将被忽略,容器不会获得 blockio 类。
ignore_blockio_not_enabled_errors = false
# 当 RDT 支持尚未启用时,ignore_rdt_not_enabled_errors 会禁用 RDT 相关错误。英特尔 RDT 是一项缓存和内存带宽管理技术。默认情况下,如果尚未启用 RDT,尝试通过注释设置容器的 RDT 类会产生错误。此配置选项实际上为 RDT 启用了“软”模式,其中这些错误将被忽略,并且容器不会获得 RDT 类。
ignore_rdt_not_enabled_errors = false
# 禁用pivot-root(仅限linux),当使用runc 在RamDisk 中运行容器时需要。
## 仅对runtime type "io.containerd.runtime.v1.linux"有效
no_pivot = false
# 在所有运行时使用的默认快照程序(如果没有被运行时的快照程序配置覆盖)。
snapshotter = "overlayfs"
[plugins."io.containerd.grpc.v1.cri".containerd.default_runtime]
# 带有 OCI 规范的 JSON 文件的文件路径,该规范将用作创建所有容器的基本规范。
## 使用`ctr oci spec > /etc/containerd/cri-base.json` 输出初始规范文件。
## 规范文件在启动时加载,因此必须在发生任何更改时重新启动 Containerd 守护进程以刷新默认规范。
## 仍在运行的容器和重新启动的容器仍将使用创建该容器的原始规范。
base_runtime_spec = ""
# cni conf目录
## 当使用不同的运行时时,这允许网络堆栈使用不同的 CNI 配置。
cni_conf_dir = ""
# 同max_conf_num
cni_max_conf_num = 0
# 传递到容器 OCI 配置的容器注释列表。
## CRI 中的容器注释通常由其他 Kubernetes 节点组件(即不是用户)生成。目前,只有设备插件会填充注释。
container_annotations = []
# 传递给 pod 沙箱以及容器 OCI 注释的 pod 注释列表。
pod_annotations = []
# 允许重载将主机设备传递到特权容器的默认行为。当使用运行时时,在特权情况下将主机设备传递到容器没有意义时,这非常有用。默认为 false
privileged_without_host_devices = false
# 启用privileged_without_host_devices 后,privileged_without_host_devices_all_devices_allowed 允许将所有设备列入白名单
## 在普通特权模式下,所有主机设备节点都会添加到容器的规范中,并且所有设备都会放入容器的设备白名单中。此标志用于修改privileged_without_host_devices选项,以便即使没有主机设备隐式添加到容器中,所有设备白名单仍然启用。需要启用privileged_without_host_devices
privileged_without_host_devices_all_devices_allowed = false
# 使用的容器运行时名称
## 仅对runtime type "io.containerd.runtime.v1.linux"有效
runtime_engine = ""
# 可用于覆盖 shim 运行时二进制文件的路径。
## 指定后,containerd 将在解析 shim 位置时忽略运行时名称字段。路径必须为绝对路径
runtime_path = ""
# containerd 用于运行时状态的目录。
## 仅对runtime type "io.containerd.runtime.v1.linux"有效
runtime_root = ""
# runtime_type 是在containerd中使用的运行时类型。从containerd 1.4开始,默认值为“io.containerd.runc.v2”。
runtime_type = ""
# 定义了调度 pod 时使用哪个沙箱运行时
## 此功能需要启用实验性 CRI 服务器(使用 ENABLE_CRI_SANDBOXES=1)
## shim - 意味着使用 shim 提供的任何控制器实现(例如使用 RemoteController)。
## podsandbox - 意味着使用 sbserver podsandbox 包中的控制器实现。
sandbox_mode = ""
# 同上一块的snapshotter
snapshotter = ""
[plugins."io.containerd.grpc.v1.cri".containerd.default_runtime.options]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
# 同上一块
base_runtime_spec = ""
cni_conf_dir = ""
cni_max_conf_num = 0
container_annotations = []
pod_annotations = []
privileged_without_host_devices = false
privileged_without_host_devices_all_devices_allowed = false
runtime_engine = ""
runtime_path = ""
runtime_root = ""
runtime_type = "io.containerd.runc.v2"
sandbox_mode = "podsandbox"
snapshotter = ""
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
# runc二进制程序的名称
BinaryName = ""
# criu镜像的路径
CriuImagePath = ""
# criu二进制路径
CriuPath = ""
# criu工作目录
CriuWorkPath = ""
# I/O GID
IoGid = 0
# I/O UID
IoUid = 0
# 禁用容器新密钥环
NoNewKeyring = false
# 创建容器时禁用PivotRoot
NoPivotRoot = false
# runc根目录
Root = ""
# 将shim放入cgroup
ShimCgroup = ""
# 启用systemd管理cgroup
SystemdCgroup = false
# 在其上运行不受信任的工作负载的运行时。
[plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime]
base_runtime_spec = ""
cni_conf_dir = ""
cni_max_conf_num = 0
container_annotations = []
pod_annotations = []
privileged_without_host_devices = false
privileged_without_host_devices_all_devices_allowed = false
runtime_engine = ""
runtime_path = ""
runtime_root = ""
runtime_type = ""
sandbox_mode = ""
snapshotter = ""
[plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime.options]
# 包含与处理加密容器映像解密相关的配置
[plugins."io.containerd.grpc.v1.cri".image_decryption]
key_model = "node"
# 镜像、镜像仓库相关
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = ""
[plugins."io.containerd.grpc.v1.cri".registry.auths]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.headers]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
# 配置tls证书
[plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]
tls_cert_file = ""
tls_key_file = ""
[plugins."io.containerd.internal.v1.opt"]
path = "/opt/containerd"
[plugins."io.containerd.internal.v1.restart"]
interval = "10s"
[plugins."io.containerd.internal.v1.tracing"]
sampling_ratio = 1.0
service_name = "containerd"
[plugins."io.containerd.metadata.v1.bolt"]
content_sharing_policy = "shared"
[plugins."io.containerd.monitor.v1.cgroups"]
no_prometheus = false
[plugins."io.containerd.nri.v1.nri"]
disable = true
disable_connections = false
plugin_config_path = "/etc/nri/conf.d"
plugin_path = "/opt/nri/plugins"
plugin_registration_timeout = "5s"
plugin_request_timeout = "2s"
socket_path = "/var/run/nri/nri.sock"
[plugins."io.containerd.runtime.v1.linux"]
no_shim = false
runtime = "runc"
runtime_root = ""
shim = "containerd-shim"
shim_debug = false
[plugins."io.containerd.runtime.v2.task"]
platforms = ["linux/amd64"]
sched_core = false
[plugins."io.containerd.service.v1.diff-service"]
default = ["walking"]
[plugins."io.containerd.service.v1.tasks-service"]
blockio_config_file = ""
rdt_config_file = ""
[plugins."io.containerd.snapshotter.v1.aufs"]
root_path = ""
[plugins."io.containerd.snapshotter.v1.blockfile"]
fs_type = ""
mount_options = []
root_path = ""
scratch_file = ""
[plugins."io.containerd.snapshotter.v1.btrfs"]
root_path = ""
[plugins."io.containerd.snapshotter.v1.devmapper"]
async_remove = false
base_image_size = ""
discard_blocks = false
fs_options = ""
fs_type = ""
pool_name = ""
root_path = ""
[plugins."io.containerd.snapshotter.v1.native"]
root_path = ""
[plugins."io.containerd.snapshotter.v1.overlayfs"]
mount_options = []
root_path = ""
sync_remove = false
upperdir_label = false
[plugins."io.containerd.snapshotter.v1.zfs"]
root_path = ""
[plugins."io.containerd.tracing.processor.v1.otlp"]
endpoint = ""
insecure = false
protocol = ""
[plugins."io.containerd.transfer.v1.local"]
config_path = ""
max_concurrent_downloads = 3
max_concurrent_uploaded_layers = 3
[[plugins."io.containerd.transfer.v1.local".unpack_config]]
differ = ""
platform = "linux/amd64"
snapshotter = "overlayfs"
[proxy_plugins]
[stream_processors]
[stream_processors."io.containerd.ocicrypt.decoder.v1.tar"]
accepts = ["application/vnd.oci.image.layer.v1.tar+encrypted"]
args = ["--decryption-keys-path", "/etc/containerd/ocicrypt/keys"]
env = ["OCICRYPT_KEYPROVIDER_CONFIG=/etc/containerd/ocicrypt/ocicrypt_keyprovider.conf"]
path = "ctd-decoder"
returns = "application/vnd.oci.image.layer.v1.tar"
[stream_processors."io.containerd.ocicrypt.decoder.v1.tar.gzip"]
accepts = ["application/vnd.oci.image.layer.v1.tar+gzip+encrypted"]
args = ["--decryption-keys-path", "/etc/containerd/ocicrypt/keys"]
env = ["OCICRYPT_KEYPROVIDER_CONFIG=/etc/containerd/ocicrypt/ocicrypt_keyprovider.conf"]
path = "ctd-decoder"
returns = "application/vnd.oci.image.layer.v1.tar+gzip"
[timeouts]
"io.containerd.timeout.bolt.open" = "0s"
"io.containerd.timeout.metrics.shimstats" = "2s"
"io.containerd.timeout.shim.cleanup" = "5s"
"io.containerd.timeout.shim.load" = "5s"
"io.containerd.timeout.shim.shutdown" = "3s"
"io.containerd.timeout.task.state" = "2s"
# ttrpc 配置
[ttrpc]
address = ""
gid = 0
uid = 0
标签:ok,Containerd,基础,v1,io,plugins,runtime,containerd
From: https://www.cnblogs.com/yulinor/p/18263136