Containerd
Containerd 是一个基于 Go 语言编写的开源容器运行时,是 Docker 项目的核心组件之一,也是 Kubernetes 等容器编排工具的基础组件之一。
其原理是在操作系统内核中创建隔离的 Linux 容器,每个容器拥有自己的文件系统、网络和进程空间,从而实现轻量级的虚拟化,实现多个应用程序在同一个操作系统实例上运行的目的。
Containerd 架构图
Containerd 的架构包括以下组件:
Shim
: 用于容器生命周期的管理。它作为容器和容器运行时之间的代理,负责在容器启动、停止等生命周期事件发生时与容器运行时进行交互。Runtime
: 实际运行容器的组件。常见的运行时包括 runc 和 crun 等。Snapshotter
: 管理容器文件系统快照的组件。常见的快照器包括 overlayfs 和 zfs 等。Content Store
: 管理容器镜像和元数据的组件。可以将容器镜像存储在本地或远程存储库中。Registry
: 用于管理容器镜像的存储、分发和检索。可以通过配置不同的 Registry,实现从不同的容器镜像仓库中拉取容器镜像。
部署 Containerd 的前置条件
- 操作系统:Linux(x86_64或ARM64)
- 内核版本:4.14或更高版本
- 容器运行时:Docker或CRI-O
- 数据库:etcd(可选)
步骤如下:
1.下载并安装containerd二进制文件 从containerd的官方Github仓库(https://github.com/containerd/containerd/releases)下载最新版本的二进制文件。
$ wget https://github.com/containerd/containerd/releases/download/v1.5.5/containerd-1.5.5-linux-amd64.tar.gz
$ tar -xvf containerd-1.5.5-linux-amd64.tar.gz
$ sudo cp bin/* /usr/local/bin/
2.创建并编辑containerd的配置文件
$ sudo mkdir -p /etc/containerd/
$ sudo nano /etc/containerd/config.toml
在配置文件中,可以设置containerd的监听地址、数据库配置、镜像存储位置等。以下是一个示例配置文件:
[plugins]
[plugins.io.containerd.grpc.v1.cri]
sandbox_image = k8s.gcr.io/pause:3.2
[debug]
level = debug
[grpc]
address = /run/containerd/containerd.sock
[metrics]
address = 127.0.0.1:1338
[proxy_plugins]
[plugins.io.containerd.grpc.v1.cri.cni]
bin_dir = /opt/cni/bin
conf_dir = /etc/cni/net.d
max_conf_num = 4
conf_template =
[plugins.io.containerd.grpc.v1.cri.registry]
[plugins.io.containerd.grpc.v1.cri.registry.mirrors]
[plugins.io.containerd.grpc.v1.cri.registry.mirrors.docker.io]
endpoint = [https://registry-1.docker.io]
[plugins.io.containerd.grpc.v1.cri.registry.mirrors.docker.io].skip_verify = true
[plugins.io.containerd.grpc.v1.cri.containerd]
snapshotter = overlayfs
[plugins.io.containerd.grpc.v1.cri.containerd.default_runtime_name]
runtime_type = io.containerd.runtime.v1.linux
runtime_engine = /usr/local/bin/runc
[plugins.io.containerd.grpc.v1.cri.containerd.untrusted_workload_runtime]
runtime_type = io.containerd.runtime.v1.linux
runtime_engine = /usr/local/bin/runsc
创建并编辑containerd的systemd服务文件
$ sudo nano /etc/systemd/system/containerd.service
在服务文件中,可以设置containerd的启动参数和依赖项。以下是一个示例服务文件:
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target
[Service]
ExecStartPre=/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Restart=always
RestartSec=5
Delegate=yes