Quickstart: Een toepassing implementeren met behulp van de Dapr-clusterextensie voor Azure Kubernetes Service (AKS) of Kubernetes met Arc
In deze quickstart gebruikt u de Dapr-clusterextensie in een Kubernetes-cluster met AKS of Arc. U implementeert een hello world
voorbeeld, dat bestaat uit een Python-toepassing die berichten genereert en een knooppunttoepassing die de berichten verbruikt en persistent maakt.
Vereisten
- Een Azure-abonnement. Als u geen Azure-abonnement hebt, kunt u een gratis account maken.
- Azure CLI of Azure PowerShell geïnstalleerd.
- Een Kubernetes-cluster met AKS of Arc waarvoor de Dapr-clusterextensie is ingeschakeld.
De opslagplaats klonen
Kloon de opslagplaats voor Dapr-quickstarts met behulp van de
git clone
opdracht.git clone https://github.com/dapr/quickstarts.git
Ga naar de
hello-kubernetes
map met behulp vancd
.cd quickstarts/tutorials/hello-kubernetes/
Een statusarchief maken en configureren
Dapr kan veel verschillende statusarchieven gebruiken, zoals Redis, Azure Cosmos DB, DynamoDB en Cassandra, om de status te behouden en op te halen. In dit voorbeeld gebruiken we Redis.
Een Redis-archief maken
Open Azure Portal om de stroom voor het maken van Azure Cache voor Redis te starten.
Vul de benodigde gegevens in.
Selecteer Maken om de implementatie van het Redis-exemplaar te starten.
Noteer de hostnaam van uw Redis-exemplaar, die u kunt ophalen uit de sectie Overzicht in Azure. De hostnaam kan vergelijkbaar zijn met het volgende voorbeeld:
xxxxxx.redis.cache.windows.net:6380
.Navigeer onder Instellingen naar Toegangssleutels om uw toegangssleutels op te halen.
Maak een Kubernetes-geheim om uw Redis-wachtwoord op te slaan met behulp van de
kubectl create secret generic redis
opdracht.kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
De Dapr-onderdelen configureren
Zodra uw archief is gemaakt, moet u de sleutels toevoegen aan het redis.yaml
bestand in de implementatiemap van de Hallo wereld opslagplaats. U vindt here meer informatie.
Vervang de
redisHost
waarde door uw eigen Redis-hoofdadres.Vervang het
redisPassword
door uw eigen geheim.Voeg de volgende twee regels hieronder
redisPassword
toe om verbinding via TLS in te schakelen- name: redisPassword secretKeyRef: name: redis key: redis-password - name: enableTLS value: true
De configuratie toepassen
Pas het
redis.yaml
bestand toe met behulp van dekubectl apply
opdracht.kubectl apply -f ./deploy/redis.yaml
Controleer of uw statusarchief is geconfigureerd met behulp van de
kubectl get components.redis
opdracht.kubectl get components.redis -o yaml
Als het goed is, ziet u uitvoer die vergelijkbaar is met de volgende voorbeelduitvoer:
component.dapr.io/statestore created
De Node.js-app implementeren met de Dapr-sidecar
Pas de Node.js-app-implementatie toe op uw cluster met behulp van de
kubectl apply
opdracht.kubectl apply -f ./deploy/node.yaml
Notitie
Kubernetes-implementaties zijn asynchroon. Dit betekent dat u moet wachten totdat de implementatie is voltooid voordat u verdergaat met de volgende stappen. U kunt dit doen met de volgende opdracht:
kubectl rollout status deploy/nodeapp
Hiermee wordt de Node.js-app geïmplementeerd in Kubernetes. Het Dapr-besturingsvlak injecteert automatisch de Dapr-sidecar naar de pod. Als u het
node.yaml
bestand bekijkt, ziet u hoe Dapr is ingeschakeld voor die implementatie:dapr.io/enabled: true
: geeft aan dat het dapr-besturingsvlak een sidecar aan deze implementatie moet injecteren.dapr.io/app-id: nodeapp
: wijst een unieke id of naam toe aan de Dapr-toepassing, zodat deze berichten kan worden verzonden naar en gecommuniceerd met andere Dapr-apps.
Open uw service met behulp van de
kubectl get svc
opdracht.kubectl get svc nodeapp
Noteer de
EXTERNAL-IP
in de uitvoer.
De service controleren
Roep de service aan met uw
curl
EXTERNAL-IP
.curl $EXTERNAL_IP/ports
Als het goed is, ziet u uitvoer die vergelijkbaar is met de volgende voorbeelduitvoer:
{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
Dien een bestelling in bij de toepassing met behulp van
curl
.curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
Bevestig dat de bestelling is behouden door deze aan te vragen met behulp van
curl
.curl $EXTERNAL_IP/order
Als het goed is, ziet u uitvoer die vergelijkbaar is met de volgende voorbeelduitvoer:
{ "orderId": "42" }
De Python-app implementeren met de Dapr-sidecar
Navigeer in de quickstart naar de Map van de
hello-kubernetes
Python-app en openapp.py
deze.Dit voorbeeld is een eenvoudige Python-app waarmee JSON-berichten
localhost:3500
worden geplaatst. Dit is de standaard luisterpoort voor Dapr. U kunt het eindpunt vanneworder
de Node.js toepassing aanroepen door deze te posten naarv1.0/invoke/nodeapp/method/neworder
. Het bericht bevat enkele gegevens met een gegevensorderId
die één keer per seconde worden verhoogd: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)
Implementeer de Python-app in uw Kubernetes-cluster met behulp van de
kubectl apply
opdracht.kubectl apply -f ./deploy/python.yaml
Notitie
Net als bij de vorige opdracht moet u wachten totdat de implementatie is voltooid voordat u verdergaat met de volgende stappen. U kunt dit doen met de volgende opdracht:
kubectl rollout status deploy/pythonapp
Berichten observeren en persistentie bevestigen
Nu zowel de Node.js als python-toepassingen zijn geïmplementeerd, ziet u berichten die worden weergegeven.
Haal de logboeken van de Node.js-app op met behulp van de
kubectl logs
opdracht.kubectl logs --selector=app=node -c node --tail=-1
Als de implementaties zijn geslaagd, ziet u logboeken zoals de volgende voorbeeldlogboeken:
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
Roep het ordereindpunt van de Node.js-app aan om de nieuwste bestelling op te halen met behulp van
curl
.curl $EXTERNAL_IP/order {"orderID":"42"}
U ziet nu de meest recente JSON in het antwoord.
Resources opschonen
Verwijder de resourcegroep, het cluster, de naamruimte en alle gerelateerde resources met behulp van de opdracht az group delete .
az group delete --name MyResourceGroup