4

我基于为 Windows 容器构建的 C#.NET 控制台应用程序的 microsoft/dotnet-framework 创建了一个 Docker 映像,然后确保我可以在本地容器中运行该映像。我成功地将映像推送到我们的 Azure 容器注册表。现在我正在尝试在我们的 Azure Kubernetes 服务中创建部署,但出现错误:

无法提取图像“容器注册表/图像:标签”:rpc 错误:代码 = 未知 desc = 未知 blob

我在 Kubernetes 仪表板中的部署、Pod 和副本集上看到此错误。

我们已经有一个与 azure-vote 应用程序一起使用的秘密,所以我认为这与秘密无关,但我可能是错的。

到目前为止,我已经尝试通过将以下 YAML 粘贴到 Kubernetes 仪表板的“创建”对话框中来创建此部署:

apiVersion:
kind: Deployment
metadata:
  name: somename
spec:
  selector:
    matchLabels:
      app: somename
      tier: backend
  replicas: 2
  template:
    metadata:
      labels:
        app: somename
        tier: backend
    spec:
      containers:
      - name: somename
        image: container-registry/image:tag
        ports:
        - containerPort: 9376

我还尝试运行这个 kubectl 命令的变体:

kubectl run deploymentname --image=container-registry/image:tag

到目前为止,在我的调查中,我尝试阅读 k8s 的不同部分以了解可能出了什么问题,但这对我来说都是全新的。我认为这可能与这是基于 Windows Server 2016 的映像有关。一位团队成员成功地将 azure-vote 教程代码添加到我们的 AKS,所以我想知道对于运行基于 Windows 和 Linux 的容器的部署的单个 AKS 服务是否存在限制。我通过运行看到az aks listAKS 有一个带有“osType”的 agentPoolProfile:“Linux”,但我不知道这是否仅仅意味着编排器位于 Linux 中,或者 pod 中的容器是否必须基于 Linux。我发现了有关“未知 blob”错误的 stackoverflow 问题,这似乎是这个问题的答案可能支持我的假设,但我不知道该问题是否与我的问题有关。

由于该错误与未能提取图像有关,因此我认为这与为此部署配置服务无关。添加服务并没有改变任何东西。在怀疑图像已损坏的情况下,我尝试重建我的应用程序,但重建和重新注册没有效果。我读到的另一件似乎不相关的事情是关于明显不匹配的问题和答案(我还不完全理解)。

我还没有尝试创建本地 Kubernetes。我不知道这是否是人们通常会做的事情。

问题总结:

  1. 是什么导致了这个未知的 blob 错误?它是否与 Windows 容器/Linux 容器不匹配有关?
  2. 代理池配置文件会影响集群中的所有节点,还是只影响“主”节点?

如果您需要更多信息,请与我们联系。谢谢。

4

2 回答 2

2

1.是什么导致了这个未知的blob错误?它是否与 Windows 容器/Linux 容器不匹配有关? 这是因为您尝试在 Linux 主机上运行基于 Windows 的 Docker 容器。它与 Kubernetes 或 AKS 没有直接关系。目前 AKS 处于预览阶段,仅支持 Linux 环境。更准确地说,当您配置 AKS 集群 ( az aks create) 时,您的所有 k8s minions(工作节点)都将是 Linux 机器,因此将无法运行基于 Windows 的容器。

2. 代理池配置文件会影响集群中的所有节点,还是只影响“主”节点? 它会影响工作节点,并用于将它们按逻辑分组在一起,以便您可以更好地管理工作负载分配。将来,当 AKS 同时支持 Linux 和 Windows 时,您将能够 ie 根据操作系统类型创建代理池,并指示 k8s 将您的基于 Windows 的服务仅部署到基于 Windows 的主机(代理)。

于 2018-06-01T08:08:34.160 回答
0

我不确定这是否适用于您,因为它可能看起来是一个新部署,但我现在在 GKE 环境中为现有部署做了两次。我正在使用带有 nodejs 的 Ubuntu 映像,全部基于 Linux。由于某种原因,图像似乎已损坏,或者 GKE 设置中的某些东西认为是这样。我可以通过再次推送到注册表然后将部署指向新映像来解决问题。

我可以通过简单地从另一台经过身份验证的机器中提取 docker 映像来重现它,例如:

docker pull gcr.io/project-name/app-name@sha256:somelongrandomhash

这给了我同样的错误。一旦我注意到这一点,我只是重新发布了图像并且它起作用了。因此,尽管它可能是操作系统基础映像的差异导致的,正如其他人所建议的那样,请检查本地拉取以查看其是否正常工作。

于 2020-08-10T12:56:03.927 回答