Snabbstart: Distribuera ett program med dapr-klustertillägget (förhandsversion) för Azure Kubernetes Service (AKS)

I den här snabbstarten lär du dig att använda Dapr-klustertillägget i ett AKS-kluster. Du kommer att distribuera ett Hello World-exempel som består av ett Python-program som genererar meddelanden och ett Node-program som använder och bevarar dem.

Viktigt

AKS-förhandsgranskningsfunktioner är tillgängliga via självbetjäning och avanmälning. Förhandsgranskningar tillhandahålls i "i dess omfattning" och "i den omfattning som är tillgänglig", och de är undantagna från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupporten baserat på bästa möjliga resultat. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:

Förutsättningar

Klona lagringsplatsen

För att hämta de filer som du kommer att använda för att distribuera exempelprogrammet klonar du lagringsplatsen Snabbstarter och ändrar till hello-kubernetes katalogen:

git clone https://github.com/dapr/quickstarts.git
cd quickstarts/hello-kubernetes

Skapa och konfigurera ett tillståndslager

Dapr kan använda ett antal olika tillståndslager (Redis, CosmosDB, DynamoDB, Cassandra osv.) för att bevara och hämta tillstånd. I det här exemplet använder vi Redis.

Skapa en Redis-butik

  1. Öppna Azure Portal för att starta azure-Redis Cache skapa flödet.
  2. Fyll i nödvändig information
  3. Klicka på "Skapa" för att starta distributionen av Redis-instansen.
  4. Anteckna värdnamnet för din Redis-instans, som du kan hämta från "Översikt" i Azure. Det bör se ut som xxxxxx.redis.cache.windows.net:6380 .
  5. När instansen har skapats måste du hämta din åtkomstnyckel. Gå till "Åtkomstnycklar" under "Inställningar" och skapa en Kubernetes-hemlighet för att lagra ditt Redis-lösenord:
kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>

Konfigurera Dapr-komponenterna

När din butik har skapats måste du lägga till nycklarna i filen redis.yaml i katalogen deploy för den Hello World lagringsplatsen. Ersätt värdet redisHost med din egen Redis-huvudadress och redisPassword med din egen hemlighet. Du kan läsa mer här.

Du måste också lägga till följande två rader nedan för redisPassword att aktivera anslutning via TLS:

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

Tillämpa konfigurationen

Tillämpa redis.yaml filen:

kubectl apply -f ./deploy/redis.yaml

Kontrollera att tillståndslagret har konfigurerats i utdata:

component.dapr.io/statestore created

Distribuera Node.js med Dapr-sidovagnen

Använd Node.js-appens distribution till klustret:

kubectl apply -f ./deploy/node.yaml

Anteckning

Kubernetes-distributioner är asynkrona. Det innebär att du måste vänta tills distributionen har slutförts innan du går vidare till nästa steg. Du kan göra det med följande kommando:

kubectl rollout status deploy/nodeapp

Då distribueras Node.js till Kubernetes. Dapr-kontrollplanet matar automatiskt in Dapr-sidovagnen i podden. Om du tar en titt på node.yaml filen ser du hur Dapr är aktiverat för distributionen:

  • dapr.io/enabled: true – detta talar om för Dapr-kontrollplanet att mata in en sidovagn till den här distributionen.

  • dapr.io/app-id: nodeapp – Detta tilldelar ett unikt ID eller namn till Dapr-programmet, så att det kan skickas meddelanden till och kommuniceras med av andra Dapr-appar.

Du kommer åt din tjänst genom att hämta och anteckna EXTERNAL-IP via kubectl :

kubectl get svc nodeapp

Verifiera tjänsten

Anropa tjänsten genom att köra:

curl $EXTERNAL_IP/ports

Du bör se utdata som liknar följande:

{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}

Skicka sedan en order till programmet:

curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder

Bekräfta att ordern har bevarats genom att begära den:

curl $EXTERNAL_IP/order

Du bör se utdata som liknar följande:

{ "orderId": "42" }

Tips

Det här är ett bra tillfälle att bekanta dig med Dapr-instrumentpanelen– ett praktiskt gränssnitt för att kontrollera status, information och loggar för program som körs på Dapr. Följande kommando gör det tillgängligt på http://localhost:8080/ :

kubectl port-forward svc/dapr-dashboard -n dapr-system 8080:8080

Distribuera Python-appen med Dapr-sidovagnen

Ta en snabb titt på Python-appen. Gå till Python-appkatalogen i hello-kubernetes snabbstarten och öppna app.py .

Det här är en grundläggande Python-app som publicerar JSON-meddelanden till localhost:3500 , vilket är standardporten för lyssning för Dapr. Du kan anropa Node.js-programmets neworder slutpunkt genom att publicera till v1.0/invoke/nodeapp/method/neworder . Meddelandet innehåller vissa data med en orderId som ökar en gång per sekund:

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)

Distribuera Python-appen till ditt Kubernetes-kluster:

kubectl apply -f ./deploy/python.yaml

Anteckning

Som med ovan väntar följande kommando på att distributionen ska slutföras:

kubectl rollout status deploy/pythonapp

Observera meddelanden och bekräfta beständighet

Nu när både Node.js- och Python-programmen har distribuerats kan du titta på meddelanden.

Hämta loggarna för Node.js appen:

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

Om distributionerna lyckades bör du se loggar som dessa:

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

Anropa Node.js-appens orderslutpunkt för att hämta den senaste ordern. Hämta den externa IP-adress som du sparade tidigare och lägg till "/order" och utför en GET-begäran mot den (ange den i webbläsaren, använd Postman eller curl den!):

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

Du bör se den senaste JSON-informationen i svaret.

Rensa resurser

Använd kommandot az group delete för att ta bort resursgruppen, AKS-klustret, namnområdet och alla relaterade resurser.

az group delete --name MyResourceGroup

Nästa steg

När du har distribuerat det här exempelprogrammet: