クイックスタート: Azure Kubernetes Service (AKS) または Arc 対応 Kubernetes 用の Dapr クラスター拡張機能を使用してアプリケーションをデプロイする

このクイックスタートでは、AKS または Arc 対応 Kubernetes クラスターで Dapr クラスター拡張機能を使用します。 hello world の例をデプロイします。これは、メッセージを生成する Python アプリケーションと、メッセージを使用して保持する Node アプリケーションで構成されます。

前提条件

リポジトリの複製

  1. git clone コマンドを使用して、Dapr quickstarts リポジトリをクローンします。

    git clone https://github.com/dapr/quickstarts.git
    
  2. cd を使用して hello-kubernetes ディレクトリに移動します。

    cd quickstarts/tutorials/hello-kubernetes/
    

状態ストアの作成と構成

Dapr は、さまざまな状態ストア (Redis、Azure Cosmos DB、DynamoDB、Cassandra など) を使用して、状態を保持および取得できます。 この例では、Redis を使用します。

Redis ストアを作成する

  1. Azure portal を開いて、Azure Cache for Redis の作成フローを開始します。

  2. 必要な情報を入力します。

  3. [作成] を選択して、Redis インスタンスのデプロイを開始します。

  4. Redis インスタンスのホスト名をメモしておきます。これは、Azure の [概要] セクションから取得できます。 ホスト名は、次の例のようになります: xxxxxx.redis.cache.windows.net:6380

  5. [設定][アクセス キー] に移動して、アクセス キーを取得します。

  6. kubectl create secret generic redis コマンドを使用して、Redis パスワードを格納する Kubernetes シークレットを作成します。

    kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
    

Dapr コンポーネントを構成する

ストアを作成したら、Hello World リポジトリの deploy ディレクトリにある redis.yaml ファイルにキーを追加する必要があります。 詳細については、ここを参照してください。

  1. redisHost 値を独自の Redis マスター アドレスに置き換えます。

  2. redisPassword を独自のシークレットに置き換えます。

  3. redisPassword の下に次の 2 行を追加して、TLS 経由の接続を有効にします。

    - name: redisPassword
        secretKeyRef:
          name: redis
          key: redis-password
    - name: enableTLS
      value: true
    

構成を適用する

  1. kubectl apply コマンドを使用して redis.yaml ファイルを適用します。

    kubectl apply -f ./deploy/redis.yaml
    
  2. kubectl get components.redis コマンドを使用して、状態ストアが正常に構成されたことを確認します。

    kubectl get components.redis -o yaml
    

    次の例のような出力が表示されます。

    component.dapr.io/statestore created
    

Dapr サイドカーを使用して Node.js アプリをデプロイする

  1. kubectl apply コマンドを使用して、クラスターに Node.js アプリのデプロイを適用します。

    kubectl apply -f ./deploy/node.yaml
    

    注意

    Kubernetes のデプロイは非同期的に行われます。これは、デプロイが完了するまで待ってから次の手順に移動する必要があることを意味します。 これを行うには、次のコマンドを使います。

    kubectl rollout status deploy/nodeapp
    

    これにより、Node.js アプリが Kubernetes にデプロイされます。 Dapr コントロール プレーンによって、Dapr サイドカーがポッドに自動的に挿入されます。 node.yaml ファイルを確認すると、そのデプロイに対して Dapr がどのように有効になっているかがわかります。

    • dapr.io/enabled: true: Dapr コントロール プレーンに対して、このデプロイにサイドカーを挿入するように指示しています。
    • dapr.io/app-id: nodeapp: Dapr アプリケーションに一意の ID または名前が割り当てられます。そのため、他の Dapr アプリとの間でメッセージを送受信できるようになります。
  2. kubectl get svc コマンドを使用して、サービスにアクセスします。

    kubectl get svc nodeapp
    
  3. 出力内の EXTERNAL-IP をメモします。

サービスを確認する

  1. EXTERNAL-IP を指定して curl を使用してサービスを呼び出します。

    curl $EXTERNAL_IP/ports
    

    次の例のような出力が表示されます。

    {"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
    
  2. curl を使用して、アプリケーションに命令を送信します。

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. curl を使用して、命令を要求することによって、命令が保持されていることを確認します。

    curl $EXTERNAL_IP/order
    

    次の例のような出力が表示されます。

    { "orderId": "42" }
    

Dapr サイドカーを使用して Python アプリをデプロイする

  1. hello-kubernetes クイックスタートで Python アプリのディレクトリに移動し、app.py を開きます。

    この例は JSON メッセージを localhost:3500 に投稿する基本的な Python アプリで、Dapr の既定のリスニング ポートです。 v1.0/invoke/nodeapp/method/neworder にポストすることによって、Node.js アプリケーションの neworder エンドポイントを呼び出すことができます。 メッセージには、1 秒間に 1 回ずつ増分される orderId を持つデータが含まれています。

    n = 0
    while True:
        n += 1
        message = {"data": {"orderId": n}}
    
        try:
            response = requests.post(dapr_url, json=message)
        except Exception as e:
            print(e)
    
        time.sleep(1)
    
  2. kubectl apply コマンドを使用して、Python アプリを Kubernetes クラスターにデプロイします。

    kubectl apply -f ./deploy/python.yaml
    

    注意

    前のコマンドと同様に、デプロイが完了するまで待ってから次の手順に移動する必要があります。 これを行うには、次のコマンドを使います。

    kubectl rollout status deploy/pythonapp
    

メッセージを監視し、永続化を確認する

Node.js と Python の両方のアプリケーションがデプロイされたので、メッセージを見ることができます。

  1. kubectl logs コマンドを使用して、Node.js アプリのログを取得します。

    kubectl logs --selector=app=node -c node --tail=-1
    

    デプロイが成功した場合は、次の例のようなログが表示されます。

    Got a new order! Order ID: 1
    Successfully persisted state
    Got a new order! Order ID: 2
    Successfully persisted state
    Got a new order! Order ID: 3
    Successfully persisted state
    
  2. curl を使用して、Node.js アプリの命令エンドポイントを呼び出して、最新の命令を取得します。

    curl $EXTERNAL_IP/order
    {"orderID":"42"}
    

    応答に最新の JSON が表示されます。

リソースをクリーンアップする

  • az group delete コマンドを使用して、リソース グループ、クラスター、名前空間、すべての関連リソースを削除します。

    az group delete --name MyResourceGroup
    

次のステップ