Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 något Azure-konto skapar du ett kostnadsfritt konto innan du börjar.
- Ett AKS-kluster med Linux-nodpooler. Om du inte har något AKS-kluster kan du se AKS-snabbstartguiden som använder Azure CLI, Azure PowerShell eller Azure-portalen.
Begränsningar
- Du kan använda felscenarier i Chaos Mesh med privata kluster genom att konfigurera VNet-injektion 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 funktionen AKS command invoke.
- 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 göra en förfrågan på tjänsttaggen med Service Tag Discovery API:n 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 av 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_GROUPoch$CLUSTER_NAMEmed 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.sockKontrollera 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_IDersätta ,$resourceGroupNameoch$AKS_CLUSTER_NAMEmed 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_IDersätta ,$resourceGroupNameoch$AKS_CLUSTER_NAMEmed 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: - defaultTa 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: - defaultAnvä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
jsonSpecsom 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_GROUPoch$EXPERIMENT_NAMEmed egenskaperna för experimentet. Kontrollera att du har sparat och laddat upp experimentets JSON. Uppdateraexperiment.jsonmed 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.jsonVarje 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_IDköra följande kommando och kopieraPrincipalIDfrån svaret. Ersätt$SUBSCRIPTION_ID,$RESOURCE_GROUPoch$EXPERIMENT_NAMEmed 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_IDmed huvud-ID:t från föregående steg. Ersätt$SUBSCRIPTION_ID,$resourceGroupNameoch$AKS_CLUSTER_NAMEmed relevanta strängar i AKS-klustret.
az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --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_GROUPoch$EXPERIMENT_NAMEmed 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-01Svaret 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: