Skapa ett kaosexperiment som använder ett agentbaserat 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 en hög % av cpu-användningshändelsen på en virtuell Linux-dator (VM) med hjälp av ett kaosexperiment och Azure Chaos Studio. Kör det här experimentet för att skydda dig mot ett program från att bli resurssvulten.
Du kan använda samma steg för att konfigurera och köra ett experiment för alla agentbaserade fel. Ett agentbaserat fel kräver konfiguration och installation av kaosagenten. Ett tjänstdirigeringsfel körs direkt mot en Azure-resurs utan instrumentation.
Förutsättningar
- En Azure-prenumeration. Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
- En virtuell dator som kör ett operativsystem i listan över versionskompatibilitet . Om du inte har en virtuell dator kan du skapa en.
- En nätverkskonfiguration som gör att du kan SSH till din virtuella dator.
- En användartilldelad hanterad identitet. Om du inte har en användartilldelad hanterad identitet kan du skapa en.
Ö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.
Tilldela hanterad identitet till den virtuella datorn
Innan du konfigurerar Chaos Studio på den virtuella datorn tilldelar du en användartilldelad hanterad identitet till varje vm eller vm-skalningsuppsättning där du planerar att installera agenten. az vm identity assign
Använd kommandot elleraz vmss identity assign
. Ersätt $VM_RESOURCE_ID
/$VMSS_RESOURCE_ID
med resurs-ID:t för den virtuella dator som du lägger till som ett kaosmål. Ersätt $MANAGED_IDENTITY_RESOURCE_ID
med resurs-ID för den användartilldelade hanterade identiteten.
Virtuell maskin
az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Skaluppsättning för virtuella datorer
az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Aktivera Chaos Studio på den virtuella datorn
Chaos Studio kan inte mata in fel mot en virtuell dator om inte den virtuella datorn lades till i Chaos Studio först. Om du vill lägga till en virtuell dator i Chaos Studio skapar du ett mål och funktioner för resursen. Sedan installerar du kaosagenten.
Virtuella datorer har två måltyper. En måltyp möjliggör tjänstdirigeringsfel (där ingen agent krävs). Den andra måltypen aktiverar agentbaserade fel (vilket kräver installation av en agent). Chaos-agenten är ett program som är installerat på den virtuella datorn som ett VM-tillägg. Du använder den för att mata in fel i gästoperativsystemet.
Aktivera kaosmålet och funktionerna
Konfigurera sedan ett Microsoft-Agent-mål på varje VM eller vm-skalningsuppsättning som anger den användartilldelade hanterade identitet som agenten använder för att ansluta till Chaos Studio. I det här exemplet använder vi en hanterad identitet för alla virtuella datorer. Ett mål måste skapas via REST API. I det här exemplet använder az rest
vi CLI-kommandot för att köra REST API-anropen.
Ändra följande JSON genom att ersätta med klient-ID
$USER_IDENTITY_CLIENT_ID
:t för din hanterade identitet. Du hittar klient-ID:t i Azure Portal översikt över den användartilldelade hanterade identitet som du skapade. Ersätt$USER_IDENTITY_TENANT_ID
med ditt Azure-klient-ID. Du hittar den i Azure Portal under Microsoft Entra-ID under Klientorganisationsinformation. Spara JSON som en fil på samma plats där du kör Azure CLI. I Cloud Shell kan du dra och släppa JSON-filen för att ladda upp den.{ "properties": { "identities": [ { "clientId": "$USER_IDENTITY_CLIENT_ID", "tenantId": "$USER_IDENTITY_TENANT_ID", "type": "AzureManagedIdentity" } ] } }
Skapa målet genom att ersätta med resurs-ID
$RESOURCE_ID
:t för den virtuella måldatorn eller vm-skalningsuppsättningen. Ersätttarget.json
med namnet på JSON-filen som du skapade i föregående steg.az rest --method put --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 --body @target.json --query properties.agentProfileId -o tsv
Om du får ett PowerShell-parsningsfel växlar du till en Bash-terminal som rekommenderas för den här självstudien eller omger den refererade JSON-filen med enkla citattecken (
--body '@target.json'
).Kopiera ned GUID för agentProfileId som returneras av det här kommandot för användning i ett senare steg.
Skapa funktionerna genom att ersätta med resurs-ID
$RESOURCE_ID
:t för den virtuella måldatorn eller vm-skalningsuppsättningen. Ersätt$CAPABILITY
med namnet på den felfunktion som du aktiverar (till exempelCPUPressure-1.0
).az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
Om du till exempel aktiverar processorbelastningsfunktionen:
az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/CPUPressure-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
Installera tillägget för den virtuella datorn Chaos Studio
Kaosagenten är ett program som körs i vm- eller vm-skalningsuppsättningsinstanser för att köra agentbaserade fel. Under installationen konfigurerar du:
- Agenten med den hanterade identitet som agenten ska använda för att autentisera till Chaos Studio.
- Profil-ID för det Microsoft-Agent-mål som du skapade.
- Du kan också använda en Application Insights-instrumentationsnyckel som gör att agenten kan skicka diagnostikhändelser till Application Insights.
Kontrollera att du har följande information innan du börjar:
- agentProfileId: Egenskapen som returnerades när du skapade målet. Om du inte har den här egenskapen kan du köra
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
och kopiera egenskapenagentProfileId
. - ClientId: Klient-ID för den användartilldelade hanterade identiteten som används i målet. Om du inte har den här egenskapen kan du köra
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
och kopiera egenskapenclientId
. - (Valfritt) AppInsightsKey: Instrumentationsnyckeln för din Application Insights-komponent, som du hittar på sidan Application Insights i portalen under Essentials.
- agentProfileId: Egenskapen som returnerades när du skapade målet. Om du inte har den här egenskapen kan du köra
Installera Chaos Studio VM-tillägget. Ersätt
$VM_RESOURCE_ID
med resurs-ID:t för den virtuella datorn eller ersätt$SUBSCRIPTION_ID
,$RESOURCE_GROUP
och$VMSS_NAME
med dessa egenskaper för vm-skalningsuppsättningen. Ersätt$AGENT_PROFILE_ID
med agentens profil-ID. Ersätt$USER_IDENTITY_CLIENT_ID
med klient-ID:t för din hanterade identitet. Ersätt$APP_INSIGHTS_KEY
med instrumentationsnyckeln för Application Insights. Om du inte använder Application Insights tar du bort nyckel/värde-paret.Fullständig lista över standardkonfigurationen för agenttillägg för virtuella datorer
Här är den minsta konfiguration av vm-tillägget för agenten som krävs av användaren:
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID" }
Här är alla värden för konfiguration av vm-tillägg för agent
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID", "appinsightskey": "$APP_INSIGHTS_KEY", "overrides": { "region": string, default to be null "logLevel": { "default" : string , default to be Information }, "checkCertRevocation": boolean, default to be false. } }
Installera agenten på en virtuell dator
Windows
az vm extension set --ids $VM_RESOURCE_ID --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vm extension set --ids $VM_RESOURCE_ID --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Installera agenten på en VM-skalningsuppsättning
Windows
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Om du konfigurerar en VM-skalningsuppsättning kontrollerar du att instanserna har uppgraderats till den senaste modellen. Om det behövs uppgraderar du alla instanser i modellen.
az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
Skapa ett experiment
När du har distribuerat den virtuella datorn kan du nu 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.
Formulera experimentets JSON med början i 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 och felbiblioteket.
{ "identity": { "type": "SystemAssigned" }, "location": "centralus", "properties": { "selectors": [ { "id": "Selector1", "targets": [ { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myWindowsVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" }, { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myLinuxVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" } ], "type": "List" } ], "steps": [ { "branches": [ { "actions": [ { "duration": "PT10M", "name": "urn:csci:microsoft:agent:cpuPressure/1.0", "parameters": [ { "key": "pressureLevel", "value": "95" } ], "selectorId": "Selector1", "type": "continuous" } ], "name": "Branch 1" } ], "name": "Step 1" } ] } }
Om du kör mot en VM-skalningsuppsättning ändrar du felparametrarna så att instansnumren inkluderas som mål:
"parameters": [ { "key": "pressureLevel", "value": "95" }, { "key": "virtualMachineScaleSetInstances", "value": "[0,1,2]" } ]
Du kan identifiera instansnummer för skalningsuppsättningar i Azure Portal genom att gå till vm-skalningsuppsättningen och välja Instanser. Instansnamnet slutar med instansnumret.
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 den virtuella datorn
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. Rollen Läsare krävs för agentbaserade fel. Andra roller som inte har */Läs-behörighet, till exempel Virtuell datordeltagare, beviljar inte lämplig behörighet för agentbaserade fel.
Ge experimentet åtkomst till den virtuella datorn eller vm-skalningsuppsättningen med hjälp av följande kommando. Ersätt $EXPERIMENT_PRINCIPAL_ID
med huvud-ID:t från föregående steg. Ersätt $RESOURCE_ID
med resurs-ID:t för den virtuella måldatorn eller vm-skalningsuppsättningen. Se till att använda resurs-ID:t för den virtuella datorn, inte resurs-ID:t för kaosagenten som används i experimentdefinitionen. Kör det här kommandot för varje VM eller vm-skalningsuppsättning som är mål för experimentet.
az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID
Kör experimentet
Nu är du redo att köra experimentet. För att se effekten rekommenderar vi att du öppnar ett Azure Monitor-måttdiagram med den virtuella datorns CPU-tryck på en separat webbläsarflik.
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=2023-11-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 agentbaserat experiment är du redo att: