Freigeben über


Erstellen eines Chaosexperiments, das einen Chaos Mesh-Fehler mit der Azure CLI verwendet

Sie können ein Chaos-Experiment verwenden, um zu überprüfen, ob Ihre Anwendung fehlerresistent ist, indem Sie diese Fehler in einer kontrollierten Umgebung verursachen. in diesem Artikel werden Sie periodische Ausfälle von Azure Kubernetes Service (AKS)-Pods in einem Namespace mithilfe eines Chaos-Experiments und Azure Chaos Studio verursachen. Die Durchführung dieses Experiments kann Ihnen helfen, sich gegen die Nichtverfügbarkeit von Diensten bei sporadischen Ausfällen zu schützen.

Chaos Studio verwendet Chaos Mesh, eine kostenlose Open-Source-Chaos-Engineering-Plattform für Kubernetes, um Fehler in einen AKS-Cluster zu injizieren. Chaos Mesh-Fehler sind service-direkte Fehler, für die Chaos Mesh auf dem AKS-Cluster installiert sein muss. Mit den gleichen Schritten können Sie ein Experiment für einen beliebigen AKS Chaos Mesh-Fehler einrichten und durchführen.

Voraussetzungen

Begrenzungen

  • Sie können Chaos Mesh-Fehler mit privaten Clustern verwenden, indem Sie VNet Injection in Chaos Studio konfigurieren. Alle Befehle, die an den privaten Cluster ausgegeben wurden, einschließlich der Schritte in diesem Artikel zum Einrichten von Chaos Mesh, müssen die Anleitungen für private Cluster befolgen. Empfohlene Methoden umfassen das Herstellen einer Verbindung von einem virtuellen Computer im selben virtuellen Netzwerk oder die Verwendung der Funktion AKS-Befehlsaufruf.
  • AKS Chaos Mesh-Fehler werden nur in Linux-Knotenpools unterstützt.
  • Wenn Ihr AKS-Cluster so konfiguriert ist, dass nur autorisierte IP-Bereiche zulässig sind, müssen Sie die IP-Bereiche von Chaos Studio zulassen. Sie können sie abrufen, indem Sie das ChaosStudio-Diensttag mit der Diensttagermittlungs-API oder mit herunterladbaren JSON-Dateien abfragen.

Öffnen von Azure Cloud Shell

Azure Cloud Shell ist eine kostenlose interaktive Shell, mit der Sie die Schritte in diesem Artikel ausführen können. Sie verfügt über allgemeine vorinstallierte Tools und ist für die Verwendung mit Ihrem Konto konfiguriert.

Wählen Sie zum Öffnen von Cloud Shell oben rechts in einem Codeblock die Option Ausprobieren aus. Sie können Cloud Shell auch auf einer separaten Browserregisterkarte öffnen, indem Sie zu Bash wechseln. Wählen Sie Kopieren aus, um die Codeblöcke zu kopieren. Fügen Sie die Blöcke anschließend in Cloud Shell ein, und wählen Sie Eingabe, um sie auszuführen.

Wenn Sie die Befehlszeilenschnittstelle lieber lokal installieren und verwenden möchten, benötigen Sie für dieses Tutorial mindestens die Azure CLI-Version 2.0.30. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sei bei Bedarf unter Installieren der Azure CLI.

Hinweis

In diesen Anweisungen wird ein Bash-Terminal in Cloud Shell verwendet. Einige Befehle funktionieren möglicherweise nicht wie beschrieben, wenn Sie die CLI lokal oder in einem PowerShell-Terminal ausführen.

Chaos Mesh auf Ihrem AKS-Cluster einrichten

Bevor Sie Chaos Mesh-Fehler in Chaos Studio ausführen können, müssen Sie Chaos Mesh auf Ihrem AKS-Cluster installieren.

  1. Führen Sie die folgenden Befehle in einem Cloud Shell-Fenster aus, in dem Sie als aktives Abonnement das Abonnement eingestellt haben, in dem Ihr AKS-Cluster bereitgestellt wird. Ersetzen Sie $RESOURCE_GROUP und $CLUSTER_NAME durch die Ressourcengruppe und den Namen Ihrer Clusterressource.

    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. Überprüfen Sie, ob die Chaos Mesh-Pods installiert sind, indem Sie den folgenden Befehl ausführen:

    kubectl get po -n chaos-testing
    

Sie sollten eine ähnliche Ausgabe wie im folgenden Beispiel sehen (ein Chaos-Controller-Manager und ein oder mehrere Chaos-Dämonen):

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

Sie können auch die Installationsanweisungen auf der Chaos Mesh-Website verwenden.

Aktivieren Sie Chaos Studio auf Ihrem AKS-Cluster

Chaos Studio kann keine Fehler für eine Ressource einschleusen, es sei denn, diese Ressource wird zuerst in Chaos Studio hinzugefügt. Um eine Ressource zu Chaos Studio hinzuzufügen, erstellen Sie ein Ziel und Funktionen für die Ressource. AKS-Cluster verfügen nur über einen Zieltyp (service-direct), andere Ressourcen verfügen jedoch möglicherweise über bis zu zwei Zieltypen. Ein Zieltyp ist für dienstspezifische Fehler vorgesehen. Ein weiterer Zieltyp ist für Agent-basierte Fehler bestimmt. Jede Art von Chaos Mesh-Fehler wird als Fähigkeit dargestellt, z. B. PodChaos, NetworkChaos und IOChaos.

  1. Erstellen Sie ein Ziel, indem Sie $SUBSCRIPTION_ID, $resourceGroupName und $AKS_CLUSTER_NAME durch die relevanten Zeichenfolgen des hinzuzufügenden AKS-Clusters ersetzen.

    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. Erstellen Sie die Funktionen für das Ziel, indem Sie $SUBSCRIPTION_ID, $resourceGroupName und $AKS_CLUSTER_NAME durch die relevanten Zeichenfolgen des hinzuzufügenden AKS-Clusters ersetzen.

Ersetzen Sie $CAPABILITY durch den „Funktionsnamen“ des Fehlers, den Sie hinzufügen.

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 ist ein Beispiel für die Aktivierung der PodChaos-Funktion:

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\":{}}"

Dieser Schritt muss für jede* Funktion erfolgen, die Sie im Cluster aktivieren möchten.

Sie haben ihren AKS-Cluster jetzt erfolgreich zu Chaos Studio hinzugefügt.

Erstellen eines Experiments

Sie können jetzt Ihr Experiment erstellen. Ein Chaosexperiment definiert die Aktionen, die Sie gegen Zielressourcen ergreifen möchten. Die Aktionen werden in sequenziellen Schritten organisiert und ausgeführt. Das Chaosexperiment definiert auch die Aktionen, die Sie gegen Verzweigungen ausführen möchten, die parallel ausgeführt werden.

  1. Erstellen eines Chaos Mesh jsonSpec:

    1. In der Dokumentation zu Chaos Mesh finden Sie einen Fehlertyp, z. B. den PodChaos-Typ.

    2. Formulieren Sie die YAML-Konfiguration für diesen Fehlertyp anhand der Chaos Mesh-Dokumentation.

      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. Entfernen Sie alle YAML-Elemente außerhalb von spec, einschließlich des Spezifikationseigenschaftennamens. Entfernen Sie den Einzug der Spezifikationsdetails. Der duration-Parameter ist nicht erforderlich, wird aber verwendet, wenn angegeben. Entfernen Sie ihn in diesem Fall.

      action: pod-failure
      mode: all
      selector:
        namespaces:
          - default
      
    4. Verwenden Sie einen YAML-zu-JSON-Konverter wie diesen, um die Chaos Mesh YAML in JSON zu konvertieren und zu minimieren.

      {"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
      
    5. Verwenden Sie ein JSON-Zeichenfolgen-Escapetool wie dieses, um die JSON-Spezifikation zu escapen, oder ändern Sie die doppelten Anführungszeichen in einfache Anführungszeichen.

      {\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
      
      {'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
      
  2. Erstellen Sie Ihr Experiment-JSON-Datenformat, beginnend mit dem folgenden JSON-Beispiel. Ändern Sie den JSON-Code so, dass er dem Experiment entspricht, das Sie mithilfe der API zum Erstellen von Experimenten, der Fehlerbibliothek und der im vorherigen Schritt erstellten jsonSpec ausführen möchten.

    {
      "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. Erstellen Sie das Experiment mithilfe der Azure CLI. Ersetzen Sie $SUBSCRIPTION_ID, $RESOURCE_GROUP und $EXPERIMENT_NAME durch die Eigenschaften für Ihr Experiment. Stellen Sie sicher, dass Sie Ihr JSON-Experiment-Datenformat gespeichert und hochgeladen haben. Aktualisieren Sie experiment.json mit Ihrem JSON-Dateinamen.

    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
    

    Jede Simulation erstellt eine entsprechende systemseitig zugewiesene verwaltete Identität. Notieren Sie sich die Prinzipal-ID für diese Identität in der Antwort für den nächsten Schritt.

Erteilen Sie Ihrem AKS-Cluster eine Experimentberechtigung

Wenn Sie ein Chaosexperiment erstellen, erzeugt Chaos Studio eine dem System zugewiesene verwaltete Identität, die Fehler gegen Ihre Zielressourcen ausführt. Diese Identität muss mit entsprechenden Rechten für die Zielressource ausgestattet sein, damit das Experiment erfolgreich durchgeführt werden kann.

  1. Rufen Sie $EXPERIMENT_PRINCIPAL_ID ab, indem Sie den folgenden Befehl ausführen und PrincipalID aus der Antwort kopieren. Ersetzen Sie $SUBSCRIPTION_ID, $RESOURCE_GROUP und $EXPERIMENT_NAME durch die Eigenschaften für Ihr 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. Gewähren Sie dem Experiment mit den folgenden Befehlen Zugriff auf Ihre Ressourcen. Ersetzen Sie $EXPERIMENT_PRINCIPAL_ID durch die Prinzipal-ID aus dem vorherigen Schritt. Ersetzen Sie $SUBSCRIPTION_ID, $resourceGroupName und $AKS_CLUSTER_NAME durch die relevanten Zeichenfolgen des AKS-Clusters.
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

Wenn Sie anstelle der integrierten AKS-Rollen lieber benutzerdefinierte Rollen erstellen möchten, befolgen Sie die Anweisungen auf der Seite Unterstützte Ressourcentypen und Rollenzuweisungen für Chaos Studio, um die rollenbasierten Zugriffssteuerungsvorgänge aufzulisten, die für einen bestimmten Fehler erforderlich sind und sie einer manuell erstellten benutzerdefinierten Rolle hinzuzufügen.

Führen Sie Ihr Experiment durch

Sie sind nun bereit, Ihr Experiment durchzuführen. Um den Effekt anzuzeigen, empfehlen wir Ihnen, Ihre AKS-Clusterübersicht zu öffnen und auf einer separaten Browserregisterkarte zu Insights zu wechseln. Livedaten für die Anzahl der aktiven Pods zeigen die Auswirkungen der Ausführung Ihres Experiments.

  1. Starten Sie das Experiment mithilfe der Azure CLI. Ersetzen Sie $SUBSCRIPTION_ID, $RESOURCE_GROUP und $EXPERIMENT_NAME durch die Eigenschaften für Ihr 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. Die Antwort enthält eine Status-URL, mit der Sie den Simulationsstatus während der Ausführung der Simulation abfragen können.

Nächste Schritte

Nachdem Sie nun ein AKS-Chaos-Mesh-Service-Direkt-Experiment durchgeführt haben, sind Sie bereit für Folgendes: