containerd2.x接入Harbor仓库方法
containerd 2.x 对镜像仓库配置进行了结构化优化,所有相关配置均集中在 首先通过以下命令验证 containerd 版本是否为 2.x 系列: 根据 Harbor 仓库地址创建对应的配置目录,目录名需与仓库域名(或 IP)严格匹配(示例中 Harbor 仓库地址为 harbor.liyb.com): 创建并编辑 添加如下配置内容: 配置说明: 检查 containerd 主配置文件 toml 通过 nerdctl 工具拉取 Harbor 仓库镜像,验证配置是否生效: 成功输出示例: plaintext 在 Kubernetes 节点上通过 crictl 工具拉取镜像(适用于 K8s 集群环境):一、核心配置结构说明
/etc/containerd/certs.d/ 目录下,遵循 "一仓库一目录" 的配置原则:hosts.toml 文件,用于定义仓库连接参数hosts.toml 核心配置项:仓库服务地址(server)、操作权限(capabilities)、认证信息(auth)、证书验证开关(skip\_verify)二、分步配置实战
1. 版本确认
\\\[root@k8s-master ~]# containerd --version
containerd containerd.io v2.2.0 1c4457e00facac03ce1d75f7b6777a7a851e5c412. 创建配置目录
mkdir -p /etc/containerd/certs.d/harbor.liyb.com注意:若仓库未使用域名(直接通过 IP 访问),可直接以 IP 地址作为目录名(如
/etc/containerd/certs.d/192.168.1.100)3. 编写 hosts.toml 配置文件
hosts.toml 文件,配置仓库连接参数:vi /etc/containerd/certs.d/harbor.liyb.com/hosts.tomlserver = "https://harbor.liyb.com"
\\\[host."https://harbor.liyb.com"]
capabilities = \\\["pull", "resolve", "push"] # 支持的操作:拉取、解析、推送
skip\\\_verify = true # 自签名证书时启用(跳过证书验证)
\\\[host."https://harbor.liyb.com".auth]
username = "admin" # Harbor 登录用户名
password = "Harbor12345" # Harbor 登录密码skip\\\_verify = true,只需将 CA 证书文件放置到对应配置目录(如 /etc/containerd/certs.d/harbor.liyb.com/)即可capabilities = \\\["pull", "resolve"]4. 确认主配置文件路径
/etc/containerd/config.toml 中是否正确指定了仓库配置路径,确保以下配置项存在且无误:# /etc/containerd/config.toml
\\\[plugins."io.containerd.grpc.v1.cri".registry]
config\\\_path = "/etc/containerd/certs.d" # 仓库配置目录路径(默认已启用)注意:containerd 2.x 默认启用该配置,但生产环境部署时务必手动校验,避免路径配置错误导致配置失效
三、配置验证方法
1. 使用 nerdctl 验证(推荐)
nerdctl pull harbor.liyb.com/prod/nginx:1.27harbor.liyb.com/prod/nginx:1.27: manifest-sha256:114dff0fc8ee3d0200c3a12c60e3e2b79d0920dd953175ecb78a0b157425b25e: done
config-sha256:1e5f3c5b981a9f91ca91cf13ce87c2eedfc7a083f4f279552084dd08fc477512: done
elapsed: 0.1 s
total: 0.0 B (0.0 B/s)2. Kubernetes 节点验证
crictl pull harbor.liyb.com/prod/nginx:1.27关键注意点:镜像名称必须显式包含 Harbor 仓库地址(完整格式:仓库地址 / 项目名 / 镜像名:标签),否则会导致 K8s Pod 拉取镜像失败
四、高频踩坑与解决方案
