我基于为 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 list
AKS 有一个带有“osType”的 agentPoolProfile:“Linux”,但我不知道这是否仅仅意味着编排器位于 Linux 中,或者 pod 中的容器是否必须基于 Linux。我发现了有关“未知 blob”错误的 stackoverflow 问题,这似乎是这个问题的答案可能支持我的假设,但我不知道该问题是否与我的问题有关。
由于该错误与未能提取图像有关,因此我认为这与为此部署配置服务无关。添加服务并没有改变任何东西。在怀疑图像已损坏的情况下,我尝试重建我的应用程序,但重建和重新注册没有效果。我读到的另一件似乎不相关的事情是关于明显不匹配的问题和答案(我还不完全理解)。
我还没有尝试创建本地 Kubernetes。我不知道这是否是人们通常会做的事情。
问题总结:
- 是什么导致了这个未知的 blob 错误?它是否与 Windows 容器/Linux 容器不匹配有关?
- 代理池配置文件会影响集群中的所有节点,还是只影响“主”节点?
如果您需要更多信息,请与我们联系。谢谢。