アプリケーション・デプロイメントの問題のトラブルシューティング
アプリケーションのデプロイメント時、oam-kubernetes-runtime
およびverrazzano-application-operator
はKubernetesリソースの生成と更新を通じて連携します。oam-kubernetes-runtime
は、ユーザーが指定したApplicationConfigurationおよびComponentリソースを処理し、ワークロードおよびTraitリソースを生成します。verrazzano-application-operator
は、Verrazzano固有のワークロードおよびTraitリソースを処理します。その後、これらを使用して追加の子および関連リソースが生成されます。
アプリケーション・デプロイメントのトラブルシューティングでは、次の3つの一般的なステップに従う必要があります:
oam-kubernetes-runtime
およびverrazzano-application-operator
オペレータ・ポッドのステータスを確認します。oam-kubernetes-runtime
およびverrazzano-application-operator
オペレータ・ポッドのログを確認します。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}'
このコマンドの結果は、特定のリソースが影響を与えた他のリソースを特定するのに役立ちます。