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
- En Azure-prenumeration. Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
- Ett AKS-kluster med Linux-nodpooler. Om du inte har något AKS-kluster kan du läsa aks-snabbstarten som använder Azure CLI, Azure PowerShell eller Azure Portal.
Begränsningar
- Du kan använda Chaos Mesh-fel med privata kluster genom att konfigurera VNet-inmatning i Chaos Studio. Alla kommandon som utfärdas till det privata klustret, inklusive stegen i den här artikeln för att konfigurera Chaos Mesh, måste följa vägledningen för privata kluster. Rekommenderade metoder är att ansluta från en virtuell dator i samma virtuella nätverk eller använda aks-kommandot invoke-funktionen .
- AKS Chaos Mesh-fel stöds endast i Linux-nodpooler.
- Om ditt AKS-kluster är konfigurerat för att endast tillåta auktoriserade IP-intervall måste du tillåta Chaos Studio IP-intervall. Du hittar dem genom att
ChaosStudio
fråga tjänsttaggen med API:et för identifiering av tjänsttagg eller nedladdningsbara JSON-filer.
Ö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.
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
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.
Skapa ett mål genom att
$SUBSCRIPTION_ID
ersätta ,$resourceGroupName
och$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\":{}}"
Skapa funktionerna på målet genom att
$SUBSCRIPTION_ID
ersätta ,$resourceGroupName
och$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.
Skapa ett Chaos Mesh
jsonSpec
:Se Chaos Mesh-dokumentationen för en feltyp, till exempel PodChaos-typen.
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
Ta bort yaml utanför
spec
, inklusive egenskapsnamnet spec. Ta bort indraget för specifikationsinformationen. Parameternduration
ä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
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"]}}
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']}}
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" } ] } ] } }
Skapa experimentet med hjälp av Azure CLI. Ersätt
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
och$EXPERIMENT_NAME
med egenskaperna för experimentet. Kontrollera att du har sparat och laddat upp experimentets JSON. Uppdateraexperiment.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.
- Hämta genom att
$EXPERIMENT_PRINCIPAL_ID
köra följande kommando och kopieraPrincipalID
från svaret. Ersätt$SUBSCRIPTION_ID
,$RESOURCE_GROUP
och$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
- 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
,$resourceGroupName
och$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.
Starta experimentet med hjälp av Azure CLI. Ersätt
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
och$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
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: