首页 > 其他分享 >Containerd-基础

Containerd-基础

时间:2024-06-23 18:54:23浏览次数:3  
标签:ok Containerd 基础 v1 io plugins runtime containerd

本文致力于学习并梳理Containerd,信息来源均参考至官方Github,原文链接如下补充。

开始使用

link: https://github.com/containerd/containerd/blob/main/docs/getting-started.md
仅梳理Linux二进制安装,其他信息并未梳理。

依赖与限制

独立使用containerd依赖于runcCNI plugins,可采用cri-containerd-cni-1.7.16-linux-amd64.tar.gz完整包安装,或拆分后各自安装。containerd是为基于glibcLinux发行版动态构建的,所以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而言会导致现有容器异常。设置KillModeprocess可确保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包引入镜像的必要功能。

有两种方式引入插件,分别是插件二进制包存入containerdPATH路径、通过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

相关文章

  • Containerd-cri常用功能
    本文致力于学习并梳理Containerd,信息来源均参考至官方Github,原文链接如下补充。cri工作架构link:https://github.com/containerd/containerd/blob/main/docs/cri/architecture.mdKubelet通过CRI运行时服务API调用cri插件来创建pod;cri创建pod的网络命名空间......
  • CAN总线基础(2)--数据帧深层解析
    (一)五种基本的帧类型作用以及介绍数据帧: 是用于传输数据的基本单元。它包含一个帧头、标识符、控制位、数据长度和数据等字段。遥控帧: 是一种特殊的CAN数据帧,用于向其他节点发送命令或请求。错误帧: 是指在CAN总线上出现了错误,例如误码、冲突等,无法正确接收的数据帧。......
  • JAVA类与对象的基础概念(JAVA基础)
    类的定义1.定义:类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象2.属性:用于定义该类或该类对象包含的数据或者说静态特征3.初始化∶定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化4.方法:用于定义该类或该类实例的行为特征和功能实现......
  • [Java基础]String
    String常量池/运行时常量池java类编译之后生成的.class文件包含三部分信息,类的基本信息,常量池,方法的定义通过javap-vxxxx.class命令可以看到Constantpool:#1=Methodref#2.#3//java/lang/Object."<init>":()V#2=Class#4......
  • Containerd命令行工具nerdctl
    Containerd客户端工具nerdctl相比Containerd自带的ctr工具,nerdctl操作方式更接近之前的docker命令。nerdctl是一个与dockercli风格兼容的containerd客户端工具,而且直接兼容dockercompose的语法的。仓库:https://github.com/containerd/nerdctl1.安装二进制文件下载路......
  • MySQL基础
    目录✍数据库的基本概念✍DDL操作数据库和数据表......
  • LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理
    LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理LLM技术图谱(LLMTechMap)是将LLM相关技术进行系统化和图形化的呈现,此图谱主要特点是“专注于技术人视角”,不求从LLM产业角度汇聚信息,而是希望让从事相关工作或是想了解LLM的技术人有一个快速......
  • Java基础面试题下
    #Java基础面试题(下)>lecture:波哥#一、String相关面试题##1.为什么String在java中是不可变的?-如果不是不可变的:这种情况根本不可能,因为在字符串池的情况下,一个字符串对象/文字,例如“Test”已被许多参考变量引用,因此如果其中任何一个更改了值,其他参数将自动受到影......
  • Python进阶学习笔记-基础篇
    打印原始字符串print(r"D:\three\two\one\now")D:\three\two\one\now复现随机数importrandomx=random.getstate()print(random.randint(1,10))print(random.randint(1,10))print(random.randint(1,10))random.setstate(x)print(random.randint(1,10))pr......
  • [Golang基础]Goroutine
    协程(CoRoutine)是一种轻量级的用户态线程。简单来说,线程(thread)的调度是由操作系统负责,线程的睡眠、等待、唤醒的时机是由操作系统控制,开发者无法决定。使用协程,开发者可以自行控制程序切换的时机,可以在一个函数执行到一半的时候中断执行,让出CPU,在需要的时候再回到中断点继续执行。......