快速入門:使用 Azure Kubernetes Service (AKS) 或已啟用 Arc 的 Kubernetes 的 Dapr 叢集擴充功能部署應用程式
在本快速入門中,您將在 AKS 或已啟用 Arc 的 Kubernetes 叢集中使用 Dapr 叢集擴充功能。 您將部署 hello world
範例,其中包含產生訊息的 Python 應用程式,以及使用並保存訊息的 Node 應用程式。
必要條件
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,您可以建立免費帳戶。
- 已安裝 Azure CLI 或 Azure PowerShell。
- 已啟用 Dapr 叢集擴充功能的 AKS 或已啟用 Arc 的 Kubernetes 叢集。
複製存放庫
使用
git clone
命令來複製 Dapr 快速入門存放庫。git clone https://github.com/dapr/quickstarts.git
使用
cd
變更為hello-kubernetes
目錄。cd quickstarts/tutorials/hello-kubernetes/
建立和設定狀態存放區
Dapr 可以使用多個不同的狀態存放區 (例如 Redis、Azure Cosmos DB、DynamoDB 與 Cassandra) 來保存和擷取狀態。 在此範例中,我們使用 Redis。
建立 Redis 存放區
開啟 Azure 入口網站以啟動 Azure Cache for Redis 建立流程。
填寫必要資訊。
選取 [建立] 以開始 Redis 執行個體部署。
記下 Redis 執行個體的主機名稱,該名稱可從 Azure 中的 [概觀] 區段取得。 主機名稱應會類似於以下範例:
xxxxxx.redis.cache.windows.net:6380
。在 [設定] 下瀏覽至 [存取金鑰] 以取得存取金鑰。
建立 Kubernetes 祕密,以使用
kubectl create secret generic redis
命令儲存 Redis 密碼。kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
設定 Dapr 元件
建立存放區之後,您必須將金鑰新增至 Hello World 存放庫部署目錄中的 redis.yaml
檔案。 您可以在這裡深入了解。
將
redisHost
值取代為自己的 Redis 主要位址。將
redisPassword
值取代為自己的祕密。在
redisPassword
底下新增下列兩行,以透過 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 側車插入 Pod。 如果您查看
node.yaml
檔案,將會看到 Dapr 如何針對該部署啟用:dapr.io/enabled: true
:指示 Dapr 控制平面將側車插入此部署。dapr.io/app-id: nodeapp
:將唯一識別碼或名稱指派給 Dapr 應用程式,以便其傳送訊息給其他 Dapr 應用程式並與其通訊。
使用
kubectl get svc
命令存取服務。kubectl get svc nodeapp
記下輸出中的
EXTERNAL-IP
。
確認服務
使用
curl
和您的EXTERNAL-IP
呼叫服務。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
。此範例為基本 Python 應用程式,可將 JSON 訊息張貼至
localhost:3500
(即 Dapr 的預設接聽連接埠)。 您可以透過張貼至v1.0/invoke/nodeapp/method/neworder
叫用 Node.js 應用程式的neworder
端點。 該訊息包含部分資料,其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。
清除資源
使用 az group delete 命令移除資源群組、叢集、命名空間及所有相關資源。
az group delete --name MyResourceGroup