配置containerd镜像仓库完全攻略

配置containerd镜像仓库完全攻略

一、containerd镜像仓库基础配置

containerd作为Kubernetes默认的容器运行时,其镜像仓库配置直接影响容器拉取效率。核心配置文件位于/etc/containerd/config.toml,通过containerd config default生成默认模板后,需重点修改[plugins."io.containerd.grpc.v1.cri".registry]段落。

1.1 镜像仓库地址配置

registry.mirrors节点下添加仓库配置,例如配置阿里云镜像仓库:

  1. [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  2. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.cn-hangzhou.aliyuncs.com"]
  3. endpoint = ["https://registry.cn-hangzhou.aliyuncs.com"]

支持多端点配置实现负载均衡,建议将国内常用仓库(如阿里云、华为云)放在优先位置。

1.2 私有仓库认证配置

对于需要认证的私有仓库,需在registry.configs节点配置认证信息:

  1. [plugins."io.containerd.grpc.v1.cri".registry.configs."my-private-registry.com".auth]
  2. username = "admin"
  3. password = "encrypted-password"
  4. auth = "" # 可选,Base64编码的"username:password"
  5. identitytoken = "" # 用于OAuth2等令牌认证

建议使用ctr images pull --user username:password临时测试认证,确认无误后再写入配置文件。

二、镜像加速与优化配置

2.1 镜像缓存配置

通过registry.configstlsproxy配置实现镜像缓存:

  1. [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.example.com".tls]
  2. insecure_skip_verify = true # 测试环境使用,生产环境应配置正确证书
  3. [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.example.com".proxy]
  4. remote_url = "http://cache-server:5000"

实际生产中建议部署Nexus或Harbor作为私有镜像仓库,通过endpoint指向本地缓存服务器。

2.2 镜像拉取并行优化

[plugins."io.containerd.grpc.v1.cri"]节点下配置:

  1. max_concurrent_downloads = 5 # 默认3,根据网络带宽调整
  2. disable_pull_on_run = false # 确保启动时自动拉取镜像

通过ctr content fetch --parallel 5 image:tag测试并行下载效果,典型优化后拉取速度可提升40%。

三、安全配置最佳实践

3.1 TLS证书验证

生产环境必须配置TLS:

  1. [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.secure.com".tls]
  2. ca_file = "/etc/containerd/certs.d/registry.secure.com/ca.crt"
  3. cert_file = "/etc/containerd/certs.d/registry.secure.com/client.crt"
  4. key_file = "/etc/containerd/certs.d/registry.secure.com/client.key"

证书文件需通过openssl生成,建议使用Let’s Encrypt免费证书。

3.2 镜像签名验证

配置Notary服务器实现镜像签名:

  1. [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.signed.com".auth]
  2. username = "notary-client"
  3. [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.signed.com".tls]
  4. # 配置Notary服务器TLS

需配合cosignnotary-client工具实现签名流程。

四、高级配置场景

4.1 多架构镜像支持

配置platform过滤规则:

  1. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  2. endpoint = [
  3. "https://registry-1.docker.io",
  4. "https://mirror.baidubce.com"
  5. ]
  6. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io".filter]
  7. platform = ["linux/amd64", "linux/arm64"]

通过ctr images pull --platform linux/arm64 image:tag测试多架构支持。

4.2 镜像清理策略

配置ctr的垃圾回收参数:

  1. [plugins."io.containerd.grpc.v1.cri".registry]
  2. [plugins."io.containerd.grpc.v1.cri".registry.garbage_collection]
  3. mode = "async" # 或"sync"
  4. threshold = 0.8 # 磁盘使用率阈值

定期执行ctr content prune清理未使用的镜像层。

五、故障排查指南

5.1 常见错误处理

错误现象 解决方案
x509: certificate signed by unknown authority 检查TLS证书配置,或临时设置insecure_skip_verify=true测试
unauthorized: authentication required 验证auth配置,使用ctr auth add命令重新添加凭证
context deadline exceeded 检查网络连接,增加max_concurrent_downloads

5.2 日志分析

通过journalctl -u containerd -f查看实时日志,关键日志级别说明:

  • ERROR:配置错误或网络问题
  • WARN:镜像不存在等可恢复问题
  • INFO:正常操作记录

六、性能调优建议

  1. 镜像仓库选择:优先使用同地域的镜像仓库,延迟可降低60%以上
  2. 缓存策略:对常用基础镜像(如nginx、alpine)设置永久缓存
  3. 并发设置:根据节点CPU核心数调整,建议max_concurrent_downloads = min(5, CPU核心数/2)
  4. 镜像大小优化:使用docker-slim等工具压缩镜像,减少网络传输量

七、完整配置示例

  1. [plugins."io.containerd.grpc.v1.cri".registry]
  2. [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  3. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
  4. endpoint = ["https://mirror.baidubce.com", "https://registry-1.docker.io"]
  5. [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.cn-hangzhou.aliyuncs.com"]
  6. endpoint = ["https://registry.cn-hangzhou.aliyuncs.com"]
  7. [plugins."io.containerd.grpc.v1.cri".registry.configs]
  8. [plugins."io.containerd.grpc.v1.cri".registry.configs."my-private-registry.com".auth]
  9. username = "admin"
  10. password = "secure-password"
  11. [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.secure.com".tls]
  12. ca_file = "/etc/containerd/certs.d/registry.secure.com/ca.crt"
  13. [plugins."io.containerd.grpc.v1.cri".registry.garbage_collection]
  14. mode = "async"
  15. threshold = 0.85

配置完成后执行systemctl restart containerd生效,通过ctr images list验证镜像拉取情况。建议每月进行一次配置审计,确保镜像仓库地址和认证信息的有效性。