Condividi tramite


Creare un esperimento Chaos che usa un errore Chaos Mesh con l'interfaccia della riga di comando di Azure

È possibile usare un esperimento chaos per verificare che l'applicazione sia resiliente agli errori causando tali errori in un ambiente controllato. In questo articolo si verificano errori periodici dei pod del servizio Azure Kubernetes in uno spazio dei nomi usando un esperimento chaos e Azure Chaos Studio. L'esecuzione di questo esperimento consente di difendersi dall'indisponibilità del servizio in caso di errori sporadici.

Chaos Studio usa Chaos Mesh, una piattaforma di progettazione chaos gratuita e open source per Kubernetes, per inserire errori in un cluster del servizio Azure Kubernetes. Gli errori di Chaos Mesh sono errori diretti dal servizio che richiedono l'installazione di Chaos Mesh nel cluster del servizio Azure Kubernetes. È possibile usare questi stessi passaggi per configurare ed eseguire un esperimento per qualsiasi errore di Chaos Mesh del servizio Azure Kubernetes.

Prerequisiti

Limiti

Aprire Azure Cloud Shell

Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.

Per aprire Cloud Shell, selezionare Prova nell'angolo in alto a destra di un blocco di codice. È anche possibile aprire Cloud Shell in una scheda separata del browser visitando Bash. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e selezionare Invio per eseguirli.

Se si preferisce installare e usare l'interfaccia della riga di comando in locale, per questa esercitazione è richiesta l'interfaccia della riga di comando di Azure versione 2.0.30 o successiva. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Nota

Queste istruzioni usano un terminale Bash in Cloud Shell. Alcuni comandi potrebbero non funzionare come descritto se si esegue l'interfaccia della riga di comando in locale o in un terminale di PowerShell.

Configurare Chaos Mesh nel cluster del servizio Azure Kubernetes

Prima di poter eseguire gli errori di Chaos Mesh in Chaos Studio, è necessario installare Chaos Mesh nel cluster del servizio Azure Kubernetes.

  1. Eseguire i comandi seguenti in una finestra di Cloud Shell in cui è impostata la sottoscrizione attiva come sottoscrizione in cui viene distribuito il cluster del servizio Azure Kubernetes. Sostituire $RESOURCE_GROUP e $CLUSTER_NAME con il gruppo di risorse e il nome della risorsa cluster.

    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. Verificare che i pod Chaos Mesh siano installati eseguendo il comando seguente:

    kubectl get po -n chaos-testing
    

L'output dovrebbe essere simile all'esempio seguente (chaos-controller-manager e uno o più chaos-daemon):

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

È anche possibile usare le istruzioni di installazione nel sito Web Chaos Mesh.

Abilitare Chaos Studio nel cluster del servizio Azure Kubernetes

Chaos Studio non può inserire errori su una risorsa, a meno che tale risorsa non venga aggiunta prima a Chaos Studio. Per aggiungere una risorsa a Chaos Studio, creare una destinazione e funzionalità nella risorsa. I cluster del servizio Azure Kubernetes hanno un solo tipo di destinazione (service-direct), ma altre risorse potrebbero avere fino a due tipi di destinazione. Un tipo di destinazione è per gli errori diretti dal servizio. Un altro tipo di destinazione è per gli errori basati su agente. Ogni tipo di errore di Chaos Mesh è rappresentato come una funzionalità come PodChaos, NetworkChaos e IOChaos.

  1. Creare una destinazione sostituendo $SUBSCRIPTION_ID, $resourceGroupName e $AKS_CLUSTER_NAME con le stringhe pertinenti del cluster del servizio Azure Kubernetes che si stanno aggiungendo.

    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. Creare le funzionalità sulla destinazione sostituendo $SUBSCRIPTION_ID, $resourceGroupName e $AKS_CLUSTER_NAME con le stringhe pertinenti del cluster del servizio Azure Kubernetes che si stanno aggiungendo.

Sostituire $CAPABILITY con "Nome funzionalità " dell'errore che si sta aggiungendo.

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

Ecco un esempio di abilitazione della funzionalità PodChaos per riferimento:

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

Questo passaggio deve essere eseguito per ogni* funzionalità che si vuole abilitare nel cluster.

Il cluster del servizio Azure Kubernetes è stato aggiunto a Chaos Studio.

Creare un esperimento

È ora possibile creare l'esperimento. Un esperimento chaos definisce le azioni da eseguire sulle risorse di destinazione. Le azioni sono organizzate ed eseguite in passaggi sequenziali. L'esperimento chaos definisce anche le azioni che si desidera eseguire sui rami, che vengono eseguite in parallelo.

  1. Creare jsonSpec di Chaos Mesh:

    1. Vedere la documentazione di Chaos Mesh per un tipo di errore, ad esempio il tipo PodChaos.

    2. Formulare la configurazione YAML per tale tipo di errore usando la documentazione di Chaos Mesh.

      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. Rimuovere qualsiasi YAML all'esterno di spec, incluso il nome della proprietà della specifica. Rimuovere il rientro dei dettagli della specifica. Il parametro duration non è necessario, ma viene usato se specificato. In questo caso, rimuoverlo.

      action: pod-failure
      mode: all
      selector:
        namespaces:
          - default
      
    4. Usare un convertitore YAML-to-JSON simile a questo per convertire Chaos Mesh YAML in JSON e ridurlo al minimo.

      {"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
      
    5. Usare uno strumento di escape di stringa JSON come questo per eseguire l'escape della specifica JSON o modificare le virgolette doppie in virgolette singole.

      {\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
      
      {'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
      
  2. Creare il codice JSON dell'esperimento iniziando con l'esempio JSON seguente. Modificare il codice JSON in modo che corrisponda all'esperimento che si vuole eseguire usando l'API Creare un esperimento, la libreria di errori e l'oggetto jsonSpec creato nel passaggio precedente.

    {
      "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. Creare l'esperimento usando l'interfaccia della riga di comando di Azure. Sostituire $SUBSCRIPTION_ID, $RESOURCE_GROUP e $EXPERIMENT_NAME con le proprietà per l'esperimento. Assicurarsi di aver salvato e caricato il codice JSON dell'esperimento. Aggiornare experiment.json con il nome file 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
    

    Ogni esperimento crea un'identità gestita assegnata dal sistema corrispondente. Prendere nota dell'ID entità per questa identità nella risposta per il passaggio successivo.

Concedere l'autorizzazione dell'esperimento al cluster del servizio Azure Kubernetes

Quando si crea un esperimento chaos, Chaos Studio crea un'identità gestita assegnata dal sistema che esegue errori sulle risorse di destinazione. Questa identità deve avere le autorizzazioni appropriate per la risorsa di destinazione affinché l'esperimento venga eseguito correttamente.

  1. Recuperare $EXPERIMENT_PRINCIPAL_ID eseguendo il comando seguente e copiando l'oggetto PrincipalID dalla risposta. Sostituire $SUBSCRIPTION_ID, $RESOURCE_GROUP e $EXPERIMENT_NAME con le proprietà per l'esperimento.
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. Concedere all'esperimento l'accesso alle risorse usando i comandi seguenti. Sostituire $EXPERIMENT_PRINCIPAL_ID con l'ID entità del passaggio precedente. Sostituire $SUBSCRIPTION_ID, $resourceGroupName e $AKS_CLUSTER_NAME con le stringhe pertinenti del cluster del servizio Azure Kubernetes.
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

Se si preferisce creare ruoli personalizzati invece dei ruoli del servizio Azure Kubernetes predefiniti, seguire le istruzioni nella pagina Tipi di risorse e assegnazioni di ruolo supportate per Chaos Studio per elencare le operazioni di controllo degli accessi in base al ruolo necessarie per un errore specifico e aggiungerle a un ruolo personalizzato creato manualmente.

Eseguire l'esperimento

È ora possibile eseguire l'esperimento. Per visualizzare l'effetto, è consigliabile aprire la panoramica del cluster del servizio Azure Kubernetes e passare a Informazioni dettagliate in una scheda del browser separata. I dati attivi per il numero di pod attivi mostrano l'effetto dell'esecuzione dell'esperimento.

  1. Avviare l'esperimento usando l'interfaccia della riga di comando di Azure. Sostituire $SUBSCRIPTION_ID, $RESOURCE_GROUP e $EXPERIMENT_NAME con le proprietà per l'esperimento.

    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. La risposta include un URL di stato che è possibile usare per eseguire una query sullo stato dell'esperimento durante l'esecuzione dell'esperimento.

Passaggi successivi

Dopo aver eseguito un esperimento diretto del servizio Chaos Mesh del servizio Azure Kubernetes, è possibile: