快速入門:使用 Azure Kubernetes Service (AKS) 或已啟用 Arc 的 Kubernetes 的 Dapr 叢集擴充功能部署應用程式

在本快速入門中,您將在 AKS 或已啟用 Arc 的 Kubernetes 叢集中使用 Dapr 叢集擴充功能。 您將部署 hello world 範例,其中包含產生訊息的 Python 應用程式,以及使用並保存訊息的 Node 應用程式。

必要條件

複製存放庫

  1. 使用 git clone 命令來複製 Dapr 快速入門存放庫

    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 入口網站以啟動 Azure Cache for Redis 建立流程。

  2. 填寫必要資訊。

  3. 選取 [建立] 以開始 Redis 執行個體部署。

  4. 記下 Redis 執行個體的主機名稱,該名稱可從 Azure 中的 [概觀] 區段取得。 主機名稱應會類似於以下範例:xxxxxx.redis.cache.windows.net:6380

  5. 在 [設定] 下瀏覽至 [存取金鑰] 以取得存取金鑰。

  6. 建立 Kubernetes 祕密,以使用 kubectl create secret generic redis 命令儲存 Redis 密碼。

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

設定 Dapr 元件

建立存放區之後,您必須將金鑰新增至 Hello World 存放庫部署目錄中的 redis.yaml 檔案。 您可以在這裡深入了解。

  1. redisHost 值取代為自己的 Redis 主要位址。

  2. redisPassword 值取代為自己的祕密。

  3. redisPassword 底下新增下列兩行,以透過 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 側車插入 Pod。 如果您查看 node.yaml 檔案,將會看到 Dapr 如何針對該部署啟用:

    • dapr.io/enabled: true:指示 Dapr 控制平面將側車插入此部署。
    • dapr.io/app-id: nodeapp:將唯一識別碼或名稱指派給 Dapr 應用程式,以便其傳送訊息給其他 Dapr 應用程式並與其通訊。
  2. 使用 kubectl get svc 命令存取服務。

    kubectl get svc nodeapp
    
  3. 記下輸出中的 EXTERNAL-IP

確認服務

  1. 使用 curl 和您的 EXTERNAL-IP 呼叫服務。

    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

    此範例為基本 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)
    
  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
    

下一步