Containerd 替代 Docker:K8s 集群中 containerd 的部署配置与镜像仓库对接流程
·
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 完全兼容的镜像管理能力。
更多推荐
所有评论(0)