Créer une expérience de chaos qui utilise une erreur Chaos Mesh avec Azure CLI
Vous pouvez utiliser une expérience de chaos pour vérifier que votre application résiste aux défaillances en les provoquant dans un environnement contrôlé. Dans cet article, vous provoquez des pannes périodiques de pod Azure Kubernetes Service (AKS) sur un espace de noms à l’aide d’une expérience de chaos et d’Azure Chaos Studio. L’exécution de cette expérience peut vous aider à vous défendre contre l’indisponibilité du service en cas de défaillances sporadiques.
Chaos Studio utilise Chaos Mesh, une plateforme d’ingénierie de chaos open source gratuite pour Kubernetes, pour injecter des erreurs dans un cluster AKS. Les erreurs Chaos Mesh sont des erreurs de service-direct qui nécessitent l’installation de Chaos Mesh sur le cluster AKS. Vous pouvez utiliser ces mêmes étapes pour configurer et exécuter une expérience pour toute erreur AKS Chaos Mesh.
Prérequis
- Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
- Un cluster AKS avec des pools de nœuds Linux. Si vous ne disposez pas de cluster AKS, consultez le guide de démarrage rapide AKS qui utilise Azure CLI, Azure PowerShell ou le Portail Microsoft Azure.
Limites
- Vous pouvez utiliser les erreurs Chaos Mesh avec des clusters privés en configurant l'injection de VNet dans Chaos Studio. Toutes les commandes émises sur le cluster privé, y compris les étapes décrites dans cet article pour configurer Chaos Mesh, doivent suivre les instructions de cluster privé. Les méthodes recommandées incluent la connexion à partir d’une machine virtuelle dans le même réseau virtuel ou l’utilisation de la commande AKS appelle fonctionnalité.
- Les défauts AKS Chaos Mesh sont uniquement pris en charge sur les pools de nœuds Linux.
- Si votre cluster AKS est configuré pour autoriser uniquement les plages d’adresses IP autorisées, vous devez autoriser les plages d’adresses IP de Chaos Studio. Vous pouvez les trouver en interrogeant l’étiquette de service
ChaosStudio
avec l’API de découverte d’étiquettes de service ou des fichiers JSON téléchargeables.
Ouvrir Azure Cloud Shell
Azure Cloud Shell est un interpréteur de commandes interactif et gratuit que vous pouvez utiliser pour exécuter les étapes de cet article. Il contient des outils Azure courants préinstallés et configurés pour être utilisés avec votre compte.
Pour ouvrir Cloud Shell, sélectionnez Essayer en haut à droite d’un bloc de code. Vous pouvez également ouvrir Cloud Shell sous un autre onglet de navigateur en accédant à Bash. Sélectionnez Copier pour copier les blocs de code, collez-les dans Cloud Shell et appuyez sur Entrée pour les exécuter.
Si vous préférez installer et utiliser l’interface de ligne de commande localement, vous aurez besoin d’Azure CLI version 2.0.30 ou ultérieure pour ce tutoriel. Exécutez az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Remarque
Ces instructions impliquent l’utilisation d’un terminal Bash dans Cloud Shell. Certaines commandes risquent de ne pas fonctionner comme prévu, si vous exécutez l’interface CLI localement ou dans un terminal PowerShell.
Configurer Chaos Mesh sur votre cluster AKS
Avant de pouvoir exécuter des erreurs Chaos Mesh dans Chaos Studio, vous devez installer Chaos Mesh sur votre cluster AKS.
Exécutez les commandes suivantes dans une fenêtre Cloud Shell où vous disposez de l’abonnement actif défini pour être l’abonnement dans lequel votre cluster AKS est déployé. Remplacez
$RESOURCE_GROUP
et$CLUSTER_NAME
par le groupe de ressources et le nom de votre ressource de cluster.az aks get-credentials -g $RESOURCE_GROUP -n $CLUSTER_NAME helm repo add chaos-mesh https://charts.chaos-mesh.org helm repo update kubectl create ns chaos-testing helm install chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-testing --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock
Vérifiez que les pods Chaos Mesh sont installés en exécutant la commande suivante :
kubectl get po -n chaos-testing
Vous devriez voir un résultat similaire à l'exemple suivant (un gestionnaire de contrôleur de chaos et un ou plusieurs démons de chaos) :
NAME READY STATUS RESTARTS AGE
chaos-controller-manager-69fd5c46c8-xlqpc 1/1 Running 0 2d5h
chaos-daemon-jb8xh 1/1 Running 0 2d5h
chaos-dashboard-98c4c5f97-tx5ds 1/1 Running 0 2d5h
Vous pouvez également utiliser les instructions d’installation sur le site Web de Chaos Mesh.
Activer Chaos Studio sur votre cluster AKS
Chaos Studio ne peut pas injecter d’erreurs sur une ressource, sauf si cette ressource est ajoutée à Chaos Studio en premier. Pour ajouter une ressource à Chaos Studio, créez une cible et des fonctionnalités sur la ressource. Les clusters AKS n’ont qu’un seul type cible (service direct), mais d’autres ressources peuvent avoir jusqu’à deux types cibles. L’un des types cibles est destiné aux erreurs directes de service. Un autre type cible est destiné aux erreurs basées sur l’agent. Chaque type d’erreur Chaos Mesh est représenté sous la forme d’une fonctionnalité telle que PodChaos, NetworkChaos et IOChaos.
Créez une cible en remplaçant
$SUBSCRIPTION_ID
,$resourceGroupName
et$AKS_CLUSTER_NAME
par les chaînes appropriées du cluster AKS que vous ajoutez.az rest --method put --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh?api-version=2024-01-01" --body "{\"properties\":{}}"
Créez les fonctionnalités sur la cible en remplaçant
$SUBSCRIPTION_ID
,$resourceGroupName
et$AKS_CLUSTER_NAME
par les chaînes appropriées du cluster AKS que vous ajoutez.
Remplacez $CAPABILITY
par le « Nom de la fonctionnalité » de l’erreur que vous ajoutez.
az rest --method put --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh/capabilities/$CAPABILITY?api-version=2024-01-01" --body "{\"properties\":{}}"
Voici un exemple d’activation de la fonctionnalité de PodChaos
pour votre référence :
az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.ContainerService/managedClusters/myCluster/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh/capabilities/PodChaos-2.1?api-version=2024-01-01" --body "{\"properties\":{}}"
Cette étape doit être effectuée pour chaque* fonctionnalité que vous souhaitez activer sur le cluster.
Vous avez maintenant ajouté votre cluster AKS à Chaos Studio.
Créer une expérience
Vous pouvez maintenant créer votre expérience. Une expérience de chaos définit les actions à entreprendre sur les ressources cibles. Les actions sont organisées et exécutées en étapes séquentielles. L’expérience de chaos définit également les actions à entreprendre sur les branches, qui s’exécutent en parallèle.
Créez un Chaos Mesh
jsonSpec
:Consultez la documentation Chaos Mesh pour un type d’erreur, par exemple, le type PodChaos.
Formulez la configuration YAML pour ce type d’erreur à l’aide de la documentation Chaos Mesh.
apiVersion: chaos-mesh.org/v1alpha1 kind: PodChaos metadata: name: pod-failure-example namespace: chaos-testing spec: action: pod-failure mode: all duration: '600s' selector: namespaces: - default
Supprimez n’importe quel YAML en dehors de la
spec
, y compris le nom de la propriété de spécification. Supprimez la mise en retrait des détails des spécifications. Le paramètreduration
n’est pas nécessaire, mais est utilisé s’il est fourni. Dans ce cas, supprimez-le.action: pod-failure mode: all selector: namespaces: - default
Utilisez un convertisseur YAML vers JSON comme celui-ci pour convertir la configuration YAML de Chaos Mesh en JSON et la réduire.
{"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
Utilisez un outil d'échappement de chaîne JSON comme celui-ci pour échapper à la spécification JSON ou remplacez les guillemets doubles par des guillemets simples.
{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
{'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
Créez votre expérience JSON en commençant par l’exemple JSON suivant. Modifiez le JSON pour qu'il corresponde à l'expérience que vous souhaitez exécuter à l'aide de l'API Create Experiment, de la bibliothèque d'erreurs et de celle créée à l'étape précédente
jsonSpec
.{ "location": "centralus", "identity": { "type": "SystemAssigned" }, "properties": { "steps": [ { "name": "AKS pod kill", "branches": [ { "name": "AKS pod kill", "actions": [ { "type": "continuous", "selectorId": "Selector1", "duration": "PT10M", "parameters": [ { "key": "jsonSpec", "value": "{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}" } ], "name": "urn:csci:microsoft:azureKubernetesServiceChaosMesh:podChaos/2.2" } ] } ] } ], "selectors": [ { "id": "Selector1", "type": "List", "targets": [ { "type": "ChaosTarget", "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myRG/providers/Microsoft.ContainerService/managedClusters/myCluster/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh" } ] } ] } }
Créez l’expérience à l’aide d’Azure CLI. Remplacez
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
et$EXPERIMENT_NAME
par les propriétés de votre expérience. Vérifiez que vous avez enregistré et chargé le fichier JSON de votre expérience. Mettez à jourexperiment.json
avec votre nom de fichier JSON.az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
Chaque expérience crée une identité managée affectée par le système correspondante. Notez l’ID de principal de cette identité mentionné dans la réponse, pour l’étape suivante.
Accordez l’autorisation d’expérience à votre cluster AKS
Lorsque vous créez une expérience de chaos, Chaos Studio crée une identité managée affectée par le système qui exécute des erreurs sur vos ressources cibles. Cette identité doit avoir les autorisations appropriées sur la ressource cible pour que l’expérience s’exécute correctement.
- Récupérez le
$EXPERIMENT_PRINCIPAL_ID
en exécutant la commande suivante et en copiant lePrincipalID
à partir de la réponse. Remplacez$SUBSCRIPTION_ID
,$RESOURCE_GROUP
et$EXPERIMENT_NAME
par les propriétés de votre expérience.
az rest --method get --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2024-01-01
- Accordez à l’expérience l’accès à vos ressources à l’aide des commandes suivantes. Remplacez
$EXPERIMENT_PRINCIPAL_ID
par l’ID de principal obtenu à l’étape précédente. Remplacez$SUBSCRIPTION_ID
,$resourceGroupName
et$AKS_CLUSTER_NAME
par les chaînes appropriées du cluster AKS.
az role assignment create --role "Azure Kubernetes Service RBAC Admin Role" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME
az role assignment create --role "Azure Kubernetes Service Cluster User Role" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME
Si vous préférez créer des rôles personnalisés au lieu des rôles AKS intégrés, suivez les instructions sur les types de ressources pris en charge et les attributions de rôles pour Chaos Studio page pour répertorier les opérations de contrôle d’accès en fonction du rôle nécessaires à une erreur spécifique et ajoutez-les à un rôle personnalisé créé manuellement.
Exécuter votre expérience
Vous êtes maintenant prêt à exécuter votre expérience. Pour voir l’effet, nous vous recommandons d’ouvrir votre vue d’ensemble du cluster AKS et d’accéder à Insights dans un onglet de navigateur distinct. Les données en direct pour le nombre de pods actifs montrent l'effet de l'exécution de votre expérience.
Démarrez l’expérience à l’aide d’Azure CLI. Remplacez
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
et$EXPERIMENT_NAME
par les propriétés de votre expérience.az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2024-01-01
La réponse comprend une URL d’état que vous pouvez utiliser pour interroger l’état de l’expérience pendant l’exécution de celle-ci.
Étapes suivantes
Maintenant que vous avez exécuté une expérience directe de service AKS Chaos Mesh, vous êtes prêt à :