Enterprise Distributed Application Service(EDAS)のContainer Service for Kubernetes(ACK)クラスターにデプロイされた実行中のアプリケーションで発生するほとんどのエラーは、Podエラーです。このトピックでは、一般的なPodエラーとその解決策について説明します。
一般的なPodエラー
ImagePullBackOff
このエラーは、ACKクラスターがPod内のコンテナーのイメージをプルできない場合に発生します。
考えられる原因:
- 指定されたイメージ名が無効です。たとえば、イメージ名のスペルが間違っているか、イメージが存在しません。
- イメージに指定したタグが存在しません。
- イメージがプライベートリポジトリにあります。ACKクラスターには、リポジトリにアクセスするための資格情報がありません。
解決策:
- 最初の2つの原因の場合は、イメージ名とタグを変更できます。
- 3番目の原因の場合は、Secretを使用してプライベートリポジトリのアクセス資格情報をACKクラスターに追加し、対応するPodでこのSecretを参照する必要があります。
CrashLoopBackOff
コンテナーの起動に失敗した場合、対応するACKクラスターはこのエラーを返します。
考えられる原因:
- アプリケーションエラーが原因で、コンテナー内のアプリケーションが起動に失敗します。
- コンテナーが正しく構成されていません。
- liveness probeの失敗回数が最大制限を超えています。
解決策:
コンテナーからログを取得して、障害の原因を特定できます。コンテナーが再起動するのが速すぎてログを表示できない場合は、次のコマンドを実行できます。
$ kubectl logs <pod-name> --previous // 前回のPodのログを取得RunContainerError
このエラーは、コンテナーを起動できない場合に発生します。
考えられる原因:
- 存在しないボリューム(ConfigMapやSecretsなど)がマウントされています。
- 読み取り専用ボリュームが読み取り/書き込みボリュームとしてインストールされています。
解決策:
次のコマンドを実行して情報を収集し、エラーを分析します。
kubectl describe pod // Podの詳細情報を表示保留中の状態のPod
アプリケーションの作成時に、Podが保留中の状態のままになります。
考えられる原因:
- 対応するクラスターに、Podを実行するための十分なリソース(CPUやメモリなど)がありません。
- 現在の名前空間にResourceQuotaオブジェクトの値が指定されています。Podを作成した後、名前空間のリソースがリソースクォータを超えます。
- Podが保留中の状態の永続ボリューム要求にバインドされています。
解決策:
- 次のコマンドを実行し、出力の「event」セクションを確認するか、コンソールで関連するアプリケーションイベントを確認します。詳細については、「アプリケーションイベントの表示」をご参照ください。
$ kubectl describe pod <pod name> // Podの詳細情報を表示 - エラーがResourceQuotaによって発生した場合は、次のコマンドを実行してクラスターログを確認します。
$ kubectl get events --sort-by=.metadata.creationTimestamp // イベントを時刻順に表示
未準備状態のPod
Podが実行中であるが、未準備状態の場合、readiness probeが失敗します。
考えられる原因:
readiness probeが失敗すると、Podはサービスに接続されず、トラフィックは対応するインスタンスに転送されません。
解決策:
このエラーはアプリケーション固有です。次のコマンドを実行し、出力の「event」セクションを確認するか、コンソールで関連するアプリケーションイベントを確認します。詳細については、「アプリケーションイベントの表示」をご参照ください。
$ kubectl describe pod <pod name> // Podの詳細情報を表示