Containerd使用Harbor私有仓库配置

Containerd使用Harbor私有仓库配置

  1. Cloud Native 🚢
  2. 4 months ago
  3. 3 min read
前言

Kubernetes在v1.24版本之后的容器运行时环境已经从Docker 切换为了Containerd

Containerd在旧版本和新版中对于镜像仓库的配置方法又各不一样,导致网上各种文章的方法都不使用

在此记录一下新旧2中配置方法

环境
  • 1主2从集群

  • OS: Centos7.9

  • Kubernetes版本: v1.30.0

  • CRI: containerd1.6.31

  • Harbor服务地址: 10.211.55.17:8090

    image-20241020151054222

根据官方Github Issue 和官方的废弃说明 旧版配置镜像仓库的方法将会在1.5版本是进入Deprecation阶段,而在2.0版本之后会被removal,我现在的环境使用的1.6版本所以旧版方法不适用

旧版配置镜像仓库(Harbor)

直接修改containerd的配置文件 vim /etc/containerd/config.toml,搜索auths,定位到[plugins."io.containerd.grpc.v1.cri".registry.auths]处,这里是配置旧版本的镜像仓库和认证信息的地方,主要配置registry.configsregistry.mirrors 的子条目,在里面配置好仓库账号密码是为了方便节点拉取镜像,不用每次都需要指定Secret

149       [plugins."io.containerd.grpc.v1.cri".registry.auths]
150
151       [plugins."io.containerd.grpc.v1.cri".registry.configs]
152
153         [plugins."io.containerd.grpc.v1.cri".registry.configs."10.211.55.17:8090".tls]
154           insecure_skip_verify = true
155
156         [plugins."io.containerd.grpc.v1.cri".registry.configs."10.211.55.17:8090".auth]
157           username = "admin"
158           password = "Harbor12345"
159
160       [plugins."io.containerd.grpc.v1.cri".registry.headers]
161
162       [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
163
164         [plugins."io.containerd.grpc.v1.cri".registry.mirrors."10.211.55.17:8090"]
165           endpoint=["http://10.211.55.17:8090"]

image-20241020152226173

修改完成之后重启congtainerd

systemctl daemon-reload && systemctl restart containerd.service

查看启动情况

journalctl -xeu containerd

由于我的版本高于1.5,所以这种配置其实已经失效,containerd无法加载这些插件配置,会提示错误信息,并且在查看镜像时也会出现错误

在config_path已经指定的前提下registry.auths,registry.configs,registry.headers,registry.mirrors 不允许再配置字子条目

image-20241020153950290

image-20241020153053010

新版本配置方法

详细配置说明参考官方文档 ,文档详细说明了新版本如何配置镜像仓库

  1. 删除旧版本registry.auths,registry.configs,registry.headers,registry.mirrors下的配置

  2. 确保该目录存在 /etc/containerd/certs.d/

  3. 已仓库地址在 etc/containerd/certs.d 创建子目录

    • 示例: mkdir -p /etc/containerd/certs.d/10.211.55.17:8090
  4. 进入该目录创建hosts.toml配置文件

  5. hosts.toml 中配置镜像仓库信息

    server = "10.211.55.17:8090"
    [host."http://10.211.55.17:8090"]
      capabilities = ["pull", "resolve"]
    

    image-20241020153756488

  6. 重启containerd并验证,此时已经可以正常,由于是本地自己测试,就将Harbor的权限设置为了公开,主要懒得弄ca证书

  7. 尝试拉取仓库镜像

    image-20241020155727915

Kubernetes CRI