Sock Shop

Sock Shopマイクロサービス・デモ・アプリケーションの実装

始める前に

インストールの手順に従って、Verrazzanoをインストールします。

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

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

このサンプル・アプリケーションでは、Sock Shopマイクロサービス・デモ・アプリケーションの様々な実装を示します。OAMリソースを使用して、アプリケーション・デプロイメントを定義します。

  1. Sock Shopアプリケーションのネームスペースを作成し、ネームスペースがVerrazzanoによって管理されることを示すラベルを追加します。

    $ kubectl create namespace sockshop
    $ kubectl label namespace sockshop verrazzano-managed=true
    
  2. アプリケーションをデプロイするには、Sock Shop OAMリソースを適用します。helidonmicronautまたはspringバリアントのいずれかをデプロイするよう選択します。

  3. Sock Shopアプリケーションの準備ができるまで待ちます。

    $ kubectl wait \
       --for=condition=Ready pods \
       --all -n sockshop \
       --timeout=300s
    

アプリケーションの探索

Sock Shopマイクロサービス・アプリケーションは、次を含むREST APIエンドポイントを実装します:

  • /catalogue - Sock Shopカタログを返します。このエンドポイントは、GET HTTPリクエスト・メソッドを受け入れます。
  • /register - { "username":"xxx", "password":"***", "email":"foo@example.com", "firstName":"foo", "lastName":"bar" }をPOSTしてユーザーを作成します。このエンドポイントは、POST HTTPリクエスト・メソッドを受け入れます。

ノート: 次の手順では、OKEなどのKubernetes環境を使用していることを前提としています。その他の環境やデプロイメントでは、アドレス、ポートなどを取得するための代替メカニズムが必要になる場合があります。

次のステップに従い、エンドポイントをテストします:

  1. アプリケーション用に生成されたホスト名を取得します。

    $ HOST=$(kubectl get gateways.networking.istio.io \
         -n sockshop \
         -o jsonpath={.items[0].spec.servers[0].hosts[0]})
    $ echo $HOST
    
    # Sample output
    sockshop-appconf.sockshop.11.22.33.44.nip.io
    
  2. istio-ingressgatewayサービスのEXTERNAL_IPアドレスを取得します。

    $ ADDRESS=$(kubectl get service \
         -n istio-system istio-ingressgateway \
         -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    $ echo $ADDRESS
    
    # Sample output
    11.22.33.44
    
  3. Sock Shopアプリケーションにアクセスします:

    • コマンドラインの使用

      # Get catalogue
      $ curl -sk \
         -X GET \
         https://${HOST}/catalogue \
         --resolve ${HOST}:443:${ADDRESS}
      
      # Sample output
      [{"count":115,"description":"For all those leg lovers out there....", ...}]
      
      # Add a new user (replace values of username and password)
      $ 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}
      
      # Add an item to the user's cart
      $ 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}
      
      # Get cart items
      $ 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.ioNO_PROXYリストに追加する必要がある場合があります。

    • 独自のDNS名の使用

      • 独自のDNS名をイングレス・ゲートウェイのEXTERNAL-IPアドレスにポイントします。
      • この場合、Sock Shopアプリケーションをデプロイする前に、sock-shop-app.yamlファイルを編集して、hostsセクション(yourhost.your.domainなど)で適切な値を使用する必要があります。
      • その後、ブラウザを使用してhttps://<yourhost.your.domain>/catalogueでアプリケーションにアクセスできます。
  4. デプロイされたアプリケーションに関連付けられた様々なエンドポイントを使用して、ログやメトリックなどをさらに探索できます。ここの指示に従ってアクセスできます。

トラブルシューティング

  1. アプリケーション構成、コンポーネント、ワークロードおよびイングレス・トレイトがすべて存在することを確認します。

    $ kubectl get ApplicationConfiguration -n sockshop
    $ kubectl get Component -n sockshop
    $ kubectl get VerrazzanoCoherenceWorkload -n sockshop
    $ kubectl get IngressTrait -n sockshop
    
  2. Sock Shopサービス・ポッドが正常に作成され、READY状態に移行していることを確認します。これには数分かかる場合があり、一部のサービスが終了して再起動する場合があります。

     $ kubectl get pods -n sockshop
    
     # Sample output
     NAME             READY   STATUS        RESTARTS   AGE
     carts-coh-0      1/1     Running       0          41s
     catalog-coh-0    1/1     Running       0          40s
     orders-coh-0     1/1     Running       0          39s
     payment-coh-0    1/1     Running       0          37s
     shipping-coh-0   1/1     Running       0          36s
     users-coh-0      1/1     Running       0          35s
    

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

  1. アプリケーションをアンデプロイするには、Sock Shop OAMリソースを削除します。helidonmicronautまたはspringバリアントのいずれかをアンデプロイするよう選択します。

  2. アプリケーション・ポッドの終了後にネームスペースsockshopを削除します。

    $ kubectl delete namespace sockshop