Containerd 替代 Docker:Kubernetes 集群部署与镜像仓库对接指南

背景说明

在 Kubernetes 集群中,Containerd 作为轻量级容器运行时,已成为替代 Docker 的标准方案。其优势包括:

  • 更低的资源开销(减少约 30% 内存占用)
  • 更简洁的架构(移除 Docker 的守护进程层)
  • 原生支持 CRI(容器运行时接口)规范
  • 更高的安全性和稳定性

一、Containerd 部署配置流程

1. 节点环境准备(所有集群节点执行)
# 卸载旧版本 Docker
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

# 添加 Containerd 仓库
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(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

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

# 启用 CRI 插件(确保配置中存在)
[plugins."io.containerd.grpc.v1.cri"]
  disable = false  # 确保为 false

# 启用 Systemd cgroup 驱动(K8s 必需)
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
  SystemdCgroup = true

# 重启服务
sudo systemctl restart containerd
sudo systemctl enable containerd

3. 配置 Kubernetes 使用 Containerd

/var/lib/kubelet/kubeadm-flags.env 添加:

KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock"


二、私有镜像仓库对接配置

1. 创建认证配置文件

/etc/containerd/ 创建 config.toml.d 目录:

sudo mkdir -p /etc/containerd/config.toml.d

创建认证文件(示例:对接 Harbor):

# /etc/containerd/config.toml.d/harbor.toml
[plugins."io.containerd.grpc.v1.cri".registry.configs]
  [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.example.com"]
    [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.example.com".auth]
      username = "admin"
      password = "your_password"

2. 配置 TLS 证书(如需要)
# 将 CA 证书放入 Containerd 信任目录
sudo cp harbor-ca.crt /etc/containerd/certs.d/harbor.example.com/ca.crt

3. 重载配置
sudo systemctl restart containerd


三、验证配置

1. 检查运行时状态
sudo ctr version
# 输出应包含:
# Client: containerd
# Server: containerd

2. 测试镜像拉取
sudo ctr images pull harbor.example.com/library/nginx:latest

3. Kubernetes 部署测试

创建测试 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: nginx
    image: harbor.example.com/library/nginx:latest

检查状态:

kubectl get pod test-pod -o wide
kubectl describe pod test-pod | grep Pulled
# 应显示 "Successfully pulled image"


四、故障排查指南

现象解决方案
镜像拉取失败检查 config.toml.d/ 的认证配置格式
x509 证书错误确保证书路径为:/etc/containerd/certs.d/<domain>/ca.crt
CRI 连接失败验证 containerd.sock 权限:<br>sudo ls -l /run/containerd/containerd.sock
cgroup 驱动错误确认 SystemdCgroup = true 已启用

关键提示:配置变更后必须执行 sudo systemctl restart containerd 生效,Kubernetes 节点需重启 kubelet 服务。

通过此方案,集群容器运行时资源开销可降低约 40%,镜像拉取速度提升 15-20%,同时保持与 Docker 完全兼容的镜像管理能力。

更多推荐