マルチクラスタHello World Helidon

マルチクラスタ環境にデプロイされるHello World Helidonサンプル。このサンプルは、アプリケーションの配置を別のクラスタに変更する方法も示しています。

Hello World Helidonの例は、起動されると、"Hello World"レスポンスを返すHelidonベースのサービスです。サンプル・アプリケーションは、Open Application Model (OAM)コンポーネントとアプリケーション構成YAMLファイルを使用して指定され、それらのファイルを適用してデプロイされます。この例は、マルチクラスタ環境にHello World Helidonアプリケーションをデプロイする方法を示しています。

始める前に

ここの手順に従って、1つの管理クラスタおよび1つの管理対象クラスタでマルチクラスタVerrazzanoインストールを作成し、管理対象クラスタを登録します。

管理クラスタおよび管理対象クラスタのkubeconfigファイルを指すように、次の環境変数を設定します。

$ export KUBECONFIG_ADMIN=/path/to/your/adminclusterkubeconfig
$ export KUBECONFIG_MANAGED1=/path/to/your/managedclusterkubeconfig

ノート: Hello World Helidonアプリケーションのデプロイメント・ファイルは、<VERRAZZANO_HOME>/examples/multicluster/hello-helidonにあるVerrazzanoプロジェクトに含まれています(<VERRAZZANO_HOME>はVerrazzanoプロジェクトのルートです)。

アプリケーション・ネームスペースの作成

アプリケーションのネームスペースを定義する管理クラスタにVerrazzanoProjectリソースを適用します。VerrazzanoProjectリソースで定義されたネームスペースは、管理クラスタおよびすべての管理対象クラスタで作成されます。

$ kubectl --kubeconfig $KUBECONFIG_ADMIN apply \
    -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.4.8/examples/multicluster/hello-helidon/verrazzano-project.yaml

アプリケーションのデプロイ

  1. hello-helidonマルチクラスタ・アプリケーション構成リソースを適用して、アプリケーションをデプロイします。マルチクラスタ・リソースは、OAMリソースとデプロイするクラスタのリストを含むエンベロープです。

    $ kubectl --kubeconfig $KUBECONFIG_ADMIN apply \
        -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.4.8/examples/multicluster/hello-helidon/hello-helidon-comp.yaml
    $ kubectl --kubeconfig $KUBECONFIG_ADMIN apply \
        -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.4.8/examples/multicluster/hello-helidon/mc-hello-helidon-app.yaml
    
  2. 管理対象クラスタでアプリケーションの準備ができるまで待ちます。

    $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 wait \
        --for=condition=Ready pods \
        --all -n hello-helidon \
        --timeout=300s
    

サンプル・アプリケーションの探索

単一クラスタ例のHello World Helidonアプリケーションの探索の手順に従います。サンプル・アプリケーションをテストするには、管理対象クラスタのkubeconfigファイルを使用します。

デプロイされたアプリケーションの確認

単一クラスタ例のHello World Helidonアプリケーションのトラブルシューティングの手順に従います。サンプル・アプリケーションをトラブルシューティングするには、管理対象クラスタのkubeconfigファイルを使用します。

  1. アプリケーション・ネームスペースが管理対象クラスタに存在することを確認します。

    $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 get namespace hello-helidon
    
  2. アプリケーションのマルチクラスタ・リソースが存在することを確認します。

    $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 get MultiClusterApplicationConfiguration -n hello-helidon
    

別のクラスタへのアプリケーションの配置

デフォルトでは、アプリケーションはmanaged1という管理対象クラスタにあります。アプリケーションの場所を別のクラスタ(管理クラスタまたは別の管理対象クラスタ)に変更できます。この例では、マルチクラスタ・リソースにパッチを適用して、アプリケーションの配置を管理クラスタに変更します。

  1. アプリケーションの場所を管理クラスタに変更するには、配置変更パッチ・ファイルを指定します。

    # To change the placement to the admin cluster
    $ export CHANGE_PLACEMENT_PATCH_FILE="https://raw.githubusercontent.com/verrazzano/verrazzano/v1.4.8/examples/multicluster/hello-helidon/patch-change-placement-to-admin.yaml"
    

    この環境変数は以降のステップで使用されます。

  2. 配置を変更するには、hello-helidonマルチクラスタ・アプリケーション構成にパッチを適用します。

    $ kubectl --kubeconfig $KUBECONFIG_ADMIN patch mcappconf hello-helidon-appconf \
        -n hello-helidon \
        --type merge \
        --patch "$(curl -s $CHANGE_PLACEMENT_PATCH_FILE)"
    
    # Expected response
    multiclusterapplicationconfiguration.clusters.verrazzano.io/hello-helidon-appconf patched
    
  3. 配置が変更されたことを確認するには、マルチクラスタ・リソースを表示します。

    $ kubectl --kubeconfig $KUBECONFIG_ADMIN get mcappconf hello-helidon-appconf \
        -n hello-helidon \
        -o jsonpath='{.spec.placement}';echo
    
    # Expected response
    {"clusters":[{"name":"local"}]}
    

    クラスタ名localは、管理クラスタ内の配置を示します。

  4. 配置を変更するには、VerrazzanoProjectにパッチを適用します。

    $ kubectl --kubeconfig $KUBECONFIG_ADMIN patch vp hello-helidon \
        -n verrazzano-mc \
        --type merge \
        --patch "$(curl -s $CHANGE_PLACEMENT_PATCH_FILE)"
    
    # Expected response
    verrazzanoproject.clusters.verrazzano.io/hello-helidon patched
    
  5. 管理クラスタでアプリケーションの準備ができるまで待ちます。

    $ kubectl --kubeconfig $KUBECONFIG_ADMIN wait \
        --for=condition=Ready pods \
        --all -n hello-helidon \
        --timeout=300s
    

    ノート: アプリケーションを管理対象クラスタに戻す場合は、かわりに管理対象クラスタでアプリケーションの準備ができるまで待ちます。

    $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 wait \
        --for=condition=Ready pods \
        --all -n hello-helidon \
        --timeout=300s
    
  6. これで、新しい場所で実行されているサンプル・アプリケーションをテストできます。

    managed1という名前の管理対象クラスタにアプリケーションを戻すには、CHANGE_PLACEMENT_PATCH_FILE環境変数の値を、その目的のために提供されたパッチ・ファイルに設定し、前の番号付きステップを繰り返します。

    # To change the placement back to the managed cluster named managed1
    $ export CHANGE_PLACEMENT_PATCH_FILE="https://raw.githubusercontent.com/verrazzano/verrazzano/v1.4.8/examples/multicluster/hello-helidon/patch-return-placement-to-managed1.yaml"
    

アプリケーションのアンデプロイ

場所に関係なく、アプリケーションをアンデプロイするには、アプリケーション・リソースとプロジェクトを管理クラスタから削除します。アンデプロイは、アプリケーションが配置されているすべてのクラスタに影響します。

  1. アプリケーションをアンデプロイするには、Hello World Helidon OAMリソースを削除します。

    $ kubectl --kubeconfig $KUBECONFIG_ADMIN delete \
        -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.4.8/examples/multicluster/hello-helidon/mc-hello-helidon-app.yaml
    $ kubectl --kubeconfig $KUBECONFIG_ADMIN delete \
        -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.4.8/examples/multicluster/hello-helidon/hello-helidon-comp.yaml
    
  2. プロジェクトを削除します。

    $ kubectl --kubeconfig $KUBECONFIG_ADMIN delete \
        -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.4.8/examples/multicluster/hello-helidon/verrazzano-project.yaml
    
  3. アプリケーション・ポッドの終了後にネームスペースhello-helidonを削除します。

    $ kubectl --kubeconfig $KUBECONFIG_ADMIN delete namespace hello-helidon
    $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 delete namespace hello-helidon