Sdílet prostřednictvím


Vytvoření experimentu s chaosem, který používá chybu Chaos Mesh pomocí Azure CLI

Pomocí experimentu s chaosem můžete ověřit, že je vaše aplikace odolná vůči selháním, a to tím, že tyto chyby způsobují v řízeném prostředí. V tomto článku způsobíte pravidelné selhání podů Azure Kubernetes Service (AKS) v oboru názvů pomocí experimentu chaosu a nástroje Azure Chaos Studio. Spuštění tohoto experimentu vám může pomoct bránit se nedostupnosti služby, pokud dojde k občasným selháním.

Chaos Studio používá k vložení chyb do clusteru AKS bezplatnou opensourcovou platformu chaosu pro Kubernetes. Chyby služby Chaos Mesh jsou chyby přímé služby, které vyžadují, aby byla v clusteru AKS nainstalovaná služba Chaos Mesh. Stejný postup můžete použít k nastavení a spuštění experimentu pro jakoukoli chybu AKS Chaos Mesh.

Požadavky

Omezení

Otevření Azure Cloud Shellu

Azure Cloud Shell je bezplatné interaktivní prostředí, které můžete použít ke spuštění kroků v tomto článku. Má předinstalované obecné nástroje Azure, které jsou nakonfigurované pro použití s vaším účtem.

Pokud chcete otevřít Cloud Shell, vyberte Vyzkoušet v pravém horním rohu bloku kódu. Cloud Shell můžete otevřít také na samostatné kartě prohlížeče tak, že přejdete na Bash. Výběrem možnosti Kopírovat zkopírujte bloky kódu, vložte ho do Cloud Shellu a stisknutím klávesy Enter ho spusťte.

Pokud chcete rozhraní příkazového řádku nainstalovat a používat místně, tento kurz vyžaduje Azure CLI verze 2.0.30 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Poznámka:

Tyto pokyny používají terminál Bash v Cloud Shellu. Některé příkazy nemusí fungovat, jak je popsáno, pokud spouštíte rozhraní příkazového řádku místně nebo v terminálu PowerShellu.

Nastavení služby Chaos Mesh v clusteru AKS

Než budete moct spustit chyby Chaos Mesh v aplikaci Chaos Studio, musíte do clusteru AKS nainstalovat Chaos Mesh.

  1. V okně Cloud Shellu spusťte následující příkazy, ve kterém máte aktivní předplatné nastavené jako předplatné, ve kterém je nasazený cluster AKS. $CLUSTER_NAME Nahraďte $RESOURCE_GROUP skupinu prostředků a názvem vašeho prostředku clusteru a nahraďte ji.

    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. Spuštěním následujícího příkazu ověřte, že jsou pody Chaos Mesh nainstalované:

    kubectl get po -n chaos-testing
    

Měl by se zobrazit výstup podobný následujícímu příkladu (chaos-controller-manager a jeden nebo více démonů chaosu):

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

Můžete také použít pokyny k instalaci na webu Chaos Mesh.

Povolení Chaos Studia v clusteru AKS

Chaos Studio nemůže vkládat chyby proti prostředku, pokud se tento prostředek nepřidá do aplikace Chaos Studio. Pokud chcete přidat prostředek do nástroje Chaos Studio, vytvořte cíl a možnosti prostředku. Clustery AKS mají pouze jeden cílový typ (přímý servis), ale jiné prostředky můžou mít až dva cílové typy. Jedním cílovým typem jsou chyby přímé služby. Dalším cílovým typem jsou chyby založené na agentech. Každý typ chyby Chaos Mesh je reprezentován jako funkce, jako je PodChaos, NetworkChaos a IOChaos.

  1. Vytvořte cíl nahrazením $SUBSCRIPTION_ID$resourceGroupNamea $AKS_CLUSTER_NAME relevantními řetězci clusteru AKS, který přidáváte.

    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. Vytvořte v cíli funkce nahrazením $SUBSCRIPTION_ID$resourceGroupNamea $AKS_CLUSTER_NAME odpovídajícími řetězci clusteru AKS, který přidáváte.

Nahraďte $CAPABILITY "Název schopnosti" chyby, kterou přidáváte.

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

Tady je příklad povolení PodChaos funkce pro referenci:

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

Tento krok je potřeba provést pro každou* funkci, kterou chcete povolit v clusteru.

Teď jste úspěšně přidali cluster AKS do chaos studia.

Vytvoření experimentu

Teď můžete experiment vytvořit. Experiment chaosu definuje akce, které chcete provést proti cílovým prostředkům. Akce jsou uspořádány a spouštěny v sekvenčních krocích. Experiment chaosu také definuje akce, které chcete provést proti větvím, které běží paralelně.

  1. Vytvoření chaosové sítě jsonSpec:

    1. Informace o typu chyby, například typu PodChaos, najdete v dokumentaci k Chaos Mesh.

    2. Pomocí dokumentace ke službě Chaos Mesh zformulujte konfiguraci YAML pro tento typ chyby.

      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. Odeberte libovolný YAML mimo název specvlastnosti specifikace. Odeberte odsazení podrobností specifikace. Parametr duration není nutný, ale pokud je zadaný, použije se. V tomto případě ji odeberte.

      action: pod-failure
      mode: all
      selector:
        namespaces:
          - default
      
    4. Pomocí převaděče YAML-to-JSON, jako je tento , převeďte YAML Chaos Mesh na JSON a minimalizujte ho.

      {"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
      
    5. Pomocí řídicího nástroje pro řetězce JSON, jako je tento , použijte řídicí nástroj JSON nebo změňte dvojité uvozovky na jednoduché uvozovky.

      {\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
      
      {'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
      
  2. Vytvořte json experimentu tak, že začnete s následující ukázkou JSON. Upravte json tak, aby odpovídal experimentu, který chcete spustit, pomocí rozhraní API pro vytvoření experimentu , knihovny chyb a vytvořeného jsonSpec v předchozím kroku.

    {
      "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. Vytvořte experiment pomocí Azure CLI. Nahraďte $SUBSCRIPTION_IDa $RESOURCE_GROUP$EXPERIMENT_NAME vlastnosti experimentu. Ujistěte se, že jste uložili a nahráli json experimentu. Aktualizujte experiment.json název souboru 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
    

    Každý experiment vytvoří odpovídající spravovanou identitu přiřazenou systémem. Poznamenejte si ID objektu zabezpečení pro tuto identitu v odpovědi pro další krok.

Udělení oprávnění experimentu clusteru AKS

Když vytvoříte experiment chaosu, Chaos Studio vytvoří spravovanou identitu přiřazenou systémem, která provádí chyby proti cílovým prostředkům. Tato identita musí mít příslušná oprávnění k cílovému prostředku, aby se experiment úspěšně spustil.

  1. $EXPERIMENT_PRINCIPAL_ID Načtěte příkaz spuštěním následujícího příkazu a zkopírováním PrincipalID odpovědi. Nahraďte $SUBSCRIPTION_IDa $RESOURCE_GROUP$EXPERIMENT_NAME vlastnosti experimentu.
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. Pomocí následujících příkazů přidělte experimentu přístup k vašim prostředkům. Nahraďte $EXPERIMENT_PRINCIPAL_ID ID objektu zabezpečení z předchozího kroku. Nahraďte $SUBSCRIPTION_IDa $resourceGroupName$AKS_CLUSTER_NAME za odpovídající řetězce clusteru 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

Pokud dáváte přednost vytváření vlastních rolí místo předdefinovaných rolí AKS, postupujte podle pokynů na stránce Podporované typy prostředků a přiřazení rolí pro Chaos Studio , kde najdete seznam operací řízení přístupu na základě rolí potřebných pro konkrétní chybu a přidejte je do ručně vytvořené vlastní role.

Spuštění experimentu

Teď jste připraveni spustit experiment. Pokud chcete zobrazit efekt, doporučujeme otevřít přehled clusteru AKS a přejít na přehledy na samostatné kartě prohlížeče. Živá data pro počet aktivních podů ukazují účinek spuštění experimentu.

  1. Spusťte experiment pomocí Azure CLI. Nahraďte $SUBSCRIPTION_IDa $RESOURCE_GROUP$EXPERIMENT_NAME vlastnosti experimentu.

    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. Odpověď obsahuje adresu URL stavu, kterou můžete použít k dotazování stavu experimentu při spuštění experimentu.

Další kroky

Teď, když jste spustili přímý experiment služby AKS Chaos Mesh, jste připraveni: