使用 minikube 上的 kubeflow 从私有 google 容器注册表中拉取镜像

Pulling images from private google container registry with kubeflow on minikube

我们无法让上传到 Kubeflow 的管道中的容器访问存储在 google 容器注册表中的私有自定义 docker 图像。我们在 minikube 上的 kubernetes 集群 运行 之上 运行ning kubeflow。有人可以帮助我们了解如何将访问 token/service 帐户添加到 Kubeflow 部署吗?我们已经阅读了一些在自定义 Kubernetes 部署而非 Kubeflow 部署上实现此目的的文档。

我们在 Kubeflow 上 运行 连接管道时得到的错误是: 此步骤处于挂起状态并显示以下消息:ImagePullBackOff:退避拉取图像

这是调用图像的管道代码。

谢谢!!

在某些情况下可能会出现此问题,例如:

  • 您的 kubeflow 设置(Kubernetes 集群)和 GCR 在不同的项目中

  • 没有负责 运行 管道的 ml-pipeline 服务帐户的 GCR 机密。 (可以看到这个kubectl --namespace=kubeflow get serviceaccount)

你的情况,我认为是第二种情况。虽然以下路径适用于这两种情况。

  1. 使用 GCP 控制台创建具有足够权限的 service_account.json(GCR 需要存储权限,因此给予 'Storage admin')
Select “API & Services” > “Credentials”Select “Create credentials” > “Services Account Key” > “Create New Services Account”

  1. 在 Kubernetes 集群中添加 Kubernetes Secret 以访问 GCR
kubectl create secret docker-registry $SECRETNAME \       
--docker-server=https://gcr.io \                          
--docker-username=_json_key \                             
--docker-email=user@example.com \                          
--docker-password="$(cat ./service_account.json.json)"
#username should be _json_key
  • 以上方法适用于默认服务帐户。但是在 Kufelow 命名空间中修补这个
kubectl --namespace=kubeflow create secret docker-registry $SECRETNAME \  
--docker-server=https://gcr.io \                          
--docker-username=_json_key \                             
--docker-email=user@example.com \                          
--docker-password="$(cat ./service_account.json.json)"
#username should be _json_key
  1. 正在使用各自的服务帐户修补 GCR 密码
# For Kubeflow specific problem path pipeline-runner serviceaccount
kubectl --namespace=kubeflow patch serviceaccount pipeline-runner -p '{"imagePullSecrets": [{"name": "$SECRETNAME"}]}'