阶段四:容器化技术之Containerd运行时

Containerd 简介

定义:Containerd 是一个行业标准的容器运行时,由 CNCF 托管,提供容器的完整生命周期管理。

定位:作为中间层,屏蔽容器运行的复杂性,上承 Kubernetes/Docker,下接 runc 等底层运行时。

特点

Containerd 架构

核心组件说明

1. containerd:核心守护进程,提供 gRPC API,对接上层系统 2. containerd-shim:每个容器对应一个 shim 进程,保持容器与 containerd 进程解耦 3. runc:实际执行容器创建与运行的 OCI runtime 4. ctr:官方 CLI 工具,主要用于调试和实验 5. containerd-plugins:提供存储(snapshotter)、镜像管理(content store)、网络等扩展功能

工作流程分层

image

设计优势

Containerd 与Docker关系

Docker 与 Containerd

Containerd 与 Docker 对比

<sheet sheet-id="sWylBL" token="VROjsKHRah4LlqtDc74caRNhn9g"></sheet>

Kubernetes 与 Containerd

Containerd 安装与使用

在 CentOS Stream 9 上安装

# 安装依赖
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2

# 启用 docker-ce 源(包含 containerd 软件包)
sudo dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 containerd
sudo dnf install -y containerd.io

# 生成默认配置文件
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

# 设置 systemd cgroup 驱动(建议在 K8s 中使用)
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 新增镜像源
sed -i 's/config_path = ""/config_path = "\/etc\/containerd\/certs.d\/"/g' /etc/containerd/config.toml
mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml << 'EOF'
server = "https://docker.io" # 源镜像地址

[host."https://docker.m.daocloud.io"] # 道客-镜像加速地址
  capabilities = ["pull","resolve"]

[host."https://dockerproxy.com"] # 镜像加速地址
  capabilities = ["pull", "resolve"]

[host."https://docker.mirrors.sjtug.sjtu.edu.cn"] # 上海交大-镜像加速地址
  capabilities = ["pull","resolve"]

[host."https://docker.mirrors.ustc.edu.cn"] # 中科大-镜像加速地址
  capabilities = ["pull","resolve"]

[host."https://docker.nju.edu.cn"] # 南京大学-镜像加速地址
  capabilities = ["pull","resolve"]

[host."https://registry.docker-cn.com"]
  capabilities = ["pull","resolve","push"]

[host."https://cf-workers-docker-io-38g.pages.dev"]
  capabilities = ["pull","resolve","push"]
EOF

# 重启生效
systemctl enable containerd
systemctl start containerd

# 验证测试
systemctl status containerd

注意事项:

配置(常见优化)

基本命令(ctr)

# 拉取镜像
ctr images pull --all-platforms registry.openanolis.cn/openanolis/nginx:1.14.1-8.6

# 查看镜像
ctr images list

#查看镜像简洁输出
ctr images ls -q  

# 运行容器
ctr run -d  registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 mynginx

#共享主机网络
ctr run -d --net-host  registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 mynginx

# 查看容器
ctr containers list

# 进入容器命令行
ctr tasks exec --tty --exec-id mybash mynginx /bin/bash

# 删除容器
ctr tasks kill mynginx
ctr containers rm mynginx

注意事项:

nerdctl软件的安装和使用

#下载软件包
wget https://github.com/containerd/nerdctl/releases/download/v2.1.3/nerdctl-2.1.3-linux-amd64.tar.gz

#解压缩
tar -xv -f nerdctl-2.1.3-linux-amd64.tar.gz -C /usr/local/bin

nerdctl --version 

命令作用:

执行结果:

关键参数:

参数说明
https://github.com/containerd/nerdctl/releases/download/v2.1.3/nerdctl-2.1.3-linux-amd64.tar.gz普通目标 URL https://github.com/containerd/nerdctl/releases/download/v2.1.3/nerdctl-2.1.3-linux-amd64.tar.gz,命令会访问这个地址或从这里下载内容。
-f必看-f 的含义取决于当前命令,常见作用是指定文件或强制执行。

注意事项: