简介:本文详细阐述如何配置 containerd 镜像仓库,涵盖基础配置、镜像拉取与推送、安全加固及高级功能实现,为开发者提供从入门到精通的完整指导。
在 Kubernetes 和容器化部署场景中,containerd 作为轻量级容器运行时,其镜像仓库配置直接影响镜像拉取效率、安全性和运维成本。合理配置镜像仓库可解决以下问题:
containerd 的核心配置文件位于 /etc/containerd/config.toml,修改前需停止服务:
sudo systemctl stop containerd
[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://<your-registry-mirror>.mirror.aliyuncs.com"]
<your-registry-mirror> 为实际镜像加速器地址
[plugins."io.containerd.grpc.v1.cri".registry.configs."my-private-registry.com".auth]username = "your-username"password = "your-password"# 或使用 token 认证# auth = "Bearer <your-token>"
[plugins."io.containerd.grpc.v1.cri".registry][plugins."io.containerd.grpc.v1.cri".registry.configs][plugins."io.containerd.grpc.v1.cri".registry.configs."primary-registry.com"][plugins."io.containerd.grpc.v1.cri".registry.configs."primary-registry.com".tls]insecure_skip_verify = false[plugins."io.containerd.grpc.v1.cri".registry.configs."fallback-registry.com"][plugins."io.containerd.grpc.v1.cri".registry.configs."fallback-registry.com".tls]insecure_skip_verify = true
registry.mirrors 配置拉取顺序insecure_skip_verify 临时跳过证书验证(生产环境慎用)
[plugins."io.containerd.snapshotter.v1.overlayfs"]root_path = "/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs"[plugins."io.containerd.content.v1.content"]root_path = "/var/lib/containerd/io.containerd.content.v1.content"# 配置镜像保留策略[plugins."io.containerd.content.v1.content".gc]default_filter = "time_since_last_used>86400" # 24小时未使用则清理
/var/lib/containerd 磁盘使用情况
sudo systemctl daemon-reloadsudo systemctl restart containerd
# 使用 crictl 测试(需安装 cri-tools)crictl pull my-private-registry.com/nginx:latest# 或直接使用 ctrsudo ctr images pull my-private-registry.com/nginx:latest
Done 而非错误信息ctr images ls 验证镜像是否在本地证书管理:
cert-manager 自动管理证书访问控制:
[plugins."io.containerd.grpc.v1.cri".registry.configs."secure-registry.com".auth]username = "${REGISTRY_USER}" # 从环境变量读取password = "${REGISTRY_PASS}"
镜像签名验证:
[plugins."io.containerd.grpc.v1.cri".registry.configs."signed-registry.com".tls]ca_file = "/etc/containerd/registry-ca.crt"
现象:x509: certificate signed by unknown authority
解决:
# 将私有仓库CA证书添加到系统信任链sudo cp registry-ca.crt /usr/local/share/ca-certificates/sudo update-ca-certificates
优化方案:
ctr 超时设置:
[plugins."io.containerd.grpc.v1.cri"]stream_server_address = "0.0.0.0"stream_idle_timeout = "4h0m0s"max_recv_message_size = 16777216max_send_message_size = 16777216
通过配置 skopeo + cron 实现镜像自动同步:
#!/bin/bash# 同步 docker.io/nginx:latest 到私有仓库skopeo copy \docker://docker.io/nginx:latest \docker://my-private-registry.com/nginx:latest \--dest-tls-verify=false \ # 测试环境使用,生产应配置证书--dest-cred=user:pass
watchtower 自动更新同步任务| 参数 | 推荐值 | 作用 |
|---|---|---|
max_container_log_line_size |
16KB | 控制日志行大小 |
disable_proc_mount |
false | 启用 /proc 挂载(安全敏感场景设为 true) |
enable_tls_streaming |
true | 启用加密流传输 |
max_concurrent_downloads |
3 | 并行下载数(根据带宽调整) |
关键指标:
containerd_image_pulls_totalcontainerd_image_pull_duration_secondscontainerd_disk_usage_bytes日志收集:
# 查看 containerd 日志journalctl -u containerd -f# 或配置 rsyslog 转发到 ELK
| containerd 版本 | 推荐配置方式 | 注意事项 |
|---|---|---|
| 1.6+ | 使用 config.toml | 支持镜像签名验证 |
| 1.4-1.5 | 混合配置 | 需手动转换旧版配置 |
| <1.4 | 不推荐 | 缺少关键安全功能 |
最佳实践:
通过以上配置,您可构建一个高效、安全、可维护的 containerd 镜像仓库体系。实际部署时建议先在测试环境验证,再逐步推广到生产环境。