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
- Una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
- Un cluster del servizio Azure Kubernetes con un pool di nodi Linux. Se non si ha un cluster del servizio Azure Kubernetes, vedere la guida introduttiva al servizio Azure Kubernetes che usa l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.
Limiti
- È possibile usare gli errori di Chaos Mesh con cluster privati configurando l'inserimento di reti virtuali in Chaos Studio. Tutti i comandi rilasciati al cluster privato, inclusi i passaggi descritti in questo articolo per configurare Chaos Mesh, devono seguire le indicazioni cluster privato. I metodi consigliati includono la connessione da una macchina virtuale nella stessa rete virtuale o l'uso della funzionalità richiamo del comando servizio Azure Kubernetes.
- Gli errori di Chaos Mesh del servizio Azure Kubernetes sono supportati solo nei pool di nodi Linux.
- Se il cluster del servizio Azure Kubernetes è configurato per consentire solo intervalli IP autorizzati, è necessario consentire gli intervalli IP di Chaos Studio. È possibile trovarli eseguendo una query sul
ChaosStudio
tag del servizio con l'API di individuazione tag del servizio o file JSON scaricabili.
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.
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
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.
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\":{}}"
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.
Creare
jsonSpec
di Chaos Mesh:Vedere la documentazione di Chaos Mesh per un tipo di errore, ad esempio il tipo PodChaos.
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
Rimuovere qualsiasi YAML all'esterno di
spec
, incluso il nome della proprietà della specifica. Rimuovere il rientro dei dettagli della specifica. Il parametroduration
non è necessario, ma viene usato se specificato. In questo caso, rimuoverlo.action: pod-failure mode: all selector: namespaces: - default
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"]}}
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']}}
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" } ] } ] } }
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. Aggiornareexperiment.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.
- Recuperare
$EXPERIMENT_PRINCIPAL_ID
eseguendo il comando seguente e copiando l'oggettoPrincipalID
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
- 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.
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
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: