Debian 12安装containerd

Source

Debian 12 上安装 containerd(容器运行时)是部署 Kubernetes 或独立容器环境的关键步骤。以下是详细的操作指南:


1. 安装 containerd

方法一:通过 apt 安装(推荐)
# 更新系统包索引
sudo apt-get update

# 安装必要的依赖
sudo apt-get install -y curl gnupg2 software-properties-common

# 添加 containerd 官方仓库
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新并安装 containerd
sudo apt-get update
sudo apt-get install -y containerd.io
方法二:手动安装二进制文件

适用于离线环境或需要指定版本:

# 下载 containerd 二进制文件(以最新版本为例)
wget https://github.com/containerd/containerd/releases/download/v1.6.22/containerd-1.6.22-linux-amd64.tar.gz

# 解压并部署到系统路径
sudo tar Cxzxf /usr/local containerd-1.6.22-linux-amd64.tar.gz

# 安装 runc(containerd 依赖)
wget https://github.com/opencontainers/runc/releases/download/v1.1.11/runc.amd64
sudo install -m 755 runc.amd64 /usr/local/sbin/runc

# 安装 CNI 插件(可选,容器网络依赖)
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
sudo mkdir -p /opt/cni/bin
sudo tar Cxzxf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz

2. 配置 containerd

生成默认配置文件
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
修改关键配置
  • 使用 systemd 驱动(Kubernetes 推荐):
    sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
    
  • 设置镜像加速器(国内用户建议配置):
    sudo nano /etc/containerd/config.toml
    
    plugins."io.containerd.grpc.v1.cri".registry.mirrors 部分添加:
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://<your-mirror-url>"]  # 替换为阿里云、华为云等加速地址
    
重启 containerd 服务
sudo systemctl restart containerd

3. 验证安装

# 检查服务状态
sudo systemctl status containerd

# 查看 containerd 版本
containerd --version  # 输出应类似: containerd github.com/containerd/containerd v1.6.22 ...

# 测试运行一个容器(需配合 CRI CLI 工具如 'crictl')
sudo ctr images pull docker.io/library/ubuntu:latest
sudo ctr run docker.io/library/ubuntu:latest demo --rm bash -c "echo 'Hello from containerd'"

4. 配置开机启动

sudo systemctl enable containerd

5. 可选:安装 CRI CLI 工具(crictl)

用于管理容器和镜像(调试时常用):

# 下载 crictl
VERSION="v1.24.0"  # 根据需要替换版本
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.24.0/crictl-v1.24.0-linux-amd64.tar.gz

# 解压并部署
sudo tar zxpf crictl-v1.24.0-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-v1.24.0-linux-amd64.tar.gz

# 配置 crictl
echo 'runtime-endpoint: unix:///run/containerd/containerd.sock' | sudo tee /etc/crictl.yaml

6. 常见问题排查

问题1:containerd 启动失败
  • 原因:配置文件语法错误或与其他容器运行时(如 Docker)冲突。
  • 解决
    # 检查日志
    journalctl -u containerd -n 100
    
    # 若冲突,停止并禁用 Docker
    sudo systemctl stop docker
    sudo systemctl disable docker
    
问题2:无法拉取镜像
  • 原因:未配置镜像加速器或网络问题。
  • 解决
    # 确保配置文件中的 registry 配置正确
    sudo nano /etc/containerd/config.toml
    
    # 重启 containerd
    sudo systemctl restart containerd
    
问题3:cgroup 驱动不一致(Kubernetes 场景)
  • 现象:Kubernetes 节点报错 failed to create the containerd task: invalid argument
  • 解决
    # 确保 containerd 和 kubelet 使用相同 cgroup 驱动(systemd 或 cgroupfs)
    sudo systemctl edit containerd
    
    添加以下内容:
    [Service]
    Environment="GOMAXPROCS=$(nproc)" "containerd_config_override_cgroup_driver=systemd"
    

7. 与 Docker 的关系

  • containerd 是 Docker 的底层运行时:Docker 通过 containerd 管理容器生命周期。
  • 直接使用 containerd
    • 更轻量(无需 Docker Engine)。
    • Kubernetes 推荐使用 containerd 作为 CRI(容器运行时接口)。
  • 卸载 Docker(可选)
    sudo apt-get purge -y docker docker-engine docker.io containerd runc
    

8. 生产环境配置建议

  • 存储驱动
    • 默认使用 overlay2(需文件系统支持,如 ext4)。
    • 高性能场景可配置 btrfszfs(需专用磁盘分区)。
  • 日志级别
    sudo nano /etc/containerd/config.toml
    
    修改 log_level = "info"log_level = "debug" 以启用调试日志。
  • 多租户隔离
    使用 containerd-shim 和命名空间(Namespace)实现容器隔离。

9. 适用场景

场景 推荐配置
个人开发/测试环境 使用默认配置即可;搭配 nerdctl 体验容器管理(无需 Docker CLI)
Kubernetes 生产集群 启用 systemd 驱动,配置镜像加速器,关闭 Swap 分区
边缘设备(ARM 架构) 下载 containerd-xxx-linux-arm64.tar.gz 并手动安装
企业私有云 配置私有镜像仓库和安全策略(如 TLS 认证、SELinux/AppArmor)

10. 参考资料

如果需要进一步集成 Kubernetes 或配置高级功能(如 GPU 支持),请告诉我具体需求,我会提供针对性方案!