docker image下载不成功的解决方案

docker image下载不成功的解决方案

问题根源

cr.kagent.dev 是海外私有镜像仓库,国内网络直连超时/拉取失败,Kagent Chart 全局配置 registry: cr.kagent.dev,所有组件镜像都走这个地址。

提供4套可落地方案,按简单到生产排序。

方案1:安装时直接覆盖镜像仓库(最快,无需改values)

Kagent 全局有 global.registry 参数,一键替换镜像域名,两种用法:

1.1 命令行 --set 覆盖(临时)

bash 复制代码
# 先装crds
helm install kagent-crds oci://ghcr.io/kagent-dev/kagent/helm/kagent-crds -n aiops --create-namespace \
--set global.registry=dockerproxy.com/cr.kagent.dev

# 再装主程序,带上你的values
helm install kagent oci://ghcr.io/kagent-dev/kagent/helm/kagent -n aiops -f kagent-values.yaml \
--set global.registry=dockerproxy.com/cr.kagent.dev

代理规则:cr.kagent.dev/xxxdockerproxy.com/cr.kagent.dev/xxx,公开免费镜像代理。

1.2 修改你的 kagent-values.yaml(永久推荐)

在 values 文件顶部加入全局镜像替换,所有组件自动生效:

yaml 复制代码
global:
  registry: dockerproxy.com/cr.kagent.dev
  tag: 0.9.10

然后正常执行安装:

bash 复制代码
helm install kagent oci://ghcr.io/kagent-dev/kagent/helm/kagent -n aiops -f kagent-values.yaml

方案2:集群节点配置Docker全局镜像加速器(不修改helm)

所有节点统一加国内镜像源,节点自动代理海外仓库,无需改chart配置。

  1. 编辑 /etc/docker/daemon.json
json 复制代码
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://dockerproxy.com",
    "https://docker.m.daocloud.io"
  ]
}
  1. 重启docker
bash 复制代码
systemctl daemon-reload
systemctl restart docker

缺点:仅能加速docker.io/gcr.io,对 cr.kagent.dev 私有域名加速有限,优先用方案1。

方案3:本地预拉镜像+私有仓库 Harbor(生产稳定)

适合长期离线/严格内网集群:

  1. 本地能联网机器拉取代理镜像
bash 复制代码
docker pull dockerproxy.com/cr.kagent.dev/kagent-dev/kagent/controller:0.9.10
# 重命名为私有仓库地址
docker tag dockerproxy.com/cr.kagent.dev/kagent-dev/kagent/controller:0.9.10 harbor.xxx.com/kagent-dev/kagent/controller:0.9.10
# 推送到内网harbor
docker push harbor.xxx.com/kagent-dev/kagent/controller:0.9.10
  1. helm安装指定内网仓库
bash 复制代码
helm install kagent ... --set global.registry=harbor.xxx.com

方案4:DaoCloud 镜像代理备选(dockerproxy失效时用)

替换registry值为:

yaml 复制代码
global:
  registry: m.daocloud.io/cr.kagent.dev

命令行示例:

bash 复制代码
helm install kagent ... --set global.registry=m.daocloud.io/cr.kagent.dev

关键补充:CRDS 也要同步替换 registry

kagent-crds chart 同样有 global.registry必须同步加参数,否则crds控制器镜像依然拉失败:

bash 复制代码
helm install kagent-crds oci://ghcr.io/kagent-dev/kagent/helm/kagent-crds -n aiops \
--set global.registry=dockerproxy.com/cr.kagent.dev

校验镜像是否替换成功

部署完成后查看pod镜像地址:

bash 复制代码
kubectl get pod -n aiops -o jsonpath='{.items[0].spec.containers[0].image}'

输出应不再是 cr.kagent.dev/xxx,而是 dockerproxy.com/cr.kagent.dev/xxx

常见报错兜底

  1. 代理镜像拉取404:换 m.daocloud.io/cr.kagent.dev
  2. 集群私有仓库需要认证:在values添加 global.imagePullSecrets
yaml 复制代码
global:
  imagePullSecrets:
    - harbor-secret