クイックスタート: Azure Kubernetes Service (AKS) または Arc 対応 Kubernetes 用の Dapr クラスター拡張機能を使用してアプリケーションをデプロイする
[アーティクル] 2024/08/02
11 人の共同作成者
フィードバック
この記事の内容
前提条件
リポジトリの複製
状態ストアの作成と構成
Dapr サイドカーを使用して Node.js アプリをデプロイする
Dapr サイドカーを使用して Python アプリをデプロイする
メッセージを監視し、永続化を確認する
リソースをクリーンアップする
次のステップ
さらに 4 個を表示
このクイックスタートでは、AKS または Arc 対応 Kubernetes クラスターで Dapr クラスター拡張機能 を使用します。 hello world
の例をデプロイします。これは、メッセージを生成する Python アプリケーションと、メッセージを使用して保持する Node アプリケーションで構成されます。
git clone
コマンドを使用して、Dapr quickstarts リポジトリ をクローンします。
git clone https://github.com/dapr/quickstarts.git
cd
を使用して hello-kubernetes
ディレクトリに移動します。
cd quickstarts/tutorials/hello-kubernetes/
Dapr は、さまざまな状態ストア (Redis、Azure Cosmos DB、DynamoDB、Cassandra など) を使用して、状態を保持および取得できます。 この例では、Redis を使用します。
Azure portal を開いて、Azure Cache for Redis の作成フローを開始します。
必要な情報を入力します。
[作成] を選択して、Redis インスタンスのデプロイを開始します。
Redis インスタンスのホスト名をメモしておきます。これは、Azure の [概要] セクションから取得できます。 ホスト名は、次の例のようになります: xxxxxx.redis.cache.windows.net:6380
[設定] で [アクセス キー] に移動して、アクセス キーを取得します。
kubectl create secret generic redis
コマンドを使用して、Redis パスワードを格納する Kubernetes シークレットを作成します。
kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
ストアを作成したら、Hello World リポジトリの deploy ディレクトリにある redis.yaml
ファイルにキーを追加する必要があります。 詳細については、ここ を参照してください。
redisHost
値を独自の Redis マスター アドレスに置き換えます。
redisPassword
を独自のシークレットに置き換えます。
redisPassword
の下に次の 2 行を追加して、TLS 経由の接続を有効にします。
- name: redisPassword
secretKeyRef:
name: redis
key: redis-password
- name: enableTLS
value: true
kubectl apply
コマンドを使用して redis.yaml
ファイルを適用します。
kubectl apply -f ./deploy/redis.yaml
kubectl get components.redis
コマンドを使用して、状態ストアが正常に構成されたことを確認します。
kubectl get components.redis -o yaml
次の例のような出力が表示されます。
component.dapr.io/statestore created
Dapr サイドカーを使用して Node.js アプリをデプロイする
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 アプリとの間でメッセージを送受信できるようになります。
kubectl get svc
コマンドを使用して、サービスにアクセスします。
kubectl get svc nodeapp
出力内の EXTERNAL-IP
をメモします。
EXTERNAL-IP
を指定して curl
を使用してサービスを呼び出します。
curl $EXTERNAL_IP/ports
次の例のような出力が表示されます。
{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
curl
を使用して、アプリケーションに命令を送信します。
curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
curl
を使用して、命令を要求することによって、命令が保持されていることを確認します。
curl $EXTERNAL_IP/order
次の例のような出力が表示されます。
{ "orderId": "42" }
Dapr サイドカーを使用して Python アプリをデプロイする
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)
kubectl apply
コマンドを使用して、Python アプリを Kubernetes クラスターにデプロイします。
kubectl apply -f ./deploy/python.yaml
注意
前のコマンドと同様に、デプロイが完了するまで待ってから次の手順に移動する必要があります。 これを行うには、次のコマンドを使います。
kubectl rollout status deploy/pythonapp
Node.js と Python の両方のアプリケーションがデプロイされたので、メッセージを見ることができます。
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
curl
を使用して、Node.js アプリの命令エンドポイントを呼び出して、最新の命令を取得します。
curl $EXTERNAL_IP/order
{"orderID":"42"}
応答に最新の JSON が表示されます。