Compartir a través de


Creación de un experimento de caos que usa un error basado en agente con la CLI de Azure

Puede usar un experimento de caos para comprobar que la aplicación es resistente a los errores provocando esos errores en un entorno controlado. En este artículo, se produce un alto porcentaje de eventos de uso de CPU en una máquina virtual Linux mediante un experimento de caos y Azure Chaos Studio. Ejecutar este experimento le puede ayudar a defenderse ante el hecho de que una aplicación se quede sin recursos.

Estos mismos pasos se pueden usar para configurar y ejecutar un experimento para cualquier error basado en agente. Un error basado en agente requiere la configuración y la instalación del agente de caos. Un error directo de servicio se ejecuta directamente en un recurso de Azure sin necesidad de instrumentación.

Requisitos previos

Apertura de Azure Cloud Shell

Azure Cloud Shell es un shell interactivo gratuito que puede usar para ejecutar los pasos de este artículo. Tiene las herramientas comunes de Azure preinstaladas y configuradas para usarlas en la cuenta.

Para abrir Cloud Shell, seleccione Probarlo en la esquina superior derecha de un bloque de código. También puede abrir Cloud Shell en una pestaña independiente desde Bash. Seleccione Copiar para copiar los bloques de código, péguelos en Cloud Shell y, luego, seleccione Entrar para ejecutarlos.

Si prefiere instalar y usar la CLI en un entorno local, para este tutorial se requiere la versión 2.0.30 de la CLI de Azure o una versión posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Nota:

Estas instrucciones usan un terminal de Bash en Azure Cloud Shell. Es posible que algunos comandos no funcionen tal como se describe si la CLI se ejecuta localmente o en un terminal de PowerShell.

Asignación de una identidad administrada a la máquina virtual

Antes de configurar Chaos Studio en la máquina virtual, asigne una identidad administrada asignada por el usuario a cada máquina virtual o conjunto de escalado de máquinas virtuales donde vaya a instalar el agente. Use el comando az vm identity assign o el comando az vmss identity assign. Reemplace $VM_RESOURCE_ID/$VMSS_RESOURCE_ID por el identificador de recurso de la máquina virtual que va a agregar como destino de caos. Reemplace $MANAGED_IDENTITY_RESOURCE_ID por el identificador de recurso de la identidad administrada asignada por el usuario.

Máquina virtual

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

Conjunto de escalado de máquina virtual

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

Habilitación de Chaos Studio en una máquina virtual

Chaos Studio no puede insertar errores en una máquina virtual a menos que esa máquina virtual se haya agregado primero a Chaos Studio. Para agregar una máquina virtual a Chaos Studio, cree un destino y funcionalidades en el recurso. A continuación, instale el agente de caos.

Las máquinas virtuales tienen dos tipos de destino. Un tipo de destino habilita los errores directos del servicio (donde no se requiere ningún agente). El otro tipo de destino habilita los errores basados en agente (lo que requiere la instalación de un agente). El agente de caos es una aplicación instalada en la máquina virtual como una extensión de máquina virtual. Se usa para insertar errores en el sistema operativo invitado.

Habilitación del destino y las funcionalidades de caos

A continuación, configure un destino Microsoft-Agent en cada máquina virtual o conjunto de escalado de máquinas virtuales que especifique la identidad administrada asignada por el usuario que el agente usará para conectarse a Chaos Studio. En este ejemplo, usamos una identidad administrada para todas las máquinas virtuales. Se debe crear un destino mediante la API REST. En este ejemplo, se usa el comando az rest de la CLI para ejecutar las llamadas a la API REST.

  1. Modifique el siguiente código JSON reemplazando $USER_IDENTITY_CLIENT_ID por el id. de cliente de la identidad administrada. Encontrará el id. de cliente en la información general de Azure Portal de la identidad administrada asignada por el usuario que creó. Reemplace $USER_IDENTITY_TENANT_ID por el id. de inquilino de Azure AD. Lo encontrará en Azure Portal en Microsoft Entra ID, Información del inquilino. Guarde el JSON como un archivo en la misma ubicación donde se ejecuta la CLI de Azure. En Cloud Shell, puede arrastrar y colocar el archivo JSON para cargarlo.

    {
      "properties": {
        "identities": [
          {
            "clientId": "$USER_IDENTITY_CLIENT_ID",
            "tenantId": "$USER_IDENTITY_TENANT_ID",
            "type": "AzureManagedIdentity"
          }
        ]
      }
    }
    
  2. Cree el destino reemplazando $RESOURCE_ID por el id. de recurso de la máquina virtual o el conjunto de escalado de máquinas virtuales de destino. Sustituya target.json por el nombre del archivo JSON que creó en el paso anterior.

    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
    

    Si recibe un error de análisis de PowerShell, cambie a un terminal de Bash, como se recomienda para este tutorial, o entrecomille el archivo JSON de referencia con comillas simples (--body '@target.json').

  3. Copie el GUID del agentProfileId devuelto por este comando para usarlo en un paso posterior.

  4. Cree las funcionalidades reemplazando $RESOURCE_ID por el id. de recurso de la máquina virtual o el conjunto de escalado de máquinas virtuales de destino. Reemplace $CAPABILITY por el nombre de la funcionalidad de error que va a habilitar (por ejemplo, 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\":{}}"
    

    Por ejemplo, si va a habilitar la funcionalidad de presión de 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\":{}}"
    

Instalación de la extensión de máquina virtual de Chaos Studio

El agente de caos es una aplicación que se ejecuta en las instancias de máquina virtual o conjunto de escalado de máquinas virtuales para ejecutar errores basados en agente. Durante la instalación, configure lo siguiente:

  • Agente con la identidad administrada que el agente debe usar para autenticarse en Chaos Studio.
  • Id. de perfil del destino Microsoft-Agent que creó.
  • Opcionalmente, una clave de instrumentación de Application Insights que permita al agente enviar eventos de diagnóstico a Application Insights.
  1. Antes de comenzar, asegúrese de que dispone de los siguientes datos:

    • agentProfileId: la propiedad devuelta al crear el destino. Si no tiene esta propiedad, puede ejecutar az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 y copiar la propiedad agentProfileId.
    • ClientId: el id. de cliente de la identidad administrada asignada por el usuario que se usa en el destino. Si no tiene esta propiedad, puede ejecutar az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 y copiar la propiedad clientId.
    • (Opcionalmente) AppInsightsKey: la clave de instrumentación del componente de Application Insights, que encontrará en la página de Application Insights del portal, en Essentials.
  2. Instale la extensión de máquina virtual de Chaos Studio. Reemplace $VM_RESOURCE_ID por el identificador de recurso de la máquina virtual o reemplace $SUBSCRIPTION_ID, $RESOURCE_GROUPy $VMSS_NAME por esas propiedades para el conjunto de escalado de máquinas virtuales. Reemplace $AGENT_PROFILE_ID por el id. de perfil del agente. Reemplace $USER_IDENTITY_CLIENT_ID por el id. de cliente de la identidad administrada. Reemplace $APP_INSIGHTS_KEY por la clave de instrumentación de Application Insights. Si no usa Application Insights, elimine ese par clave/valor.

    Lista completa de la configuración predeterminada de la extensión de máquina virtual del agente

    Esta es la configuración mínima de la extensión de máquina virtual del agente requerida por el usuario:

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

    Estos son todos los valores de la configuración de la extensión de máquina virtual del agente:

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

    Instalación del agente en una máquina virtual

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

    Instalación del agente en un conjunto de escalado de máquinas virtuales

    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. Si configura un conjunto de escalado de máquinas virtuales, compruebe que las instancias se hayan actualizado al modelo más reciente. Si es necesario, actualice todas las instancias del modelo.

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

Creación de un experimento

Después de implementar correctamente la máquina virtual, puede crear el experimento. Un experimento de caos define las acciones que se desean realizar en los recursos de destino. Las acciones se organizan y ejecutan en pasos secuenciales. El experimento de caos también define las acciones que se desean realizar en las ramas, que se ejecutan en paralelo.

  1. Formule el JSON del experimento a partir del siguiente ejemplo de JSON. Modifique el JSON para que se corresponda con el experimento que desea ejecutar mediante la API Crear experimento y la biblioteca de errores.

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

    Si se va a ejecutar en un conjunto de escalado de máquinas virtuales, modifique los parámetros de error para incluir los números de instancia de destino:

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

    Para identificar los números de instancia del conjunto de escalado en Azure Portal, vaya a su conjunto de escalado de máquinas virtuales y seleccione Instancias. El número de la instancia está al final del nombre de la instancia.

  2. Cree el experimento mediante la CLI de Azure. Reemplace $SUBSCRIPTION_ID, $RESOURCE_GROUP y $EXPERIMENT_NAME por las propiedades del experimento. Asegúrese de haber guardado y cargado el JSON del experimento. Actualice experiment.json con el nombre del archivo 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
    

    Cada experimento crea una identidad administrada asignada por el sistema correspondiente. Observe el id. principal de esta identidad en la respuesta del paso siguiente.

Concesión del permiso del experimento a la máquina virtual

Al crear un experimento de caos, Chaos Studio crea una identidad administrada asignada por el sistema que ejecuta errores en los recursos de destino. Esta identidad debe tener los permisos adecuados en el recurso de destino para que el experimento se ejecute correctamente. El rol Lector es necesario para los errores basados en agente. Otros roles que no tengan el permiso */Lectura, como el de colaborador de la máquina virtual, no concederán el permiso adecuado para los errores basados en agente.

Proporcione al experimento acceso a la máquina virtual o al conjunto de escalado de máquinas virtuales mediante el siguiente comando. Reemplace $EXPERIMENT_PRINCIPAL_ID por el id. principal del paso anterior. Reemplace $RESOURCE_ID por el id. de recurso de la máquina virtual o el conjunto de escalado de máquinas virtuales de destino. Asegúrese de usar el id. de recurso de la máquina virtual, no el id. de recurso del agente de caos usado en la definición del experimento. Ejecute este comando para cada máquina virtual o conjunto de escalado de máquinas virtuales de destino en el experimento.

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

Ejecutar el experimento

Ahora ya puede ejecutar el experimento. Para ver el efecto, recomendamos abrir un gráfico de métricas de Azure Monitor con la presión de CPU de la máquina virtual en una pestaña independiente del explorador.

  1. Inicie el experimento mediante la CLI de Azure. Reemplace $SUBSCRIPTION_ID, $RESOURCE_GROUP y $EXPERIMENT_NAME por las propiedades del experimento.

    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. La respuesta incluye una dirección URL de estado que puede usar para consultar el estado del experimento mientras se ejecuta.

Pasos siguientes

Ahora que ha ejecutado un experimento basado en agente, podrá hacer lo siguiente: