マルチクラスタHelidon Sock Shop
このサンプル・アプリケーションでは、Sock Shopマイクロサービス・デモ・アプリケーションのHelidon実装を示します。OAMリソースを使用して、マルチクラスタ環境でアプリケーション・デプロイメントを定義します。
始める前に
- インストール手順に従って、マルチクラスタVerrazzano環境を設定します。
- この例では、マルチクラスタ環境に関連付けられている
managed1
という名前の管理対象クラスタがあることを前提としています。環境にその名前のクラスタがない場合、デプロイメント・ファイルを編集し、placement
セクションにリストされているクラスタ名を変更する必要があります。
管理クラスタおよび管理対象クラスタのkubeconfigファイルを指すように、次の環境変数を設定します。
$ export KUBECONFIG_ADMIN=/path/to/your/adminclusterkubeconfig
$ export KUBECONFIG_MANAGED1=/path/to/your/managedclusterkubeconfig
ノート: Sock Shopアプリケーションのデプロイメント・ファイルは、<VERRAZZANO_HOME>/examples/multicluster/sockshop
にあるVerrazzanoプロジェクトに含まれています(<VERRAZZANO_HOME>
は、Verrazzanoプロジェクトのルートです)。
アプリケーションのデプロイ
-
Verrazzanoプロジェクトをデプロイして、Sock Shopアプリケーションのネームスペースを作成します。
$ kubectl --kubeconfig $KUBECONFIG_ADMIN apply \ -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.6.12/examples/multicluster/sock-shop/verrazzano-project.yaml
-
Sock Shop OAMリソースを適用して、アプリケーションをデプロイします。
$ kubectl --kubeconfig $KUBECONFIG_ADMIN apply \ -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.6.12/examples/multicluster/sock-shop/sock-shop-comp.yaml $ kubectl --kubeconfig $KUBECONFIG_ADMIN apply \ -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.6.12/examples/multicluster/sock-shop/sock-shop-app.yaml
-
Sock Shopアプリケーションの準備ができるまで待ちます。ポッド・リソースが管理対象クラスタに表示されるようになるまで、数分かかる場合があります。
$ kubectl --kubeconfig $KUBECONFIG_MANAGED1 wait \ --for=condition=Ready pods \ --all -n mc-sockshop \ --timeout=300s
アプリケーションの探索
Sock Shopマイクロサービス・アプリケーションは、次を含むREST APIエンドポイントを実装します:
/catalogue
- Sock Shopカタログを返します。このエンドポイントは、GET
HTTPリクエスト・メソッドを受け入れます。/register
-{ "username":"xxx", "password":"***", "email":"foo@example.com", "firstName":"foo", "lastName":"coo" }
をPOSTしてユーザーを作成します。このエンドポイントは、POST
HTTPリクエスト・メソッドを受け入れます。
ノート: 次の手順では、OKEなどのKubernetes環境を使用していることを前提としています。その他の環境やデプロイメントでは、アドレス、ポートなどを取得するための代替メカニズムが必要になる場合があります。
次のステップに従い、エンドポイントをテストします
-
アプリケーション用に生成されたホスト名を取得します。
$ HOST=$(kubectl --kubeconfig $KUBECONFIG_MANAGED1 get gateway \ -n mc-sockshop \ -o jsonpath={.items[0].spec.servers[0].hosts[0]}) $ echo $HOST # Sample output sockshop-appconf.mc-sockshop.11.22.33.44.nip.io
-
istio-ingressgateway
サービスのEXTERNAL_IP
アドレスを取得します。$ ADDRESS=$(kubectl --kubeconfig $KUBECONFIG_MANAGED1 get service \ -n istio-system istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') $ echo $ADDRESS # Sample output 11.22.33.44
-
Sock Shopサンプル・アプリケーションにアクセスします
-
コマンドラインの使用
a.カタログを取得します。$ curl -sk \ -X GET \ https://${HOST}/catalogue \ --resolve ${HOST}:443:${ADDRESS} # Sample output [{"count":115,"description":"For all those leg lovers out there....", ...}]
$ curl -i \ --header "Content-Type: application/json" --request POST \ --data '{"username":"foo","password":"****","email":"foo@example.com","firstName":"foo","lastName":"foo"}' \ -k https://${HOST}/register \ --resolve ${HOST}:443:${ADDRESS}
$ curl -i \ --header "Content-Type: application/json" --request POST \ --data '{"itemId": "a0a4f044-b040-410d-8ead-4de0446aec7e","unitPrice": "7.99"}' \ -k https://${HOST}/carts/{username}/items \ --resolve ${HOST}:443:${ADDRESS} # Sample output {"itemId":"a0a4f044-b040-410d-8ead-4de0446aec7e","quantity":1,"unitPrice":7.99}
$ curl -i \ -k https://${HOST}/carts/{username}/items \ --resolve ${HOST}:443:${ADDRESS} # Sample output [{"itemId":"a0a4f044-b040-410d-8ead-4de0446aec7e","quantity":1,"unitPrice":7.99}]
nip.io
を使用している場合は、--resolve
を含める必要はありません。 -
ブラウザによるローカル・テスト
一時的に、
/etc/hosts
ファイル(MacまたはLinuxの場合)またはc:\Windows\System32\Drivers\etc\hosts
ファイル(Windows 10の場合)を変更して、ホスト名をイングレス・ゲートウェイのEXTERNAL-IP
アドレスにマップするエントリを追加します。たとえば:11.22.33.44 sockshop.example.com
その後、ブラウザで
https://sockshop.example.com/catalogue
からアプリケーションにアクセスできます。nip.io
を使用している場合は、HOST
変数(https://${HOST}/catalogue
など)を使用してブラウザでアプリケーションにアクセスできます。- プロキシを使用する場合は、
*.nip.io
をNO_PROXY
リストに追加する必要がある場合があります。
-
独自のDNS名の使用
独自のDNS名をイングレス・ゲートウェイの
EXTERNAL-IP
アドレスにポイントします。- この場合、Sock Shopアプリケーションをデプロイする前に、
sock-shop-app.yaml
ファイルを編集して、hosts
セクション(yourhost.your.domain
など)で適切な値を使用する必要があります。 - その後、ブラウザを使用して
https://<yourhost.your.domain>/catalogue
でアプリケーションにアクセスできます。
- この場合、Sock Shopアプリケーションをデプロイする前に、
-
デプロイされたアプリケーションの確認
-
アプリケーション構成、コンポーネント、ワークロードおよびイングレス・トレイトがすべて存在することを確認します。
$ kubectl --kubeconfig $KUBECONFIG_MANAGED1 get ApplicationConfiguration -n mc-sockshop $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 get Component -n mc-sockshop $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 get VerrazzanoCoherenceWorkload -n mc-sockshop $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 get Coherence -n mc-sockshop $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 get IngressTrait -n mc-sockshop
-
Sock Shopサービス・ポッドが正常に作成され、
READY
状態に移行していることを確認します。これには数分かかる場合があり、一部のサービスが終了して再起動する場合があります。$ kubectl --kubeconfig $KUBECONFIG_MANAGED1 get pods -n mc-sockshop # Sample output NAME READY STATUS RESTARTS AGE carts-coh-0 2/2 Running 0 38m catalog-coh-0 2/2 Running 0 38m orders-coh-0 2/2 Running 0 38m payment-coh-0 2/2 Running 0 38m shipping-coh-0 2/2 Running 0 38m users-coh-0 2/2 Running 0 38m
-
デプロイされたSock Shopアプリケーションに関連するログやメトリックなどをさらに調査するために、様々なエンドポイントを使用できます。ここの指示に従ってアクセスできます。
アプリケーションのアンデプロイ
場所に関係なく、アプリケーションをアンデプロイするには、アプリケーション・リソースとプロジェクトを管理クラスタから削除します。アンデプロイは、アプリケーションが配置されているすべてのクラスタに影響します。
-
アプリケーションをアンデプロイするには、Sock Shop OAMリソースを削除します:
$ kubectl --kubeconfig $KUBECONFIG_ADMIN delete \ -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.6.12/examples/multicluster/sock-shop/sock-shop-app.yaml $ kubectl --kubeconfig $KUBECONFIG_ADMIN delete \ -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.6.12/examples/multicluster/sock-shop/sock-shop-comp.yaml
-
プロジェクトを削除します。
$ kubectl --kubeconfig $KUBECONFIG_ADMIN delete \ -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.6.12/examples/multicluster/sock-shop/verrazzano-project.yaml
-
アプリケーション・ポッドの終了後にネームスペース
mc-sockshop
を削除します。$ kubectl --kubeconfig $KUBECONFIG_ADMIN delete namespace mc-sockshop $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 delete namespace mc-sockshop