k8s 使用 containerd 作為容器執行時拉取 http 的 harbor 私有倉庫映象

月巴左耳东發表於2024-10-24

目錄
  • 版本介紹
  • 報錯內容
  • 解決方法
    • 主配置檔案修改
    • 建立映象倉庫配置
  • 備註


版本介紹

  • k8s:v1.28.2
  • containerd:1.6.33

報錯內容

我的 harbor 用的是 http 的,因為是內網自己用,就沒有配置 https 了,於是配置好映象拉取的憑據,pod 拉取映象會有以下的報錯

Failed to pull image "harbor.devops.icu/baseimage/prometheus:v2.54.1": failed to pull and unpack image "harbor.devops.icu/baseimage/prometheus:v2.54.1": failed to resolve reference "harbor.devops.icu/baseimage/prometheus:v2.54.1": failed to do request: Head "https://harbor.devops.icu/v2/baseimage/prometheus/manifests/v2.54.1": dial tcp 192.168.18.222:443: connect: connection refused

解決方法

官方 Github 上面展示的配置檔案介紹:hosts.md

主配置檔案修改

主配置檔案需要增加倉庫配置檔案的目錄,目錄名稱自己定義,我這邊是配置的 registry_config

    [plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/etc/containerd/registry_config"

建立目錄

mkdir /etc/containerd/registry_config

建立映象倉庫配置

目錄結構樹

/etc/containerd/registry_config
└── harbor.devops.icu    # 映象倉庫的 ip:埠 或者域名
    └── hosts.toml       # 這個檔名稱是固定的

建立映象倉庫目錄,這裡的倉庫地址換成自己的

mkdir /etc/containerd/registry_config/harbor.devops.icu

建立配置檔案,/etc/containerd/registry_config/harbor.devops.icu/hosts.toml,倉庫地址這塊改成自己的,我是 http 的倉庫,所以增加了 skip_verify = true

server = "http://harbor.devops.icu"

[host."http://harbor.devops.icu"]
  capabilities = ["pull", "resolve", "push"]
  skip_verify = true

capabilities 表示可以對映象倉庫執行的操作,總共只有 "pull", "resolve", "push" 這三個值

重啟 containerd

systemctl restart containerd

備註

這個只是解決了 k8s 可以直接拉取 http 私有倉庫的問題,使用 ctr 命令拉取 http 私有倉庫,還是需要加上 --plain-http 引數才可以

相關文章