将映像从 Azure 容器注册表拉取到 Kubernetes 集群

时间:2021-03-01 19:38:02

标签: azure kubernetes containers

我已按照本教程 microsoft_website 从 azure 容器中提取图像。我的 yaml 成功创建了一个 pod 作业,该作业可以拉取映像,但仅当它在我的集群中的 agentpool 节点上运行时。

例如,将 nodeName: aks-agentpool-33515997-vmss000000 添加到 yaml 工作正常,但指定不同的节点名称,例如nodeName: aks-cpu1-33515997-vmss000000,pod 失败。我收到的关于描述 Pod 的错误消息是 Failed to pull image,然后是 kubelet Error: ErrImagePull

我缺少什么?

创建秘密:

kubectl create secret docker-registry <secret-name> \
--docker-server=<container-registry-name>.azurecr.io \
--docker-username=<service-principal-ID> \
--docker-password=<service-principal-password>

2 个答案:

答案 0 :(得分:0)

需要检查的四件事:

  • 这是订阅问题吗?节点是否在不同的订阅中?
  • 这是供股问题吗?节点的服务主体是否有权拉取镜像。
  • 是网络问题吗?节点是否位于不同的子网上?
  • 镜像大小或配置是否有问题,这意味着它无法在其他集群上运行。

编辑

New-AzAksNodePool 有一个参数 -DefaultProfile

可以是 AzContext、AzureRmContext、AzureCredential

如果这在您的节点之间不同,它将解释错误

答案 1 :(得分:0)

正如@user1571823 所说,问题的解决方案是从 acr 中删除旧图像并创建/推送新图像。
该问题与保存在 azure 容器注册表 (acr) 中的映像中的某种损坏有关。一个代理池之所以能够拉取镜像,其实是因为该镜像已经存在于虚拟机中。

此后,@andov 表示,从您的订阅中向 Azure 支持 AKS 打开一个事件案例是一个不错的选择,其中部署了 AKS。支持团队拥有对 AKS 服务后端的完全访问权限,他们可以准确地告诉您问题的原因。