アプリケーション・デプロイメントの問題のトラブルシューティング

アプリケーションのデプロイメント時、oam-kubernetes-runtimeおよびverrazzano-application-operatorはKubernetesリソースの生成と更新を通じて連携します。oam-kubernetes-runtimeは、ユーザーが指定したApplicationConfigurationおよびComponentリソースを処理し、ワークロードおよびTraitリソースを生成します。verrazzano-application-operatorは、Verrazzano固有のワークロードおよびTraitリソースを処理します。その後、これらを使用して追加の子および関連リソースが生成されます。

アプリケーション・デプロイメントのトラブルシューティングでは、次の3つの一般的なステップに従う必要があります:

  1. oam-kubernetes-runtimeおよびverrazzano-application-operatorオペレータ・ポッドのステータスを確認します。
  2. oam-kubernetes-runtimeおよびverrazzano-application-operatorオペレータ・ポッドのログを確認します。
  3. oam-kubernetes-runtimeおよびverrazzano-application-operatorによって生成されたリソースを確認します。

oam-kubernetes-runtimeオペレータのステータスの確認

アプリケーションのデプロイが成功するには、oam-kubernetes-runtimeポッドのステータスがRunningである必要があります。

次のコマンドを使用してポッドのステータスを取得します:

$ kubectl get pods \
    -n verrazzano-system \
    -l app.kubernetes.io/name=oam-kubernetes-runtime

ポッドのステータスがRunningでない場合は、oam-kubernetes-runtimeポッドのログを確認する手順を参照してください。

verrazzano-application-operatorオペレータのステータスの確認

アプリケーションのデプロイが成功するには、verrazzano-application-operatorポッドのステータスがRunningである必要があります。

次のコマンドを使用してポッドのステータスを取得します:

$ kubectl get pods \
    -n verrazzano-system \
    -l app=verrazzano-application-operator

ポッドのステータスがRunningでない場合は、verrazzano-application-operatorのログを確認する手順を参照してください。

oam-kubernetes-runtimeオペレータのログの確認

oam-kubernetes-runtimeポッドのログで、ポッドの起動またはワークロードまたはトレイトの生成が失敗したことを示すものがないか確認します。

次のコマンドを使用して、ログを取得します:

$ kubectl logs \
    -n verrazzano-system \
    -l app.kubernetes.io/name=oam-kubernetes-runtime

verrazzano-application-operatorログの確認

verrazzano-application-operatorのログで、ポッドの起動またはリソースの生成が失敗したことを示すものがないか確認します。

次のコマンドを使用して、ログを取得します:

$ kubectl logs \
    -n verrazzano-system \
    -l app=verrazzano-application-operator

生成されたワークロード・リソースの確認

ApplicationConfiguration内でComponent参照を処理すると、ワークロードが生成されます。たとえば、Component参照によってVerrazzanoHelidonWorkloadワークロード・リソースが生成されます。次に、VerrazzanoHelidonWorkloadワークロード・リソースが処理され、関連するDeploymentおよびServiceリソースが生成されます。

予期されるワークロード・リソース(VerrazzanoHelidonWorkloadなど)がない場合は、oam-kubernetes-runtimeログを確認します。予期される関連リソース(Deployment、Serviceなど)がない場合、verrazzano-application-operatorログを確認します。

次のコマンドは、VerrazzanoHelidonWorkloadデプロイメントに関連するリソースを確認する例です:

$ kubectl get -n hello-helidon verrazzanohelidonworkload hello-helidon-workload
$ kubectl get -n hello-helidon deployment hello-helidon-deployment
$ kubectl get -n hello-helidon service hello-helidon-deployment

生成されたTraitリソースの確認

ApplicationConfigurationに埋め込まれたトレイトの処理によって、Traitリソースが生成されます。たとえば、ApplicationConfiguration内に埋め込まれたIngressTraitは、IngressTraitリソースを生成します。次に、IngressTraitリソースが処理され、関連するCertificate、GatewayおよびVirtualServiceリソースが生成されます。

予期されるTraitリソース(IngressTraitなど)がない場合は、oam-kubernetes-runtimeログを確認します。予期される関連リソース(Certificate、Gateway、VirtualServiceeなど)がない場合、verrazzano-application-operatorログを確認します。

次のコマンドは、IngressTraitに関連するリソースを確認する例です:

$ kubectl get -n hello-helidon ingresstrait hello-helidon-ingress
$ kubectl get -n istio-system Certificate hello-helidon-hello-helidon-appconf-cert
$ kubectl get -n hello-helidon gateway hello-helidon-hello-helidon-gw
$ kubectl get -n hello-helidon virtualservice hello-helidon-ingress-rule-0-vs

RBAC権限の問題の確認

汎用Kubernetesリソースをワークロードおよびトレイトとして使用すると、権限が不十分な場合にデプロイメントが失敗する可能性があります。この場合、oam-kubernetes-runtimeログにはforbiddenという用語を含むエラーが含まれます。

次のコマンドは、このタイプの失敗メッセージを問い合せる方法を示しています:

$ kubectl logs \
    -n verrazzano-system \
    -l app.kubernetes.io/name=oam-kubernetes-runtime | grep forbidden

リソース所有者の確認

Kubernetesは、メタデータ・フィールド内に親子関係を保持します。

次の例は、hello-helidonネームスペースのhello-helidon-ingressという名前のIngressTraitの親を返します:

$ kubectl get IngressTrait \
    -n hello-helidon hello-helidon-ingress \
    -o jsonpath='{range .metadata.ownerReferences[*]}{.name}{"\n"}{end}'

このコマンドの結果は、特定のリソースの系統の識別に役立ちます。

一部のリソースでは、処理中に影響を受けた関連リソースも記録されます。たとえば、IngressTraitの処理時、IngressTraitは関連するGateway、VirtualServiceおよびCertificateリソースを作成します。

次のコマンドは、IngressTraitsの関連リソースを取得する方法の例です:

$ kubectl get IngressTrait \
    -n hello-helidon hello-helidon-ingress \
    -o jsonpath='{range .status.resources[*]}{.kind}: {.name}{"\n"}{end}'

このコマンドの結果は、特定のリソースが影響を与えた他のリソースを特定するのに役立ちます。