アプリ・デプロイメントのデバッグ

仮想プライベートクラウド クラシック・インフラストラクチャー

アプリ・デプロイメントをデバッグするためのオプションを確認し、障害の根本原因を探します。

始める前に、アプリがデプロイされている名前空間に対するライターまたは管理者の IBM Cloud IAM サービス・アクセス役割があることを確認してください。

  1. Red Hat OpenShift クラスターにデプロイできるように、必ず アプリの変更が必要になる可能性がある一般的なシナリオ を確認してください。

  2. describe コマンドを実行して、サービス・リソースまたはデプロイメント・リソース内の異常を見つけます。

    oc describe service <service_name>
    
  3. コンテナーが ContainerCreating 状態で停滞しているかどうかを確認します

  4. クラスターが Critical 状態かどうかを確認します。 クラスターが Critical 状態の場合、ファイアウォール・ルールを調べて、マスターがワーカー・ノードと通信できることを検査します。

  5. サービスが正しいポートで listen していることを確認します。

    1. ポッドの名前を取得します。
      oc get pods
      
    2. コンテナーにログインします。
      oc exec -it <pod_name> -- /bin/bash
      
    3. コンテナー内からアプリに対して curl を実行します。 ポートにアクセスできない場合、サービスは正しいポートで listen していないか、またはアプリに問題が生じている可能性があります。 正しいポートでサービスの設定ファイルを更新して再デプロイするか、アプリの潜在的な問題を調査してください。
      curl localhost:<port>
      
  6. サービスがポッドに正しくリンクされていることを確認します。

    1. ポッドの名前を取得します。
      oc get pods
      
    2. コンテナーにログインします。
      oc exec -it <pod_name> -- /bin/bash
      
    3. サービスのクラスター IP アドレスとポートに対して curl を実行します。
      curl <cluster_IP>:<port>
      
    4. IP アドレスとポートにアクセスできない場合、サービスのエンドポイントを調べます。
      • エンドポイントがリストされない場合は、サービスのセレクターがポッドと一致していません。 例えば、アプリ・デプロイメントのラベルが app=foo であるのに、サービスのセレクターが run=foo である可能性があります。
      • エンドポイントがリストされている場合は、サービスの宛先ポート・フィールドを調べて、宛先ポートがポッドに使用されているポートと同じであることを確認します。 例えば、アプリがポート 9080 で listen しているのに、サービスがポート 80 で listen している可能性があります。
  7. Ingress サービスの場合、クラスター内からサービスにアクセスできることを検証します。

    1. ポッドの名前を取得します。
      oc get pods
      
    2. コンテナーにログインします。
      oc exec -it <pod_name> -- /bin/bash
      
    3. Ingress サービス用に指定された URL に対して curl を実行します。 URL にアクセスできない場合、クラスターと外部エンドポイントの間にファイアウォールの問題が生じていないかを調べます。
      curl <host_name>.<domain>