「ImagePullBackOff」をデバッグするには?


119

突然、以前はデプロイできたイメージをデプロイできなくなりました。次のポッドステータスを取得しました。

[root@webdev2 origin]# oc get pods 
NAME                      READY     STATUS             RESTARTS   AGE 
arix-3-yjq9w              0/1       ImagePullBackOff   0          10m 
docker-registry-2-vqstm   1/1       Running            0          2d 
router-1-kvjxq            1/1       Running            0          2d 

アプリケーションが起動しないだけです。ポッドはコンテナを実行しようとしません。イベントページから、私が持っていますBack-off pulling image "172.30.84.25:5000/default/arix@sha256:d326。でタグを付けて画像をプルできることを確認しましたdocker pull

最後のコンテナのログも確認しました。なんらかの理由で閉鎖されました。ポッドは少なくとも再起動を試みるべきだと思います。

問題をデバッグするためのアイデアが不足しています。さらに何を確認できますか?


これはマルチマシン設定ですか?その場合は、すべてのノードからプルできることを確認してください。そうでない場合は、ノードでログを--loglevel = 5に上げて再起動します。イメージをプルしようとする試みと含まれているエラーを説明する情報が表示されます。
クレイトン、

loglevel = 5で再起動した後に何が出ましたか?
lvthillo 2016年

2
あなたは問題を解決しましたか?誰かがこの「ImagePullBackOff」の問題を説明できますか?(画像は私の「ドッカー画像」に存在します)
ItayB

私は私のリポジトリに間違ったリージョンを使用してこれを取得しました。euを追加するのを忘れました--image = eu.gcr.io / $ PROJECT_ID / ...
Clemens Tolboom

私の場合、渡された画像の間違ったタグ名でした。問題を解決するタグ名を変更しました。
Tara Prasad Gurung、

回答:


117

describe pod」構文を使用できます

OpenShiftを使用する場合:

oc describe pod <pod-id>  

バニラKubernetesの場合:

kubectl describe pod <pod-id>  

出力のイベントを調べます。私の場合、それはバックオフプルイメージcoredns / coredns:latestを示しています

この場合、イメージcoredns / coredns:latestをインターネットからプルすることはできません。

Events:
  FirstSeen LastSeen    Count   From                SubObjectPath           Type        Reason      Message
  --------- --------    -----   ----                -------------           --------    ------      -------
  5m        5m      1   {default-scheduler }                        Normal      Scheduled   Successfully assigned coredns-4224169331-9nhxj to 192.168.122.190
  5m        1m      4   {kubelet 192.168.122.190}   spec.containers{coredns}    Normal      Pulling     pulling image "coredns/coredns:latest"
  4m        26s     4   {kubelet 192.168.122.190}   spec.containers{coredns}    Warning     Failed      Failed to pull image "coredns/coredns:latest": Network timed out while trying to connect to https://index.docker.io/v1/repositories/coredns/coredns/images. You may want to check your internet connection or if you are behind a proxy.
  4m        26s     4   {kubelet 192.168.122.190}                   Warning     FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "coredns" with ErrImagePull: "Network timed out while trying to connect to https://index.docker.io/v1/repositories/coredns/coredns/images. You may want to check your Internet connection or if you are behind a proxy."

  4m    2s  7   {kubelet 192.168.122.190}   spec.containers{coredns}    Normal  BackOff     Back-off pulling image "coredns/coredns:latest"
  4m    2s  7   {kubelet 192.168.122.190}                   Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "coredns" with ImagePullBackOff: "Back-off pulling image \"coredns/coredns:latest\""

追加のデバッグ手順

  1. コンピューターで手動でDockerイメージをプルしてタグを付ける
  2. 「kubectl / oc get pods -o wide」を実行してノードを特定します
  3. Dockerイメージをプルできないノード(可能な場合)にssh
  4. ノードがpingを実行してdockerレジストリのDNSを解決できることを確認します。
  5. ノードでDockerイメージを手動でプルしてみます
  6. プライベートレジストリを使用している場合は、シークレットが存在し、シークレットが正しいことを確認してください。シークレットも同じ名前空間にある必要があります。ありがとうswenzel
  7. 一部のレジストリには、IPアドレスのアクセスを制限するファイアウォールがあります。ファイアウォールがプルをブロックする可能性があります
  8. 一部のCIは、一時的なDockerシークレットを使用してデプロイメントを作成します。秘密は数日後に期限切れになります(本番の失敗を要求しています...)

3
また、プライベートイメージリポジトリを使用する場合は、イメージのプルシークレットが存在し、タイプミスがないこと、およびそれらが正しい名前空間にあることを確認してください。
swenzel 2018年

プライベートイメージリポジトリの場合は、「imagePullSecrets」エントリを使用して、ポッド内のイメージプルシークレットを必ず参照してください。
Donato Szilagyi

1
ここでは深さでこれをデバッグする方法を説明長いブログの記事もあります: managedkube.com/kubernetes/k8sbot/troubleshooting/...
ガー

1

何が問題なのか編集してみましたか(画像の場所が間違っていました)

kubectl edit pods arix-3-yjq9w

またはポッドを削除しますか?

kubectl delete arix-3-yjq9w

0

1.0.8のタグが付けられたイメージをECR(AWSイメージハブ)にプッシュするのを忘れました... Helmを使用していて、次の方法でアップグレードしている場合:

helmアップグレードminta-user ./src/services/user/helm-chart

values.yaml内のイメージタグが(ECRやDocker Hubなどに)プッシュされていることを確認します。例:(これは私のhelm-chart / values.yamlです)

replicaCount: 1

image:
   repository:dkr.ecr.us-east-1.amazonaws.com/minta-user
   tag: 1.0.8

image:1.0.8がプッシュされていることを確認する必要があります!


0

私は同様の問題に直面していましたが、1つではなくすべてのポッドの準備ができておらず、準備完了ステータス0/1が表示されていました ここに画像の説明を入力してください

多くのことを試しましたが、ようやくコンテキストが正しく設定されていませんでした。次のコマンドを使用して、正しいコンテキストにいることを確認してください

kubectl config get-contexts


0

GKEでは、ポッドが停止している場合は、イベントを確認することをお勧めします。エラーの詳細が表示されます。

私の場合、私は:

Failed to pull image "gcr.io/project/imagename@sha256:c8e91af54fc17faa1c49e2a05def5cbabf8f0a67fc558eb6cbca138061a8400a":
 rpc error: code = Unknown desc = error pulling image configuration: unknown blob

なんとなく画像が傷んでいることがわかりました。それを再プッシュして新しいハッシュで展開した後、再び機能しました。


-9

Dockerログインを実行する

画像をDockerハブにプッシュする

ポッドを再作成する

これで問題は解決しました。それが役に立てば幸い。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.