Delen via


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

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.

  1. 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
    
  2. 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.

  1. Maak een doel door , $resourceGroupNameen $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\":{}}"
    
  2. Maak de mogelijkheden op het doel door , $resourceGroupNameen $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.

  1. Een Chaos Mesh jsonSpecmaken:

    1. Zie de Chaos Mesh-documentatie voor een fouttype, bijvoorbeeld het type PodChaos.

    2. 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
      
    3. Verwijder yaml buiten de spec, inclusief de naam van de specificatie-eigenschap. Verwijder de inspringing van de details van de specificatie. De duration parameter is niet nodig, maar wordt gebruikt als deze is opgegeven. Verwijder deze in dit geval.

      action: pod-failure
      mode: all
      selector:
        namespaces:
          - default
      
    4. 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"]}}
      
    5. 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']}}
      
  2. 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"
              }
            ]
          }
        ]
      }
    }
    
  3. Maak het experiment met behulp van de Azure CLI. Vervang , $RESOURCE_GROUPen $EXPERIMENT_NAME door $SUBSCRIPTION_IDde eigenschappen voor uw experiment. Zorg ervoor dat u de JSON van uw experiment hebt opgeslagen en geüpload. Werk experiment.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.

  1. Haal de $EXPERIMENT_PRINCIPAL_ID opdracht op door de volgende opdracht uit te voeren en het PrincipalID uit het antwoord te kopiëren. Vervang , $RESOURCE_GROUPen $EXPERIMENT_NAME door $SUBSCRIPTION_IDde 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
  1. 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 , $resourceGroupNameen $AKS_CLUSTER_NAME door $SUBSCRIPTION_IDde 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.

  1. Start het experiment met behulp van de Azure CLI. Vervang , $RESOURCE_GROUPen $EXPERIMENT_NAME door $SUBSCRIPTION_IDde 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
    
  2. 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: