Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Dans cette procédure pas à pas, vous déployez une application Dapr sur le cluster. L’application Dapr consomme des données MQTT simulées publiées sur MQTT broker, applique une fonction de fenêtrage, puis publie le résultat sur MQTT broker. La sortie publiée représente la façon dont les gros volumes de données peuvent être agrégés sur la périphérie pour réduire la fréquence et la taille des messages. L’application Dapr est sans état et utilise le magasin d’états de MQTT broker pour mettre en cache les valeurs antérieures nécessaires pour les calculs de fenêtre.
L'application Dapr effectue les étapes suivantes :
- S’abonne à la rubrique
sensor/datapour les données de capteur. - Quand des données sont reçues sur la rubrique, elles sont publiées au magasin d’états de MQTT broker.
- Toutes les 10 secondes, il extrait les données du magasin d’états et calcule les valeurs minimale, maximale, moyenne, médiane et 75e centile sur les données de capteur horodatées au cours des 30 dernières secondes.
- Les données antérieures à ces 30 secondes sont expirées dans le magasin d’états.
- Le résultat est publié dans la rubrique
sensor/window_dataau format JSON.
Remarque
Ce tutoriel désactive Dapr CloudEvents, ce qui lui permet de publier et de s’abonner avec le protocole MQTT brut.
Conditions préalables
- Opérations Azure IoT installé – Démarrage rapide : Exécuter Opérations Azure IoT dans GitHub Codespaces avec K3s
- Composants Dapr de MQTT broker installés – Installer des composants Dapr de MQTT broker
Déployer l’application Dapr
À ce stade, vous pouvez déployer l’application Dapr. L’inscription des composants ne déploie pas le binaire associé empaqueté dans un conteneur. Pour déployer le binaire avec votre application, vous pouvez utiliser un déploiement pour regrouper l’application Dapr conteneurisée et les deux composants ensemble.
Pour commencer, créez un fichier yaml qui utilise les définitions suivantes :
| Composant | Descriptif |
|---|---|
volumes.mqtt-client-token |
Le SAT utilisé pour authentifier les composants Dapr enfichables avec MQTT broker et le magasin d’états |
volumes.aio-internal-ca-cert-chain |
Chaîne d’approbation pour valider le certificat TLS du MQTT broker |
containers.mq-event-driven |
Conteneur d’application Dapr prédéfini. |
Enregistrez le yaml de déploiement suivant dans un fichier nommé
app.yaml:apiVersion: v1 kind: ServiceAccount metadata: name: dapr-client namespace: azure-iot-operations annotations: aio-broker-auth/group: dapr-workload --- apiVersion: apps/v1 kind: Deployment metadata: name: mq-event-driven-dapr namespace: azure-iot-operations spec: selector: matchLabels: app: mq-event-driven-dapr template: metadata: labels: app: mq-event-driven-dapr annotations: dapr.io/enabled: "true" dapr.io/inject-pluggable-components: "true" dapr.io/app-id: "mq-event-driven-dapr" dapr.io/app-port: "6001" dapr.io/app-protocol: "grpc" spec: serviceAccountName: dapr-client volumes: # SAT token used to authenticate between Dapr and the MQTT broker - name: mqtt-client-token projected: sources: - serviceAccountToken: path: mqtt-client-token audience: aio-internal expirationSeconds: 86400 # Certificate chain for Dapr to validate the MQTT broker - name: aio-ca-trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle containers: - name: mq-event-driven-dapr image: ghcr.io/azure-samples/explore-iot-operations/mq-event-driven-dapr:latestDéployez l’application en exécutant la commande suivante :
kubectl apply -f app.yamlVérifiez que l’application a été déployée avec succès. Le pod doit signaler que tous les conteneurs sont prêts après un court intervalle, comme indiqué avec la commande suivante :
kubectl get pods -l app=mq-event-driven-dapr -n azure-iot-operationsAvec la sortie suivante :
NAME READY STATUS RESTARTS AGE mq-event-driven-dapr 3/3 Running 0 30s
Déployer le simulateur
Simuler des données de test en déployant une charge de travail Kubernetes. Il simule un capteur en envoyant périodiquement des échantillons de lectures de température, de vibration et de pression au MQTT broker en utilisant un client MQTT sur la rubrique sensor/data.
Déployer le simulateur à partir du référentiel Explorer Opérations IoT :
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/tutorials/mq-event-driven-dapr/simulate-data.yamlVérifiez que le simulateur s’exécute correctement :
kubectl logs deployment/mqtt-publisher-deployment -n azure-iot-operations -fAvec la sortie suivante :
Get:1 http://deb.debian.org/debian stable InRelease [151 kB] Get:2 http://deb.debian.org/debian stable-updates InRelease [52.1 kB] Get:3 http://deb.debian.org/debian-security stable-security InRelease [48.0 kB] Get:4 http://deb.debian.org/debian stable/main amd64 Packages [8780 kB] Get:5 http://deb.debian.org/debian stable-updates/main amd64 Packages [6668 B] Get:6 http://deb.debian.org/debian-security stable-security/main amd64 Packages [101 kB] Fetched 9139 kB in 3s (3570 kB/s) ... Messages published in the last 10 seconds: 10 Messages published in the last 10 seconds: 10 Messages published in the last 10 seconds: 10
Déployer un client MQTT
Pour vérifier que le pont MQTT fonctionne, déployez un client MQTT sur le cluster.
Dans un nouveau fichier nommé
client.yaml, spécifiez le déploiement du client :apiVersion: v1 kind: ServiceAccount metadata: name: mqtt-client namespace: azure-iot-operations --- apiVersion: v1 kind: Pod metadata: name: mqtt-client namespace: azure-iot-operations spec: serviceAccountName: mqtt-client containers: - image: alpine name: mqtt-client command: ["sh", "-c"] args: ["apk add mosquitto-clients mqttui && sleep infinity"] volumeMounts: - name: mqtt-client-token mountPath: /var/run/secrets/tokens - name: aio-ca-trust-bundle mountPath: /var/run/certs/aio-internal-ca-cert/ volumes: - name: mqtt-client-token projected: sources: - serviceAccountToken: path: mqtt-client-token audience: aio-internal expirationSeconds: 86400 - name: aio-ca-trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundleAppliquez le fichier de déploiement avec kubectl :
kubectl apply -f client.yamlVérifiez la sortie :
pod/mqtt-client created
Vérifier la sortie de l’application Dapr
Ouvrez un interpréteur de commandes sur le pod client Mosquitto :
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- shAbonnez-vous à la rubrique
sensor/window_datapour observer la sortie publiée depuis l’application Dapr :mosquitto_sub -L mqtt://aio-broker/sensor/window_dataVérifiez que l’application génère un calcul des fenêtres glissantes pour les différents capteurs toutes les 10 secondes :
{ "timestamp": "2023-11-16T21:59:53.939690+00:00", "window_size": 30, "temperature": { "min": 553.024, "max": 598.907, "mean": 576.4647857142858, "median": 577.4905, "75_per": 585.96125, "count": 28 }, "pressure": { "min": 290.605, "max": 299.781, "mean": 295.521, "median": 295.648, "75_per": 297.64050000000003, "count": 28 }, "vibration": { "min": 0.00124192, "max": 0.00491257, "mean": 0.0031171810714285715, "median": 0.003199235, "75_per": 0.0038769150000000003, "count": 28 } }
Facultatif - Créer l’application Dapr
Ce tutoriel utilise un conteneur prédéfini de l’application Dapr. Si vous souhaitez modifier et générer le code vous-même, suivez ces étapes :
Conditions préalables
- Docker : pour la création du conteneur d’applications
- Registre de conteneurs : pour l’hébergement du conteneur d’applications
Créer l’application
Clonez le référentiel Explorer les opérations IoT :
git clone https://github.com/Azure-Samples/explore-iot-operationsModification apportée au répertoire du tutoriel Dapr :
cd explore-iot-operations/tutorials/mq-event-driven-dapr/srcCréez l’image Docker :
docker build docker build . -t mq-event-driven-daprPour utiliser l’application dans votre cluster Kubernetes, vous devez envoyer (push) l’image à un registre de conteneurs tel qu’Azure Container Registry. Vous pouvez également envoyer (push) à un registre de conteneurs local tel que minikube ou Docker.
docker tag mq-event-driven-dapr <container-alias> docker push <container-alias>Mettez à jour votre
app.yamlpour extraire votre image nouvellement créée.
Résolution des problèmes
Si l’application ne démarre pas ou si vous voyez les conteneurs dans CrashLoopBackoff, le journal de conteneur daprd contient des informations utiles.
Exécutez la commande suivante pour afficher les journaux du composant daprd :
kubectl logs -l app=mq-event-driven-dapr -n azure-iot-operations -c daprd