Delen via


Een chaos-experiment maken dat gebruikmaakt van een fout op basis van een agent met de Azure CLI

U kunt een chaos-experiment gebruiken om te controleren of uw toepassing bestand is tegen fouten door deze fouten in een gecontroleerde omgeving te veroorzaken. In dit artikel veroorzaakt u een hoog percentage cpu-gebruiksevenementen op een virtuele Linux-machine (VM) met behulp van een chaos-experiment en Azure Chaos Studio. Voer dit experiment uit om u te beschermen tegen een toepassing tegen het uithongeren van resources.

U kunt dezelfde stappen gebruiken om een experiment in te stellen en uit te voeren voor een fout op basis van agents. Een fout op basis van een agent vereist de installatie en installatie van de chaosagent. Een service-directe fout wordt rechtstreeks uitgevoerd op een Azure-resource zonder instrumentatie.

Vereisten

Azure Cloud Shell openen

Azure Cloud Shell is een gratis interactieve shell waarmee u de stappen in dit artikel kunt uitvoeren. In deze shell zijn algemene Azure-hulpprogramma's vooraf geïnstalleerd en geconfigureerd voor gebruik met uw account.

Als u Cloud Shell wilt openen, selecteert u Proberen in de rechterbovenhoek van een codeblok. U kunt Cloud Shell ook openen in een afzonderlijk browsertabblad door naar Bash te gaan. Selecteer Kopiëren om de codeblokken te kopiëren, plak deze in Cloud Shell en selecteer Enter om deze uit te voeren.

Als u de CLI liever lokaal installeert en gebruikt, hebt u voor deze zelfstudie Azure CLI versie 2.0.30 of hoger nodig. Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

Notitie

Deze instructies gebruiken een Bash-terminal in Cloud Shell. Sommige opdrachten werken mogelijk niet zoals beschreven als u de CLI lokaal of in een PowerShell-terminal uitvoert.

Beheerde identiteit toewijzen aan de virtuele machine

Voordat u Chaos Studio op de VIRTUELE machine instelt, wijst u een door de gebruiker toegewezen beheerde identiteit toe aan elke VM of virtuele-machineschaalset waar u de agent wilt installeren. Gebruik de az vm identity assign of az vmss identity assign opdracht. Vervang $VM_RESOURCE_ID/$VMSS_RESOURCE_ID door de resource-id van de VM die u toevoegt als een chaosdoel. Vervang door $MANAGED_IDENTITY_RESOURCE_ID de resource-id van de door de gebruiker toegewezen beheerde identiteit.

Virtuele machine

az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID

Schaalset voor virtuele machines

az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID

Chaos Studio inschakelen op uw virtuele machine

Chaos Studio kan geen fouten injecteren op een VIRTUELE machine, tenzij die VM eerst is toegevoegd aan Chaos Studio. Als u een VIRTUELE machine wilt toevoegen aan Chaos Studio, maakt u een doel en mogelijkheden voor de resource. Vervolgens installeert u de chaosagent.

Virtuele machines hebben twee doeltypen. Eén doeltype maakt service-directe fouten mogelijk (waarbij geen agent vereist is). Het andere doeltype maakt fouten op basis van agents mogelijk (waarvoor de installatie van een agent is vereist). De chaosagent is een toepassing die als VM-extensie op uw VIRTUELE machine is geïnstalleerd. U gebruikt het om fouten in het gastbesturingssysteem te injecteren.

Het chaosdoel en de mogelijkheden inschakelen

Stel vervolgens een Microsoft-Agent-doel in op elke VM of virtuele-machineschaalset die de door de gebruiker toegewezen beheerde identiteit aangeeft die de agent gebruikt om verbinding te maken met Chaos Studio. In dit voorbeeld gebruiken we één beheerde identiteit voor alle VM's. Er moet een doel worden gemaakt via REST API. In dit voorbeeld gebruiken we de CLI-opdracht az rest om de REST API-aanroepen uit te voeren.

  1. Wijzig de volgende JSON door de client-id van uw beheerde identiteit te vervangen $USER_IDENTITY_CLIENT_ID . U vindt de client-id in azure Portal- overzicht van de door de gebruiker toegewezen beheerde identiteit die u hebt gemaakt. Vervang door $USER_IDENTITY_TENANT_ID uw Azure-tenant-id. U vindt deze in Azure Portal onder Microsoft Entra-id onder Tenantgegevens. Sla de JSON op als een bestand op dezelfde locatie waarop u de Azure CLI uitvoert. In Cloud Shell kunt u het JSON-bestand slepen en neerzetten om het te uploaden.

    {
      "properties": {
        "identities": [
          {
            "clientId": "$USER_IDENTITY_CLIENT_ID",
            "tenantId": "$USER_IDENTITY_TENANT_ID",
            "type": "AzureManagedIdentity"
          }
        ]
      }
    }
    
  2. Maak het doel door de resource-id van de doel-VM of virtuele-machineschaalset te vervangen $RESOURCE_ID . Vervang target.json door de naam van het JSON-bestand dat u in de vorige stap hebt gemaakt.

    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
    

    Als u een PowerShell-parseringsfout ontvangt, schakelt u over naar een Bash-terminal zoals aanbevolen voor deze zelfstudie of plaatst u het JSON-bestand waarnaar wordt verwezen tussen enkele aanhalingstekens (--body '@target.json').

  3. Kopieer de GUID voor de agentProfileId die door deze opdracht is geretourneerd voor gebruik in een latere stap.

  4. Maak de mogelijkheden door de resource-id van de doel-VM of virtuele-machineschaalset te vervangen $RESOURCE_ID . Vervang door $CAPABILITY de naam van de foutmogelijkheid die u inschakelt (bijvoorbeeld CPUPressure-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\":{}}"
    

    Als u bijvoorbeeld de CPU-drukfunctie inschakelt:

    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\":{}}"
    

De extensie voor de virtuele Chaos Studio-machine installeren

De chaosagent is een toepassing die wordt uitgevoerd in uw VM- of virtuele-machineschaalsetexemplaren om fouten op basis van agents uit te voeren. Tijdens de installatie configureert u het volgende:

  • De agent met de beheerde identiteit die de agent moet gebruiken om te verifiëren bij Chaos Studio.
  • De profiel-id van het Microsoft-Agent-doel dat u hebt gemaakt.
  • Optioneel, een Application Insights-instrumentatiesleutel waarmee de agent diagnostische gebeurtenissen naar Application Insights kan verzenden.
  1. Voordat u begint, moet u ervoor zorgen dat u over de volgende gegevens beschikt:

    • agentProfileId: de eigenschap die wordt geretourneerd wanneer u het doel maakt. Als u deze eigenschap niet hebt, kunt u de agentProfileId eigenschap uitvoeren az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 en kopiëren.
    • ClientId: de client-id van de door de gebruiker toegewezen beheerde identiteit die in het doel wordt gebruikt. Als u deze eigenschap niet hebt, kunt u de clientId eigenschap uitvoeren az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 en kopiëren.
    • (Optioneel) AppInsightsKey: de instrumentatiesleutel voor uw Application Insights-onderdeel, die u kunt vinden op de Application Insights-pagina in de portal onder Essentials.
  2. Installeer de Chaos Studio VM-extensie. Vervang $VM_RESOURCE_ID door de resource-id van uw VIRTUELE machine of vervang $SUBSCRIPTION_ID, $RESOURCE_GROUPen $VMSS_NAME door deze eigenschappen voor uw virtuele-machineschaalset. Vervang door $AGENT_PROFILE_ID de profiel-id van de agent. Vervang door $USER_IDENTITY_CLIENT_ID de client-id van uw beheerde identiteit. Vervang door $APP_INSIGHTS_KEY uw Application Insights-instrumentatiesleutel. Als u Application Insights niet gebruikt, verwijdert u dat sleutel-waardepaar.

    Volledige lijst met de standaardconfiguratie van de extensie voor virtuele machines van agent

    Dit is de minimale configuratie van de VM-extensie van de agent die door de gebruiker is vereist:

    {
        "profile": "$AGENT_PROFILE_ID",
        "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID"
    }
    

    Hier ziet u alle waarden voor de configuratie van de vm-extensie van de 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.
        }
    }
    

    De agent installeren op een virtuele machine

    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}}'
    

    De agent installeren op een virtuele-machineschaalset

    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}}'
    
  3. Als u een virtuele-machineschaalset instelt, controleert u of de exemplaren zijn bijgewerkt naar het nieuwste model. Voer indien nodig alle exemplaren in het model bij.

    az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
    

Een experiment maken

Nadat u de VIRTUELE machine hebt geïmplementeerd, kunt u nu uw experiment maken. Een chaos-experiment definieert de acties die u wilt uitvoeren op doelbronnen. De acties worden geordend en uitgevoerd in opeenvolgende stappen. Het chaos-experiment definieert ook de acties die u wilt uitvoeren op vertakkingen, die parallel worden uitgevoerd.

  1. Formuleer uw experiment-JSON vanaf het volgende JSON-voorbeeld. Wijzig de JSON zodat deze overeenkomt met het experiment dat u wilt uitvoeren met behulp van de Create Experiment-API en de foutbibliotheek.

    {
      "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"
          }
        ]
      }
    }
    

    Als u een virtuele-machineschaalset uitvoert, wijzigt u de foutparameters om de instantienummers op te nemen in het doel:

    "parameters": [
      {
        "key": "pressureLevel",
        "value": "95"
      },
      {
        "key": "virtualMachineScaleSetInstances",
        "value": "[0,1,2]"
      }
    ]
    

    U kunt de exemplaarnummers van de schaalset in Azure Portal identificeren door naar uw virtuele-machineschaalset te gaan en Exemplaren te selecteren. De exemplaarnaam eindigt op het exemplaarnummer.

  2. Maak het experiment met behulp van de Azure CLI. Vervang , $RESOURCE_GROUPen $EXPERIMENT_NAME door $SUBSCRIPTION_IDde eigenschappen voor uw experiment. Zorg ervoor dat u de JSON van uw experiment hebt opgeslagen en geüpload. Werk experiment.json bij met uw JSON-bestandsnaam.

    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
    

    Elk experiment maakt een bijbehorende door het systeem toegewezen beheerde identiteit. Noteer de principal-id voor deze identiteit in het antwoord voor de volgende stap.

Geef het experiment toestemming voor uw virtuele machine

Wanneer u een chaos-experiment maakt, maakt Chaos Studio een door het systeem toegewezen beheerde identiteit waarmee fouten worden uitgevoerd op uw doelbronnen. Deze identiteit moet de juiste machtigingen krijgen voor de doelresource om het experiment te kunnen uitvoeren. De rol Lezer is vereist voor fouten op basis van agents. Andere rollen die geen */Leesmachtiging hebben, zoals Inzender voor virtuele machines, verlenen geen juiste machtigingen voor fouten op basis van agents.

Geef het experiment toegang tot uw VM of virtuele-machineschaalset met behulp van de volgende opdracht. Vervang $EXPERIMENT_PRINCIPAL_ID door de principal-id uit de vorige stap. Vervang door $RESOURCE_ID de resource-id van de doel-VM of virtuele-machineschaalset. Zorg ervoor dat u de resource-id van de VM gebruikt, niet de resource-id van de chaosagent die in de definitie van het experiment wordt gebruikt. Voer deze opdracht uit voor elke VM of virtuele-machineschaalset die is gericht op uw experiment.

az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID 

Uw experiment uitvoeren

U bent nu klaar om uw experiment uit te voeren. Als u het effect wilt zien, raden we u aan een grafiek met metrische gegevens van Azure Monitor te openen met de CPU-druk van uw VM op een afzonderlijk browsertabblad.

  1. Start het experiment met behulp van de Azure CLI. Vervang , $RESOURCE_GROUPen $EXPERIMENT_NAME door $SUBSCRIPTION_IDde eigenschappen voor uw experiment.

    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
    
  2. Het antwoord bevat een status-URL die u kunt gebruiken om de status van het experiment op te vragen terwijl het experiment wordt uitgevoerd.

Volgende stappen

Nu u een op agents gebaseerd experiment hebt uitgevoerd, kunt u het volgende doen: