无法拉图像myapidemodocker.azurecr.io/apidemo:v4.0:rpc错误:code = Unknown desc = unknown blob

时间:2018-06-17 18:28:52

标签: azure kubernetes

任何想法为什么我一直得到这个烦人且无用的错误代码/描述?

Failed to pull image myapidemodocker.azurecr.io/apidemo:v4.0: rpc error: code = Unknown desc = unknown blob

我想到了不正确的秘密并且遵循了Microsoft的这些文档但没有成功! [https://docs.microsoft.com/en-us/azure/container-registry/container-registry-auth-aks][1]

上下文:

  • 我正在使用Visual Studio和Docker for Windows来创建Windows 容器图片。
  • 将图像推送到Azure容器注册表(ACR)并将其部署为 Azure容器实例。不幸的是,我无法使用ACI 生产应用程序,因为它没有连接到私有vNET。 出于安全原因,无法使用公共IP,但这只是做了什么 for poc!
  • 下一步,在Azure中创建Kubernetes群集并尝试部署 相同的图像(Windows容器)到Kubernetes POD但不是 工作
  • 让我分享我的yml定义和事件日志

这是我的yml定义:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: apidemo
spec:
  template:
    metadata:
      labels:
        app: apidemo
    spec:
      containers:
      - name: apidemo
        image: myapidemodocker.azurecr.io/apidemo:v4.0
      imagePullSecrets:
      - name: myapidemosecret
      nodeSelector:
       beta.kubernetes.io/os: windows


Event logs:
Events:
  Type     Reason                 Age               From                               Message
  ----     ------                 ----              ----                               -------
  Normal   Scheduled              4m                default-scheduler                  Successfully assigned apidemo-57b5fc58fb-zxk86 to aks-agentp
ool-18170390-1
  Normal   SuccessfulMountVolume  4m                kubelet, aks-agentpool-18170390-1  MountVolume.SetUp succeeded for volume "default-token-gsjhl"
  Normal   SandboxChanged         2m                kubelet, aks-agentpool-18170390-1  Pod sandbox changed, it will be killed and re-created.
  Normal   Pulling                2m (x2 over 4m)   kubelet, aks-agentpool-18170390-1  pulling image "apidemodocker.azurecr.io/apidemo:v4.0"
  Warning  Failed                 20s (x2 over 2m)  kubelet, aks-agentpool-18170390-1  Failed to pull image "apidemodocker.azurecr.io/apidemo:v4
.0": [rpc error: code = Unknown desc = unknown blob, rpc error: code = Unknown desc = unknown blob]
  Warning  Failed                 20s (x2 over 2m)  kubelet, aks-agentpool-18170390-1  Error: ErrImagePull
  Normal   BackOff                10s               kubelet, aks-agentpool-18170390-1  Back-off pulling image "apidemodocker.azurecr.io/apidemo:
v4.0"
  Warning  Failed                 10s               kubelet, aks-agentpool-18170390-1  Error: ImagePullBackOff

(5)我不明白为什么Kubernetes仍在使用/var/run/secrets/kubernetes.io/serviceaccount中的default-token-gsjhl作为秘密而我指定了自己!

感谢您花时间提供反馈。

1 个答案:

答案 0 :(得分:1)

我能够解决此问题。它与错误消息无关!实际的问题是,我试图使用Windows容器映像,而Azure中的Kubernetes仅支持Linux容器映像。

这是我必须要做的动作:

  • 已配置的Ubuntu(Linux Container on Windows 10
  • 将Docker配置为使用Linux(切换到Linux容器)。
  • 使用Visual Studio 2017将ASP.NET MVC项目转换为ASP.NET Core。这是对支持包括Linux在内的多个平台的重大更改。
  • 更新了dockerfile和docker-compose项目。
  • 创建了新的docker映像(Linux容器)。
  • 将图像推送到Azure容器注册表。
  • 使用相同的凭据在Kubernetes中创建了一个新部署。奏效了!
  • 创建了一个新的Service to expose the app in Kubernetes。此步骤创建了客户端可以使用的端点。
  • 我的Kubernetes集群已加入vNET,并且所有IP都是私有的。因此,我通过Azure API网关公开了Kubernetes终结点(服务)。只是为了演示,我允许匿名访问API(生产应用程序必须具有API密钥和jwt令牌)。
  • 这是应用程序流:客户端应用程序-> Azure API网关-> Kubernetes端点(专用IP)-> Kubernetes POD->我的Linux容器

有很多复杂性,技术规格也在迅速变化。因此,我花了很多时间才能正确理解它!我相信你能做到。在此处尝试从Azure Kubernetes服务获取我的API-

以下是我用于提供信息的一些配置-

Dockerfile:

FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
ENV ASPNETCORE_URLS=http://+:80
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "gdt.api.demo.dotnetcore.dll"]

由Docker组成:

FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
ENV ASPNETCORE_URLS=http://+:80
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "gdt.api.demo.dotnetcore.dll"]

Kubernetes部署定义:


version: '3'

services: gdt-api-demo: image: gdt.api.demo.dotnetcore build: context: .\gdt.api.demo.dotnetcore dockerfile: Dockerfile

Kubernetes服务定义:


apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: gdtapidemo
spec:
  template:
    metadata:
      labels:
        app: gdtapidemo
    spec:
      containers:
      - name: gdtapidemo
        image: gdtapidemodocker.azurecr.io/gdtapidemo-ubuntu:v1.0
      imagePullSecrets:
      - name: gdtapidemosecret

Service as Deployed in Kubernetes