从零到一:Containerd的两种部署路径详解
2026/5/16 13:54:34 网站建设 项目流程

1. 为什么选择Containerd?

作为容器生态中的核心组件,Containerd正在成为越来越多生产环境的首选运行时。相比完整的Docker引擎,它剥离了非必要的API和CLI工具,专注于核心的容器生命周期管理功能。实测下来,内存占用能减少40%以上,这对于需要部署大规模容器集群的场景尤为重要。

我在Kubernetes生产环境中使用Containerd已有两年多时间,最直观的感受就是稳定性和性能的提升。特别是在高密度容器部署时,不会出现传统方案常见的资源争抢问题。不过对于刚接触容器技术的新手,可能会困惑于它与Docker的关系——你可以把Containerd理解为Docker的"发动机",而Docker是在此基础上封装了更友好的用户界面。

2. YUM安装:最适合新手的快速通道

2.1 配置可靠的软件源

在CentOS 7上通过YUM安装是最省心的方式。我习惯使用阿里云的镜像源,速度比官方源快很多。先清理可能存在的旧版本:

sudo yum remove -y docker* containerd*

然后获取阿里云的最新源配置:

sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

这里有个小技巧:执行yum makecache可以加速后续的元数据获取。曾经有次在海外服务器安装时,这个操作让整体安装时间从15分钟缩短到2分钟。

2.2 安装与基础配置

执行安装只需要一条命令:

sudo yum install -y containerd.io

安装完成后,建议立即做三件事:

  1. 启动服务并设置开机自启
  2. 检查运行状态
  3. 验证基础功能

对应的命令序列如下:

sudo systemctl enable --now containerd sudo systemctl status containerd ctr version

如果看到客户端和服务端的版本信息,说明基础环境已经就绪。这里容易踩的坑是SELinux的冲突,如果遇到权限问题,可以临时执行setenforce 0测试是否是SELinux导致。

3. 二进制安装:灵活定制的进阶方案

3.1 准备安装包

当需要特定版本或自定义编译选项时,二进制安装是更好的选择。目前官方提供两种包:

  • containerd-xxx:基础运行时
  • cri-containerd-cni-xxx:包含CNI网络插件和Kubernetes所需组件

我建议下载后者,即使暂时不需要Kubernetes支持:

wget https://github.com/containerd/containerd/releases/download/v1.6.12/cri-containerd-cni-1.6.12-linux-amd64.tar.gz

3.2 解压与部署

解压后你会看到三个关键目录:

  • usr/local/bin:包含所有可执行文件
  • etc/systemd/system:服务管理配置
  • opt/cni/bin:网络插件

部署时需要特别注意文件权限。我习惯先创建目标目录:

sudo mkdir -p /usr/local/bin /opt/cni/bin

然后复制文件并设置权限:

sudo tar Cxzvf / cri-containerd-cni-1.6.12-linux-amd64.tar.gz sudo chmod +x /usr/local/bin/* /opt/cni/bin/*

3.3 服务配置的艺术

二进制安装最大的不同在于需要手动配置服务。解压包中的containerd.service文件可以直接使用:

sudo cp etc/systemd/system/containerd.service /usr/lib/systemd/system/

但更推荐的做法是根据实际需求调整服务参数。比如在生产环境中,我通常会修改这些配置:

  • 增加LimitNOFILE=infinity避免文件描述符限制
  • 设置明确的日志级别--log-level info
  • 指定root目录到更大的磁盘分区

4. 关键配置调优指南

4.1 生成基础配置

无论哪种安装方式,都需要配置/etc/containerd/config.toml。可以用内置命令生成模板:

sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml

4.2 镜像加速实战

国内用户必须配置镜像加速。这是我验证过的可靠配置片段:

[plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = [ "https://registry-1.docker.io", "https://mirror.ccs.tencentyun.com" ] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"] endpoint = ["https://registry.aliyuncs.com/google_containers"]

4.3 存储与网络优化

对于生产环境,这两个配置项需要特别注意:

[plugins."io.containerd.grpc.v1.cri".containerd] snapshotter = "overlayfs" disable_snapshot_annotations = true [plugins."io.containerd.grpc.v1.cri".cni] bin_dir = "/opt/cni/bin" conf_dir = "/etc/cni/net.d"

如果使用SSD存储,可以启用discard选项减少空间占用:

[plugins."io.containerd.internal.v1.opt"] path = "/opt/containerd" [plugins."io.containerd.internal.v1.opt".mount_options] discard = "true"

5. 验证与排错技巧

5.1 基础功能检查

安装完成后,建议运行这些验证命令:

# 检查服务状态 sudo systemctl status containerd # 测试容器运行 sudo ctr images pull docker.io/library/hello-world:latest sudo ctr run --rm docker.io/library/hello-world:latest test

5.2 常见问题解决

问题1:容器启动报"failed to create shim task"错误

  • 解决方案:检查runC版本是否匹配,建议使用runc -v验证

问题2:镜像拉取超时

  • 解决方案:确认镜像加速配置正确,可以用ctr images pull --plain-http测试

问题3:容器网络不可用

  • 解决方案:检查CNI插件是否就位,/opt/cni/bin目录应有如下文件:
    • bridge
    • host-local
    • loopback

在Kubernetes环境中部署时,还需要特别注意kubelet的配置参数--container-runtime=remote--container-runtime-endpoint=unix:///run/containerd/containerd.sock。曾经有个集群性能问题排查了三天,最后发现是这个参数配置错误导致的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询