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/xxx → dockerproxy.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配置。
- 编辑
/etc/docker/daemon.json
json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://dockerproxy.com",
"https://docker.m.daocloud.io"
]
}
- 重启docker
bash
systemctl daemon-reload
systemctl restart docker
缺点:仅能加速docker.io/gcr.io,对
cr.kagent.dev私有域名加速有限,优先用方案1。
方案3:本地预拉镜像+私有仓库 Harbor(生产稳定)
适合长期离线/严格内网集群:
- 本地能联网机器拉取代理镜像
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
- 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。
常见报错兜底
- 代理镜像拉取404:换
m.daocloud.io/cr.kagent.dev - 集群私有仓库需要认证:在values添加
global.imagePullSecrets
yaml
global:
imagePullSecrets:
- harbor-secret