簡體   English   中英

Kubernetes 因未知 blob 錯誤而無法拉取映像

[英]Kubernetes fails to pull image with unknown blob error

我基於為 Windows 容器構建的 C#.NET 控制台應用程序的 microsoft/dotnet-framework 創建了一個 Docker 映像,然后確保我可以在本地容器中運行該映像。 我成功地將映像推送到我們的 Azure 容器注冊表。 現在我正在嘗試在我們的 Azure Kubernetes 服務中創建部署,但出現錯誤:

無法拉取鏡像“container-registry/image:tag”:rpc 錯誤:代碼 = 未知描述 = 未知 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”:“Linux”的 agentPoolProfile,但我不知道這是否僅僅意味着協調器在 Linux 中,或者 pod 中的容器是否必須基於 Linux . 我發現了有關“未知 blob”錯誤的計算器問題,似乎這個問題的答案可能支持我的假設,但我不知道該問題是否與我的問題有關。

由於錯誤與未能拉取映像有關,我認為這與為此部署配置服務無關。 添加服務並沒有改變任何東西。 我在懷疑圖像已損壞的情況下嘗試重建我的應用程序,但重建和重新注冊沒有效果。 我讀到的另一件似乎不相關的事情是關於明顯不匹配的問題和答案(我還不完全理解)。

我還沒有嘗試過創建本地 Kubernetes。 我不知道這是不是人們通常會做的事情。

問題總結:

  1. 是什么導致了這個未知的 blob 錯誤? 它是否與 Windows 容器/Linux 容器不匹配有關?
  2. 代理池配置文件會影響集群中的所有節點,還是僅影響“主”節點?

如果您需要更多信息,請與我們聯系。 謝謝。

1. 是什么導致了這個未知的 blob 錯誤? 它是否與 Windows 容器/Linux 容器不匹配有關? 這是因為您正在嘗試在 Linux 主機上運行基於 Windows 的 Docker 容器。 它與 Kubernetes 或 AKS 沒有直接關系。 目前 AKS 處於預覽階段,僅支持 Linux 環境。 更准確地說,當您預配 AKS 集群 ( az aks create ) 時,您的所有 k8s 隨從(工作節點)都將是 Linux 機器,因此將無法運行基於 Windows 的容器。

2. 代理池配置文件會影響集群中的所有節點,還是只影響“主”節點? 它會影響工作節點並用於將它們按邏輯分組在一起,以便您可以更好地管理工作負載分配。 將來,當 AKS 同時支持 Linux 和 Windows 時,您將能夠即根據操作系統類型創建代理池,並指示 k8s 僅將基於 Windows 的服務部署到基於 Windows 的主機(代理)。

我不確定這是否適用於您,因為它似乎是一個新部署,但我現在在 GKE 環境中為現有部署進行了兩次。 我正在使用帶有 nodejs 的 Ubuntu 映像,所有這些映像都基於 Linux。 出於某種原因,圖像似乎已損壞或 GKE 設置中的某些內容認為是這樣。 我可以通過再次推送到注冊表,然后將部署指向新映像來解決問題。

我可以通過簡單地從另一台經過身份驗證的機器上拉取 docker 鏡像來重現它,例如:

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

這給了我同樣的錯誤。 一旦我注意到這一點,我只是重新推送圖像並且它起作用了。 因此,盡管它可能是操作系統基礎映像差異導致的,正如其他人所建議的那樣,請檢查本地拉取是否有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM