Tworzenie eksperymentu chaosu korzystającego z błędu opartego na agencie za pomocą interfejsu wiersza polecenia platformy Azure
Możesz użyć eksperymentu chaosu, aby sprawdzić, czy aplikacja jest odporna na błędy, powodując te błędy w kontrolowanym środowisku. W tym artykule wystąpi duże zdarzenie wykorzystania procesora CPU na maszynie wirtualnej z systemem Linux przy użyciu eksperymentu chaosu i usługi Azure Chaos Studio. Uruchom ten eksperyment, aby pomóc w obronie aplikacji przed zagęszczonej zasobami.
Możesz użyć tych samych kroków, aby skonfigurować i uruchomić eksperyment dla dowolnego błędu opartego na agencie. Błąd oparty na agencie wymaga instalacji i instalacji agenta chaosu. Błąd bezpośredni usługi działa bezpośrednio w odniesieniu do zasobu platformy Azure bez konieczności instrumentacji.
Wymagania wstępne
- Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
- Maszyna wirtualna z systemem operacyjnym na liście zgodności wersji. Jeśli nie masz maszyny wirtualnej, możesz je utworzyć.
- Konfiguracja sieci, która zezwala na połączenie SSH z maszyną wirtualną.
- Tożsamość zarządzana przypisana przez użytkownika. Jeśli nie masz tożsamości zarządzanej przypisanej przez użytkownika, możesz je utworzyć.
Otwórz usługę Azure Cloud Shell
Usługa Azure Cloud Shell to bezpłatna interaktywna powłoka, której można użyć do wykonania kroków opisanych w tym artykule. Udostępnia ona wstępnie zainstalowane i najczęściej używane narzędzia platformy Azure, które są skonfigurowane do użycia na koncie.
Aby otworzyć usługę Cloud Shell, wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu. Możesz również otworzyć usługę Cloud Shell na osobnej karcie przeglądarki, przechodząc do powłoki Bash. Wybierz pozycję Kopiuj , aby skopiować bloki kodu, wklej go w usłudze Cloud Shell, a następnie wybierz Enter , aby go uruchomić.
Jeśli wolisz zainstalować interfejs wiersza polecenia i korzystać z niego lokalnie, ten samouczek wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.30 lub nowszej. Uruchom polecenie az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
Uwaga
Te instrukcje używają terminalu powłoki Bash w usłudze Cloud Shell. Niektóre polecenia mogą nie działać zgodnie z opisem, jeśli interfejs wiersza polecenia jest uruchamiany lokalnie lub w terminalu programu PowerShell.
Przypisywanie tożsamości zarządzanej do maszyny wirtualnej
Przed skonfigurowaniem programu Chaos Studio na maszynie wirtualnej przypisz tożsamość zarządzaną przypisaną przez użytkownika do każdej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych, w którym planujesz zainstalować agenta. az vm identity assign
Użyj polecenia oraz vmss identity assign
. Zastąp $VM_RESOURCE_ID
/$VMSS_RESOURCE_ID
element identyfikatorem zasobu maszyny wirtualnej, którą dodajesz jako element docelowy chaosu. Zastąp $MANAGED_IDENTITY_RESOURCE_ID
element identyfikatorem zasobu tożsamości zarządzanej przypisanej przez użytkownika.
Maszyna wirtualna
az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Zestaw skalowania maszyn wirtualnych
az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
Włączanie programu Chaos Studio na maszynie wirtualnej
Program Chaos Studio nie może wstrzyknąć błędów na maszynie wirtualnej, chyba że maszyna wirtualna została najpierw dodana do programu Chaos Studio. Aby dodać maszynę wirtualną do programu Chaos Studio, utwórz element docelowy i możliwości w zasobie. Następnie instalujesz agenta chaosu.
Maszyny wirtualne mają dwa typy docelowe. Jeden typ docelowy włącza błędy bezpośrednie usługi (jeśli nie jest wymagany żaden agent). Drugi typ docelowy umożliwia błędy oparte na agencie (co wymaga instalacji agenta). Agent chaosu to aplikacja zainstalowana na maszynie wirtualnej jako rozszerzenie maszyny wirtualnej. Służy do wstrzykiwania błędów w systemie operacyjnym gościa.
Włączanie celu chaosu i możliwości
Następnie skonfiguruj element docelowy programu Microsoft-Agent na każdej maszynie wirtualnej lub zestawie skalowania maszyn wirtualnych, który określa tożsamość zarządzaną przypisaną przez użytkownika, której agent używa do nawiązywania połączenia z programem Chaos Studio. W tym przykładzie używamy jednej tożsamości zarządzanej dla wszystkich maszyn wirtualnych. Element docelowy musi zostać utworzony za pośrednictwem interfejsu API REST. W tym przykładzie używamy polecenia interfejsu wiersza polecenia do wykonywania wywołań interfejsu az rest
API REST.
Zmodyfikuj następujący kod JSON, zastępując
$USER_IDENTITY_CLIENT_ID
element identyfikatorem klienta tożsamości zarządzanej. Identyfikator klienta można znaleźć w przeglądzie utworzonej tożsamości zarządzanej przypisanej przez użytkownika w witrynie Azure Portal. Zastąp$USER_IDENTITY_TENANT_ID
element identyfikatorem dzierżawy platformy Azure. Możesz go znaleźć w witrynie Azure Portal w obszarze Microsoft Entra ID w obszarze Informacje o dzierżawie. Zapisz kod JSON jako plik w tej samej lokalizacji, w której używasz interfejsu wiersza polecenia platformy Azure. W usłudze Cloud Shell możesz przeciągać i upuszczać plik JSON, aby go przekazać.{ "properties": { "identities": [ { "clientId": "$USER_IDENTITY_CLIENT_ID", "tenantId": "$USER_IDENTITY_TENANT_ID", "type": "AzureManagedIdentity" } ] } }
Utwórz element docelowy, zastępując
$RESOURCE_ID
element identyfikatorem zasobu docelowej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych. Zastąptarget.json
ciąg nazwą pliku JSON utworzonego w poprzednim kroku.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
Jeśli wystąpi błąd analizowania programu PowerShell, przełącz się do terminalu powłoki Bash zgodnie z zaleceniami dla tego samouczka lub umieść przywoływalny plik JSON w pojedynczym cudzysłowie (
--body '@target.json'
).Skopiuj identyfikator GUID agentProfileId zwrócony przez to polecenie do użycia w późniejszym kroku.
Utwórz możliwości, zastępując
$RESOURCE_ID
element identyfikatorem zasobu docelowej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych. Zastąp$CAPABILITY
ciąg nazwą funkcji błędów, którą włączasz (na przykładCPUPressure-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\":{}}"
Jeśli na przykład włączasz możliwość wykorzystania procesora CPU:
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\":{}}"
Instalowanie rozszerzenia maszyny wirtualnej programu Chaos Studio
Agent chaosu to aplikacja uruchamiana na maszynie wirtualnej lub w wystąpieniach zestawu skalowania maszyn wirtualnych w celu wykonywania błędów opartych na agencie. Podczas instalacji konfigurujesz:
- Agent z tożsamością zarządzaną, która powinna być używana przez agenta do uwierzytelniania w programie Chaos Studio.
- Identyfikator profilu utworzonego elementu docelowego programu Microsoft-Agent.
- Opcjonalnie klucz instrumentacji usługi Application Insights, który umożliwia agentowi wysyłanie zdarzeń diagnostycznych do usługi Application Insights.
Przed rozpoczęciem upewnij się, że masz następujące szczegóły:
- agentProfileId: właściwość zwrócona podczas tworzenia obiektu docelowego. Jeśli nie masz tej właściwości, możesz uruchomić
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
i skopiowaćagentProfileId
właściwość. - ClientId: identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika używany w obiekcie docelowym. Jeśli nie masz tej właściwości, możesz uruchomić
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
i skopiowaćclientId
właściwość. - (Opcjonalnie) AppInsightsKey: klucz instrumentacji składnika usługi Application Insights, który można znaleźć na stronie usługi Application Insights w portalu w obszarze Podstawy.
- agentProfileId: właściwość zwrócona podczas tworzenia obiektu docelowego. Jeśli nie masz tej właściwości, możesz uruchomić
Zainstaluj rozszerzenie maszyny wirtualnej programu Chaos Studio. Zastąp
$VM_RESOURCE_ID
element identyfikatorem zasobu maszyny wirtualnej lub zastąp$SUBSCRIPTION_ID
ciąg ,$RESOURCE_GROUP
i$VMSS_NAME
właściwościami zestawu skalowania maszyn wirtualnych. Zastąp$AGENT_PROFILE_ID
element identyfikatorem profilu agenta. Zastąp element$USER_IDENTITY_CLIENT_ID
identyfikatorem klienta tożsamości zarządzanej. Zastąp$APP_INSIGHTS_KEY
element kluczem instrumentacji usługi Application Insights. Jeśli nie używasz usługi Application Insights, usuń parę klucz/wartość.Pełna lista domyślnej konfiguracji rozszerzenia maszyny wirtualnej agenta
Poniżej przedstawiono minimalną konfigurację rozszerzenia maszyny wirtualnej agenta wymaganą przez użytkownika:
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID" }
Poniżej przedstawiono wszystkie wartości konfiguracji rozszerzenia maszyny wirtualnej agenta
{ "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. } }
Instalowanie agenta na maszynie wirtualnej
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}}'
Instalowanie agenta w zestawie skalowania maszyn wirtualnych
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}}'
Jeśli konfigurujesz zestaw skalowania maszyn wirtualnych, sprawdź, czy wystąpienia zostały uaktualnione do najnowszego modelu. W razie potrzeby uaktualnij wszystkie wystąpienia w modelu.
az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
Tworzenie eksperymentu
Po pomyślnym wdrożeniu maszyny wirtualnej możesz teraz utworzyć eksperyment. Eksperyment chaosu definiuje akcje, które chcesz wykonać względem zasobów docelowych. Akcje są zorganizowane i uruchamiane w krokach sekwencyjnych. Eksperyment chaosu definiuje również akcje, które mają być wykonywane względem gałęzi, które są uruchamiane równolegle.
Sformułuj kod JSON eksperymentu, zaczynając od poniższego przykładu JSON. Zmodyfikuj kod JSON, aby odpowiadał eksperymentowi, który chcesz uruchomić przy użyciu interfejsu API tworzenia eksperymentu i biblioteki błędów.
{ "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" } ] } }
Jeśli korzystasz z zestawu skalowania maszyn wirtualnych, zmodyfikuj parametry błędów, aby uwzględnić numery wystąpień na wartość docelową:
"parameters": [ { "key": "pressureLevel", "value": "95" }, { "key": "virtualMachineScaleSetInstances", "value": "[0,1,2]" } ]
Numery wystąpień zestawu skalowania można zidentyfikować w witrynie Azure Portal, przechodząc do zestawu skalowania maszyn wirtualnych i wybierając pozycję Wystąpienia. Nazwa wystąpienia kończy się numerem wystąpienia.
Utwórz eksperyment przy użyciu interfejsu wiersza polecenia platformy Azure. Zastąp
$SUBSCRIPTION_ID
wartości ,$RESOURCE_GROUP
i$EXPERIMENT_NAME
właściwościami eksperymentu. Upewnij się, że plik JSON eksperymentu został zapisany i przekazany. Zaktualizujexperiment.json
plik za pomocą nazwy pliku 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
Każdy eksperyment tworzy odpowiednią tożsamość zarządzaną przypisaną przez system. Zanotuj identyfikator podmiotu zabezpieczeń dla tej tożsamości w odpowiedzi na następny krok.
Nadaj eksperymentowi uprawnienie do maszyny wirtualnej
Podczas tworzenia eksperymentu chaosu program Chaos Studio tworzy tożsamość zarządzaną przypisaną przez system, która wykonuje błędy względem zasobów docelowych. Ta tożsamość musi mieć odpowiednie uprawnienia do zasobu docelowego, aby eksperyment został pomyślnie uruchomiony. Rola Czytelnik jest wymagana w przypadku błędów opartych na agencie. Inne role, które nie mają uprawnień */odczyt, takich jak Współautor maszyny wirtualnej, nie będą udzielać odpowiednich uprawnień dla błędów opartych na agencie.
Nadaj eksperymentowi dostęp do maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych przy użyciu następującego polecenia. Zastąp $EXPERIMENT_PRINCIPAL_ID
element identyfikatorem podmiotu zabezpieczeń z poprzedniego kroku. Zastąp $RESOURCE_ID
element identyfikatorem zasobu docelowej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych. Pamiętaj, aby użyć identyfikatora zasobu maszyny wirtualnej, a nie identyfikatora zasobu agenta chaosu użytego w definicji eksperymentu. Uruchom to polecenie dla każdej maszyny wirtualnej lub zestawu skalowania maszyn wirtualnych przeznaczonych w eksperymencie.
az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID
Uruchamianie eksperymentu
Teraz możesz przystąpić do uruchamiania eksperymentu. Aby zobaczyć efekt, zalecamy otwarcie wykresu metryk usługi Azure Monitor z użyciem procesora CPU maszyny wirtualnej na osobnej karcie przeglądarki.
Rozpocznij eksperyment przy użyciu interfejsu wiersza polecenia platformy Azure. Zastąp
$SUBSCRIPTION_ID
wartości ,$RESOURCE_GROUP
i$EXPERIMENT_NAME
właściwościami eksperymentu.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
Odpowiedź zawiera adres URL stanu, którego można użyć do wykonywania zapytań dotyczących stanu eksperymentu podczas uruchamiania eksperymentu.
Następne kroki
Teraz, po uruchomieniu eksperymentu opartego na agencie, możesz wykonać następujące czynności: