Een chaos-experiment maken dat gebruikmaakt van een Chaos Mesh-fout met de Azure CLI
U kunt een chaos-experiment gebruiken om te controleren of uw toepassing bestand is tegen fouten door deze fouten in een gecontroleerde omgeving te veroorzaken. In dit artikel veroorzaakt u periodieke AKS-podfouten (Azure Kubernetes Service) in een naamruimte met behulp van een chaos-experiment en Azure Chaos Studio. Door dit experiment uit te voeren, kunt u zich beschermen tegen niet-beschikbaarheid van services wanneer er sporadische fouten optreden.
Chaos Studio maakt gebruik van Chaos Mesh, een gratis opensource-platform voor chaos-engineering voor Kubernetes, om fouten in een AKS-cluster te injecteren. Chaos Mesh-fouten zijn service-directe fouten waarvoor Chaos Mesh moet worden geïnstalleerd op het AKS-cluster. U kunt dezelfde stappen gebruiken om een experiment in te stellen en uit te voeren voor elke AKS Chaos Mesh-fout.
Vereisten
- Een Azure-abonnement. Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.
- Een AKS-cluster met Linux-knooppuntgroepen. Als u geen AKS-cluster hebt, raadpleegt u de AKS-quickstart die gebruikmaakt van de Azure CLI, Azure PowerShell of Azure Portal.
Beperkingen
- U kunt Chaos Mesh-fouten met privéclusters gebruiken door VNet-injectie in Chaos Studio te configureren. Alle opdrachten die zijn uitgegeven aan het privécluster, inclusief de stappen in dit artikel voor het instellen van Chaos Mesh, moeten de richtlijnen voor privéclusters volgen. Aanbevolen methoden omvatten het maken van verbinding vanaf een virtuele machine in hetzelfde virtuele netwerk of het gebruik van de functie voor het aanroepen van AKS-opdrachten.
- AKS Chaos Mesh-fouten worden alleen ondersteund in Linux-knooppuntgroepen.
- Als uw AKS-cluster is geconfigureerd om alleen geautoriseerde IP-bereiken toe te staan, moet u de IP-bereiken van Chaos Studio toestaan. U kunt deze vinden door een query uit te voeren op de
ChaosStudio
servicetag met de Service Tag Discovery-API of downloadbare JSON-bestanden.
Azure Cloud Shell openen
Azure Cloud Shell is een gratis interactieve shell waarmee u de stappen in dit artikel kunt uitvoeren. In deze shell zijn algemene Azure-hulpprogramma's vooraf geïnstalleerd en geconfigureerd voor gebruik met uw account.
Als u Cloud Shell wilt openen, selecteert u Proberen in de rechterbovenhoek van een codeblok. U kunt Cloud Shell ook openen in een afzonderlijk browsertabblad door naar Bash te gaan. Selecteer Kopiëren om de codeblokken te kopiëren, plak deze in Cloud Shell en selecteer Enter om deze uit te voeren.
Als u de CLI liever lokaal installeert en gebruikt, hebt u voor deze zelfstudie Azure CLI versie 2.0.30 of hoger nodig. Voer az --version
uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
Notitie
Deze instructies gebruiken een Bash-terminal in Cloud Shell. Sommige opdrachten werken mogelijk niet zoals beschreven als u de CLI lokaal of in een PowerShell-terminal uitvoert.
Chaos Mesh instellen op uw AKS-cluster
Voordat u Chaos Mesh-fouten kunt uitvoeren in Chaos Studio, moet u Chaos Mesh installeren op uw AKS-cluster.
Voer de volgende opdrachten uit in een Cloud Shell-venster waarin u het actieve abonnement hebt ingesteld op het abonnement waarin uw AKS-cluster wordt geïmplementeerd. Vervang en vervang deze
$CLUSTER_NAME
door$RESOURCE_GROUP
de resourcegroep en de naam van uw clusterresource.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
Controleer of de Chaos Mesh-pods zijn geïnstalleerd door de volgende opdracht uit te voeren:
kubectl get po -n chaos-testing
U ziet uitvoer die lijkt op het volgende voorbeeld (een chaos-controller-manager en een of meer chaos-daemons):
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
U kunt ook de installatie-instructies op de Chaos Mesh-website gebruiken.
Chaos Studio inschakelen op uw AKS-cluster
Chaos Studio kan geen fouten injecteren voor een resource, tenzij die resource eerst wordt toegevoegd aan Chaos Studio. Als u een resource wilt toevoegen aan Chaos Studio, maakt u een doel en mogelijkheden voor de resource. AKS-clusters hebben slechts één doeltype (service-direct), maar andere resources kunnen maximaal twee doeltypen hebben. Eén doeltype is voor service-directe fouten. Een ander doeltype is voor op agents gebaseerde fouten. Elk type Chaos Mesh-fout wordt weergegeven als een mogelijkheid zoals PodChaos, NetworkChaos en IOChaos.
Maak een doel door ,
$resourceGroupName
en$AKS_CLUSTER_NAME
door de relevante tekenreeksen van het AKS-cluster dat u toevoegt, te vervangen$SUBSCRIPTION_ID
.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\":{}}"
Maak de mogelijkheden op het doel door ,
$resourceGroupName
en$AKS_CLUSTER_NAME
door de relevante tekenreeksen van het AKS-cluster dat u toevoegt, te vervangen$SUBSCRIPTION_ID
.
Vervang $CAPABILITY
door de mogelijkheidsnaam van de fout die u toevoegt.
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\":{}}"
Hier volgt een voorbeeld van het inschakelen van de PodChaos
mogelijkheid voor uw referentie:
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\":{}}"
Deze stap moet worden uitgevoerd voor elke* mogelijkheid die u wilt inschakelen op het cluster.
U hebt nu uw AKS-cluster toegevoegd aan Chaos Studio.
Een experiment maken
U kunt nu uw experiment maken. Een chaos-experiment definieert de acties die u wilt uitvoeren op doelbronnen. De acties worden geordend en uitgevoerd in opeenvolgende stappen. Het chaos-experiment definieert ook de acties die u wilt uitvoeren op vertakkingen, die parallel worden uitgevoerd.
Een Chaos Mesh
jsonSpec
maken:Zie de Chaos Mesh-documentatie voor een fouttype, bijvoorbeeld het type PodChaos.
Formuleer de YAML-configuratie voor dat fouttype met behulp van de Chaos Mesh-documentatie.
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
Verwijder yaml buiten de
spec
, inclusief de naam van de specificatie-eigenschap. Verwijder de inspringing van de details van de specificatie. Deduration
parameter is niet nodig, maar wordt gebruikt als deze is opgegeven. Verwijder deze in dit geval.action: pod-failure mode: all selector: namespaces: - default
Gebruik een YAML-naar-JSON-conversieprogramma zoals deze om de Chaos Mesh YAML te converteren naar JSON en deze te minimaliseren.
{"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
Gebruik een escape-tool voor JSON-tekenreeksen zoals deze om de JSON-specificatie te escapen of wijzig de dubbele aanhalingstekens in enkele aanhalingstekens.
{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
{'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
Maak uw experiment-JSON door te beginnen met het volgende JSON-voorbeeld. Wijzig de JSON zodat deze overeenkomt met het experiment dat u wilt uitvoeren met behulp van de API Experiment maken, de foutbibliotheek en de
jsonSpec
foutbibliotheek die u in de vorige stap hebt gemaakt.{ "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" } ] } ] } }
Maak het experiment met behulp van de Azure CLI. Vervang ,
$RESOURCE_GROUP
en$EXPERIMENT_NAME
door$SUBSCRIPTION_ID
de eigenschappen voor uw experiment. Zorg ervoor dat u de JSON van uw experiment hebt opgeslagen en geüpload. Werkexperiment.json
bij met uw JSON-bestandsnaam.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
Elk experiment maakt een bijbehorende door het systeem toegewezen beheerde identiteit. Noteer de principal-id voor deze identiteit in het antwoord voor de volgende stap.
Geef het experiment toestemming voor uw AKS-cluster
Wanneer u een chaos-experiment maakt, maakt Chaos Studio een door het systeem toegewezen beheerde identiteit waarmee fouten worden uitgevoerd op uw doelbronnen. Deze identiteit moet de juiste machtigingen krijgen voor de doelresource om het experiment te kunnen uitvoeren.
- Haal de
$EXPERIMENT_PRINCIPAL_ID
opdracht op door de volgende opdracht uit te voeren en hetPrincipalID
uit het antwoord te kopiëren. Vervang ,$RESOURCE_GROUP
en$EXPERIMENT_NAME
door$SUBSCRIPTION_ID
de eigenschappen voor uw experiment.
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
- Geef het experiment toegang tot uw resources met behulp van de volgende opdrachten. Vervang
$EXPERIMENT_PRINCIPAL_ID
door de principal-id uit de vorige stap. Vervang ,$resourceGroupName
en$AKS_CLUSTER_NAME
door$SUBSCRIPTION_ID
de relevante tekenreeksen van het AKS-cluster.
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
Als u liever aangepaste rollen maakt in plaats van de ingebouwde AKS-rollen, volgt u de instructies op de pagina Ondersteunde resourcetypen en roltoewijzingen voor Chaos Studio om de op rollen gebaseerde toegangsbeheerbewerkingen weer te geven die nodig zijn voor een specifieke fout en deze toe te voegen aan een handmatig gemaakte aangepaste rol.
Uw experiment uitvoeren
U bent nu klaar om uw experiment uit te voeren. Als u het effect wilt zien, raden we u aan het overzicht van uw AKS-cluster te openen en naar Inzichten te gaan in een afzonderlijk browsertabblad. Livegegevens voor het aantal actieve pods tonen het effect van het uitvoeren van uw experiment.
Start het experiment met behulp van de Azure CLI. Vervang ,
$RESOURCE_GROUP
en$EXPERIMENT_NAME
door$SUBSCRIPTION_ID
de eigenschappen voor uw experiment.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
Het antwoord bevat een status-URL die u kunt gebruiken om de status van het experiment op te vragen terwijl het experiment wordt uitgevoerd.
Volgende stappen
Nu u een AKS Chaos Mesh service-direct experiment hebt uitgevoerd, kunt u het volgende doen: