1. ホーム
  2. クーベルネッツ

[解決済み】"ImagePullBackOff "をデバッグするにはどうしたらいいですか?

2022-03-17 06:30:57

質問

今までデプロイできていた画像が突然デプロイできなくなりました。以下のようなポッドステータスが表示されます。

[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 .

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

デバッグのためのアイデアが尽きてしまいました。もっと確認できることはありますか?

解決方法を教えてください。

を使用すると、' ポッドを記述する ' 構文

OpenShiftの場合使用します。

oc describe pod <pod-id>  

vanilla Kubernetesの場合。

kubectl describe pod <pod-id>  

出力のイベントを調べます。 私の場合、次のように表示されます。 Back-off pulling image unreachableserver/nginx:1.14.22222

この場合、画像 unreachableserver/nginx:1.14.22222 は、Docker レジストリ unreachableserver が存在しないため、インターネットから引き抜くことができず、イメージ nginx:1.14.22222 は存在しない。

注:興味のあるイベントが表示されず、ポッドがしばらく(60分以上と思われる)「ImagePullBackOff」状態になっている場合、ポッドを削除して新しいポッドのイベントを確認する必要があります。

OpenShiftで使用する場合。

oc delete pod <pod-id>
oc get pods
oc get pod <new-pod-id>

vanilla Kubernetesの場合。

kubectl delete pod <pod-id>  
kubectl get pods
kubectl get pod <new-pod-id>

サンプル出力です。

  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  32s                default-scheduler  Successfully assigned rk/nginx-deployment-6c879b5f64-2xrmt to aks-agentpool-x
  Normal   Pulling    17s (x2 over 30s)  kubelet            Pulling image "unreachableserver/nginx:1.14.22222"
  Warning  Failed     16s (x2 over 29s)  kubelet            Failed to pull image "unreachableserver/nginx:1.14.22222": rpc error: code = Unknown desc = Error response from daemon: pull access denied for unreachableserver/nginx, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
  Warning  Failed     16s (x2 over 29s)  kubelet            Error: ErrImagePull
  Normal   BackOff    5s (x2 over 28s)   kubelet            Back-off pulling image "unreachableserver/nginx:1.14.22222"
  Warning  Failed     5s (x2 over 28s)   kubelet            Error: ImagePullBackOff

デバッグの追加手順

  1. docker イメージとタグを手動でコンピュータに取り込んでみてください。
  2. kubectl/oc get pods -o wide」とやってノードを特定する。
  3. docker イメージを引き出せないノードに (可能であれば) ssh でログインします。
  4. pingを実行して、ノードがdockerレジストリのDNSを解決できることを確認します。
  5. ノード上で手動でドッカーイメージをプルしてみる
  6. プライベートレジストリを使用している場合は シークレット が存在し、その秘密が正しいことを確認します。また、秘密は同じネームスペースにある必要があります。ありがとうございます。 スウェンツェル
  7. レジストリによっては、IPアドレスのアクセスを制限するファイアウォールを備えている場合があります。ファイアウォールがプルをブロックしている場合があります。
  8. CIによっては、一時的なdocker secretでデプロイメントを作成するものがあります。そのため、シークレットは数日後に失効します(本番の失敗を想定しているのでしょう...)