Создание эксперимента хаоса, использующего ошибку на основе агента с помощью Azure CLI

Вы можете использовать эксперимент хаоса для проверки устойчивости приложения к сбоям, вызвав эти сбои в управляемой среде. В этой статье вы приводите к большому проценту событий использования ЦП на виртуальной машине Linux с помощью эксперимента хаоса и Azure Chaos Studio. Выполните этот эксперимент, чтобы защитить приложение от нехватки ресурсов.

Эти же действия можно использовать для настройки и запуска эксперимента для любого сбоя на основе агента. Для сбоя на основе агента требуется настройка и установка агента хаоса. Сбой непосредственной службы выполняется непосредственно в ресурсе Azure без необходимости инструментирования.

Необходимые компоненты

Откройте Azure Cloud Shell

Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.

Чтобы открыть Cloud Shell, выберите "Попробовать" в правом верхнем углу блока кода. Вы также можете открыть Cloud Shell на отдельной вкладке браузера, перейдя в Bash. Нажмите кнопку Копировать, чтобы скопировать блоки кода. Вставьте код в Cloud Shell и нажмите клавишу ВВОД, чтобы выполнить его.

Если вы решили установить и использовать CLI локально, для выполнения инструкций из этого руководства вам потребуется Azure CLI 2.0.30 или более поздней версии. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Примечание.

Эти инструкции используют терминал Bash в Cloud Shell. Некоторые команды могут работать не так, как описано при локальном запуске интерфейса командной строки или в терминале PowerShell.

Назначение управляемого удостоверения виртуальной машине

Перед настройкой Chaos Studio на виртуальной машине назначьте управляемое удостоверение, назначаемое пользователем, для каждой виртуальной машины или масштабируемого набора виртуальных машин, в котором планируется установить агент. az vm identity assign Используйте команду или az vmss identity assign команду. Замените $VM_RESOURCE_ID/$VMSS_RESOURCE_ID идентификатор ресурса виртуальной машины, которую вы добавляете в качестве целевого объекта хаоса. Замените $MANAGED_IDENTITY_RESOURCE_ID идентификатором ресурса управляемого удостоверения, назначаемого пользователем.

Виртуальная машина

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

Набор масштабирования виртуальных машин

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

Включение Chaos Studio на виртуальной машине

Chaos Studio не может вводить ошибки к виртуальной машине, если эта виртуальная машина не была добавлена в Chaos Studio в первую очередь. Чтобы добавить виртуальную машину в Chaos Studio, создайте целевой объект и возможности ресурса. Затем вы устанавливаете агент хаоса.

Виртуальные машины имеют два целевых типа. Один целевой тип включает сбои с прямой службой (если агент не требуется). Другой целевой тип включает ошибки на основе агента (для установки агента требуется установка агента). Агент хаоса — это приложение, установленное на виртуальной машине в качестве расширения виртуальной машины. Он используется для внедрения ошибок в гостевой операционной системе.

Включение цели и возможностей хаоса

Затем настройте целевой объект Microsoft-Agent на каждой виртуальной машине или масштабируемом наборе виртуальных машин, указывающий назначаемое пользователем управляемое удостоверение, которое агент использует для подключения к Chaos Studio. В этом примере для всех виртуальных машин используется одно управляемое удостоверение. Целевой объект должен быть создан с помощью REST API. В этом примере мы используем az rest команду CLI для выполнения вызовов REST API.

  1. Измените следующий код JSON, заменив $USER_IDENTITY_CLIENT_ID идентификатор клиента управляемого удостоверения. Идентификатор клиента можно найти в портал Azure обзор созданного управляемого удостоверения, назначаемого пользователем. Замените $USER_IDENTITY_TENANT_ID идентификатором клиента Azure. Его можно найти в портал Azure в разделе идентификатора Microsoft Entra в разделе "Сведения о клиенте". Сохраните JSON в качестве файла в том же расположении, где выполняется Azure CLI. В Cloud Shell можно перетащить JSON-файл, чтобы отправить его.

    {
      "properties": {
        "identities": [
          {
            "clientId": "$USER_IDENTITY_CLIENT_ID",
            "tenantId": "$USER_IDENTITY_TENANT_ID",
            "type": "AzureManagedIdentity"
          }
        ]
      }
    }
    
  2. Создайте целевой объект, заменив $RESOURCE_ID идентификатор ресурса целевой виртуальной машины или масштабируемого набора виртуальных машин. Замените target.json именем JSON-файла, созданного на предыдущем шаге.

    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
    

    Если вы получаете ошибку синтаксического анализа PowerShell, переключитесь в терминал Bash, как рекомендуется для этого руководства, или заключите указанный JSON-файл в одинарных кавычках (--body '@target.json').

  3. Скопируйте GUID агентаProfileId, возвращаемого этой командой, для использования на следующем шаге.

  4. Создайте возможности, заменив $RESOURCE_ID идентификатор ресурса целевой виртуальной машины или масштабируемого набора виртуальных машин. Замените $CAPABILITY именем функции сбоя, которую вы включаете (например, 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\":{}}"
    

    Например, если вы включаете возможность давления ЦП:

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

Установка расширения виртуальной машины Chaos Studio

Агент хаоса — это приложение, которое выполняется в экземплярах масштабируемого набора виртуальных машин или виртуальных машин для выполнения ошибок на основе агента. Во время установки настройте:

  • Агент с управляемым удостоверением, который агент должен использовать для проверки подлинности в Chaos Studio.
  • Идентификатор профиля созданного целевого объекта Microsoft-Agent.
  • Кроме того, ключ инструментирования приложения Аналитика, который позволяет агенту отправлять диагностические события в приложение Аналитика.
  1. Перед началом работы убедитесь, что у вас есть следующие сведения:

    • agentProfileId: свойство, возвращаемое при создании целевого объекта. Если у вас нет этого свойства, можно запустить и скопировать az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01agentProfileId свойство.
    • ClientId: идентификатор клиента управляемого удостоверения, назначаемого пользователем, используемого в целевом объекте. Если у вас нет этого свойства, можно запустить и скопировать az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01clientId свойство.
    • (Необязательно) Приложение Аналитика Key: ключ инструментирования для компонента приложения Аналитика, который можно найти на странице приложения Аналитика на портале в разделе Essentials.
  2. Установите расширение виртуальной машины Chaos Studio. Замените $VM_RESOURCE_ID идентификатором ресурса виртуальной машины или замены $SUBSCRIPTION_ID, $RESOURCE_GROUPа $VMSS_NAME также этими свойствами для масштабируемого набора виртуальных машин. Замените $AGENT_PROFILE_ID идентификатором профиля агента. Замените $USER_IDENTITY_CLIENT_ID идентификатором клиента управляемого удостоверения. Замените $APP_INSIGHTS_KEY ключ инструментирования приложения Аналитика. Если вы не используете Аналитика приложения, удалите эту пару "ключ-значение".

    Полный список конфигурации расширения виртуальной машины агента по умолчанию

    Ниже приведена минимальная конфигурация расширения виртуальной машины агента, требуемая пользователем:

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

    Ниже приведены все значения конфигурации расширения виртуальной машины агента

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

    Установка агента на виртуальной машине

    Windows

    az vm extension set --ids $VM_RESOURCE_ID --name ChaosWindowsAgent --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}}'
    

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

    Установка агента в масштабируемом наборе виртуальных машин

    Windows

    az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosWindowsAgent --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}}'
    

    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. Если вы настраиваете масштабируемый набор виртуальных машин, убедитесь, что экземпляры были обновлены до последней модели. При необходимости обновите все экземпляры в модели.

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

Создание эксперимента

После успешного развертывания виртуальной машины теперь можно создать эксперимент. Эксперимент хаоса определяет действия, которые необходимо предпринять для целевых ресурсов. Действия упорядочены и выполняются последовательно. Эксперимент хаоса также определяет действия, которые необходимо предпринять против ветвей, которые выполняются параллельно.

  1. Сформулируйте json эксперимента, начиная со следующего примера JSON. Измените JSON, чтобы соответствовать эксперименту, который требуется запустить с помощью API создания экспериментов и библиотеки ошибок.

    {
      "identity": {
        "type": "SystemAssigned"
      },
      "location": "centralus",
      "properties": {
        "selectors": [
          {
            "id": "Selector1",
            "targets": [
              {
                "id": "/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myWindowsVM/providers/Microsoft.Chaos/targets/Microsoft-Agent",
                "type": "ChaosTarget"
              },
              {
                "id": "/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/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"
          }
        ]
      }
    }
    

    Если вы работаете с масштабируемым набором виртуальных машин, измените параметры сбоя, чтобы включить номера экземпляров в целевой:

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

    Вы можете определить номера экземпляров масштабируемого набора в портал Azure, перейдя в масштабируемый набор виртуальных машин и выбрав экземпляры. Имя экземпляра заканчивается номером экземпляра.

  2. Создайте эксперимент с помощью Azure CLI. Замените $SUBSCRIPTION_ID, $RESOURCE_GROUPа $EXPERIMENT_NAME также свойствами для эксперимента. Убедитесь, что вы сохранили и отправили json эксперимента. Обновите experiment.json имя 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
    

    Каждый эксперимент создает соответствующее управляемое удостоверение, назначаемое системой. Обратите внимание на идентификатор субъекта для этого удостоверения в ответе на следующий шаг.

Предоставление разрешения на эксперимент виртуальной машине

При создании эксперимента хаоса Студия Chaos Studio создает управляемое удостоверение, назначаемое системой, которое выполняет ошибки в целевых ресурсах. Это удостоверение должно быть предоставлено соответствующим разрешениям целевому ресурсу для успешного выполнения эксперимента. Роль читателя необходима для сбоев на основе агента. Другие роли, у которых нет разрешения */Чтение, например участник виртуальной машины, не предоставляют соответствующее разрешение для сбоев на основе агента.

Предоставьте эксперименту доступ к виртуальной машине или масштабируемой группе виртуальных машин с помощью следующей команды. Замените $EXPERIMENT_PRINCIPAL_ID идентификатор субъекта на предыдущем шаге. Замените $RESOURCE_ID идентификатором ресурса целевой виртуальной машины или масштабируемого набора виртуальных машин. Не забудьте использовать идентификатор ресурса виртуальной машины, а не идентификатор ресурса агента хаоса, используемого в определении эксперимента. Выполните эту команду для каждой виртуальной машины или масштабируемого набора виртуальных машин, предназначенных для эксперимента.

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

Запуск эксперимента

Теперь вы готовы к выполнению эксперимента. Чтобы увидеть эффект, рекомендуется открыть диаграмму метрик Azure Monitor с давлением ЦП виртуальной машины на отдельной вкладке браузера.

  1. Запустите эксперимент с помощью Azure CLI. Замените $SUBSCRIPTION_ID, $RESOURCE_GROUPа $EXPERIMENT_NAME также свойствами для эксперимента.

    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. Ответ содержит URL-адрес состояния, который можно использовать для запроса состояния эксперимента при выполнении эксперимента.

Следующие шаги

Теперь, когда вы выполнили эксперимент на основе агента, вы готовы: