Dela via


Skapa ett kaosexperiment som använder ett Chaos Mesh-fel med Azure CLI

Du kan använda ett kaosexperiment för att kontrollera att programmet är motståndskraftigt mot fel genom att orsaka dessa fel i en kontrollerad miljö. I den här artikeln orsakar du periodiska Azure Kubernetes Service-poddar (AKS) på ett namnområde med hjälp av ett kaosexperiment och Azure Chaos Studio. Om du kör det här experimentet kan du skydda dig mot att tjänsten inte är tillgänglig när det uppstår sporadiska fel.

Chaos Studio använder Chaos Mesh, en kostnadsfri plattform för kaos med öppen källkod för Kubernetes, för att mata in fel i ett AKS-kluster. Chaos Mesh-fel är tjänstdirigeringsfel som kräver att Chaos Mesh installeras i AKS-klustret. Du kan använda samma steg för att konfigurera och köra ett experiment för eventuella AKS Chaos Mesh-fel.

Förutsättningar

Begränsningar

Öppna Azure Cloud Shell

Azure Cloud Shell är ett kostnadsfritt interaktivt gränssnitt som du kan använda för att köra stegen i den här artikeln. Den har vanliga Azure-verktyg förinstallerat och har konfigurerats för användning med ditt konto.

Öppna Cloud Shell genom att välja Prova i det övre högra hörnet i ett kodblock. Du kan också öppna Cloud Shell på en separat webbläsarflik genom att gå till Bash. Välj Kopiera för att kopiera kodblocken, klistra in den i Cloud Shell och välj Retur för att köra den.

Om du föredrar att installera och använda CLI lokalt kräver den här självstudien Azure CLI version 2.0.30 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Kommentar

De här anvisningarna använder en Bash-terminal i Cloud Shell. Vissa kommandon kanske inte fungerar enligt beskrivningen om du kör CLI lokalt eller i en PowerShell-terminal.

Konfigurera Chaos Mesh i ditt AKS-kluster

Innan du kan köra Chaos Mesh-fel i Chaos Studio måste du installera Chaos Mesh i AKS-klustret.

  1. Kör följande kommandon i ett Cloud Shell-fönster där du har den aktiva prenumerationen inställd på den prenumeration där AKS-klustret distribueras. Ersätt $RESOURCE_GROUP och $CLUSTER_NAME med resursgruppen och namnet på klusterresursen.

    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. Kontrollera att Chaos Mesh-poddarna är installerade genom att köra följande kommando:

    kubectl get po -n chaos-testing
    

Du bör se utdata som liknar följande exempel (en chaos-controller-manager och en eller flera 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

Du kan också använda installationsanvisningarna på Chaos Mesh-webbplatsen.

Aktivera Chaos Studio i ditt AKS-kluster

Chaos Studio kan inte mata in fel mot en resurs om inte resursen läggs till i Chaos Studio först. Om du vill lägga till en resurs i Chaos Studio skapar du ett mål och funktioner för resursen. AKS-kluster har bara en måltyp (tjänstdirigering), men andra resurser kan ha upp till två måltyper. En måltyp är för tjänstdirigeringsfel. En annan måltyp är för agentbaserade fel. Varje typ av Chaos Mesh-fel representeras som en funktion som PodChaos, NetworkChaos och IOChaos.

  1. Skapa ett mål genom att $SUBSCRIPTION_IDersätta , $resourceGroupNameoch $AKS_CLUSTER_NAME med relevanta strängar i AKS-klustret som du lägger till.

    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. Skapa funktionerna på målet genom att $SUBSCRIPTION_IDersätta , $resourceGroupNameoch $AKS_CLUSTER_NAME med relevanta strängar i AKS-klustret som du lägger till.

Ersätt $CAPABILITY med "Kapacitetsnamn" för felet som du lägger till.

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

Här är ett exempel på PodChaos hur du aktiverar funktionen för din referens:

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

Det här steget måste göras för varje* funktion som du vill aktivera i klustret.

Nu har du lagt till ditt AKS-kluster i Chaos Studio.

Skapa ett experiment

Nu kan du skapa experimentet. Ett kaosexperiment definierar de åtgärder som du vill vidta mot målresurser. Åtgärderna organiseras och körs i sekventiella steg. Kaosexperimentet definierar också de åtgärder som du vill vidta mot grenar som körs parallellt.

  1. Skapa ett Chaos Mesh jsonSpec:

    1. Se Chaos Mesh-dokumentationen för en feltyp, till exempel PodChaos-typen.

    2. Formulera YAML-konfigurationen för den feltypen med hjälp av Chaos Mesh-dokumentationen.

      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. Ta bort yaml utanför spec, inklusive egenskapsnamnet spec. Ta bort indraget för specifikationsinformationen. Parametern duration är inte nödvändig, men används om den tillhandahålls. I det här fallet tar du bort den.

      action: pod-failure
      mode: all
      selector:
        namespaces:
          - default
      
    4. Använd en YAML-till-JSON-konverterare som den här för att konvertera Chaos Mesh YAML till JSON och minimera den.

      {"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
      
    5. Använd ett JSON-sträng escape-verktyg som det här för att undkomma JSON-specifikationen, eller ändra dubbla citattecken till enkla citattecken.

      {\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
      
      {'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
      
  2. Skapa experimentets JSON genom att börja med följande JSON-exempel. Ändra JSON så att det motsvarar det experiment som du vill köra med hjälp av API:et Skapa experiment, felbiblioteket och det jsonSpec som skapades i föregående steg.

    {
      "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. Skapa experimentet med hjälp av Azure CLI. Ersätt $SUBSCRIPTION_ID, $RESOURCE_GROUPoch $EXPERIMENT_NAME med egenskaperna för experimentet. Kontrollera att du har sparat och laddat upp experimentets JSON. Uppdatera experiment.json med ditt JSON-filnamn.

    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
    

    Varje experiment skapar en motsvarande systemtilldelad hanterad identitet. Observera huvud-ID:t för den här identiteten i svaret för nästa steg.

Ge experimentet behörighet till ditt AKS-kluster

När du skapar ett kaosexperiment skapar Chaos Studio en systemtilldelad hanterad identitet som kör fel mot dina målresurser. Den här identiteten måste ges lämpliga behörigheter till målresursen för att experimentet ska kunna köras.

  1. Hämta genom att $EXPERIMENT_PRINCIPAL_ID köra följande kommando och kopiera PrincipalID från svaret. Ersätt $SUBSCRIPTION_ID, $RESOURCE_GROUPoch $EXPERIMENT_NAME med egenskaperna för experimentet.
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. Ge experimentet åtkomst till dina resurser med hjälp av följande kommandon. Ersätt $EXPERIMENT_PRINCIPAL_ID med huvud-ID:t från föregående steg. Ersätt $SUBSCRIPTION_ID, $resourceGroupNameoch $AKS_CLUSTER_NAME med relevanta strängar i AKS-klustret.
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

Om du föredrar att skapa anpassade roller i stället för de inbyggda AKS-rollerna följer du anvisningarna på sidan Resurstyper och rolltilldelningar som stöds för Chaos Studio för att visa de rollbaserade åtkomstkontrollåtgärder som krävs för ett visst fel och lägga till dem i en manuellt skapad anpassad roll.

Kör experimentet

Nu är du redo att köra experimentet. Om du vill se effekten rekommenderar vi att du öppnar aks-klustrets översikt och går till Insikter på en separat webbläsarflik. Livedata för Active Pod Count visar effekten av att köra experimentet.

  1. Starta experimentet med hjälp av Azure CLI. Ersätt $SUBSCRIPTION_ID, $RESOURCE_GROUPoch $EXPERIMENT_NAME med egenskaperna för experimentet.

    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. Svaret innehåller en status-URL som du kan använda för att fråga experimentstatus när experimentet körs.

Nästa steg

Nu när du har kört ett AKS Chaos Mesh-tjänstdirigeringsexperiment är du redo att: