Поделиться через


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

Вы можете использовать эксперимент хаоса для проверки устойчивости приложения к сбоям, вызвав эти сбои в управляемой среде. В этой статье вы вызываете периодические Служба Azure Kubernetes сбои pod в пространстве имен с помощью эксперимента хаоса и Azure Chaos Studio. Выполнение этого эксперимента поможет защититься от недоступности службы, если возникают нерегулярные сбои.

В Студии Chaos Studio используется Платформа разработки хаоса с открытым исходным кодом для Kubernetes, чтобы внедрить ошибки в кластер AKS. Ошибки в сетке Хаоса — это прямые сбои службы , требующие установки Сетки Хаоса в кластере AKS. Эти же действия можно использовать для настройки и запуска эксперимента для любого сбоя сетки хаоса AKS.

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

Ограничения

  • С частными кластерами можно использовать ошибки Сетки Хаоса, настроив внедрение виртуальной сети в Chaos Studio. Все команды, выданные частному кластеру, включая действия, описанные в этой статье по настройке Chaos Mesh, должны выполнять инструкции по частному кластеру. Рекомендуемые методы включают подключение из виртуальной машины в той же виртуальной сети или использование функции вызова команды AKS.
  • Ошибки сетки хаоса AKS поддерживаются только в пулах узлов Linux.
  • Если кластер AKS настроен только для разрешения авторизованных диапазонов IP-адресов, необходимо разрешить диапазоны IP-адресов Студии Chaos Studio. Их можно найти, запросив ChaosStudio тег службы с помощью API обнаружения тегов службы или скачиваемых JSON-файлов.

Откройте 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.

Настройка Сетки Хаоса в кластере AKS

Прежде чем запускать ошибки Сетки Хаоса в Среде Chaos Studio, необходимо установить Сетку Хаоса в кластере AKS.

  1. Выполните следующие команды в окне Cloud Shell , где у вас есть активная подписка, в которой развернут кластер AKS. $CLUSTER_NAME Замените $RESOURCE_GROUP и на группу ресурсов и имя ресурса кластера.

    az aks get-credentials -g $RESOURCE_GROUP -n $CLUSTER_NAME
    helm repo add chaos-mesh https://charts.chaos-mesh.org
    helm repo update
    kubectl create ns chaos-testing
    helm install chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-testing --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock
    
  2. Убедитесь, что модули pod Chaos Mesh установлены, выполнив следующую команду:

    kubectl get po -n chaos-testing
    

Вы должны увидеть выходные данные, аналогичные следующему примеру (диспетчер-хаос-контроллер и один или несколько хаос-daemons):

NAME                                        READY   STATUS    RESTARTS   AGE
chaos-controller-manager-69fd5c46c8-xlqpc   1/1     Running   0          2d5h
chaos-daemon-jb8xh                          1/1     Running   0          2d5h
chaos-dashboard-98c4c5f97-tx5ds             1/1     Running   0          2d5h

Инструкции по установке также можно использовать на веб-сайте Chaos Mesh.

Включение Chaos Studio в кластере AKS

Студия Chaos Studio не может вводить ошибки к ресурсу, если только этот ресурс не добавляется в Chaos Studio в первую очередь. Чтобы добавить ресурс в Chaos Studio, создайте целевой объект и возможности ресурса. Кластеры AKS имеют только один целевой тип (service-direct), но другие ресурсы могут иметь до двух целевых типов. Один из целевых типов — для ошибок с прямой службой. Другой целевой тип — для сбоев на основе агента. Каждый тип ошибки "Сетка хаоса" представлен как возможность, например PodChaos, NetworkChaos и IOChaos.

  1. Создайте целевой объект, заменив $SUBSCRIPTION_ID$resourceGroupName$AKS_CLUSTER_NAME его соответствующими строками добавляемого кластера AKS.

    az rest --method put --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh?api-version=2024-01-01" --body "{\"properties\":{}}"
    
  2. Создайте возможности в целевом объекте, заменив $SUBSCRIPTION_ID$resourceGroupNameего, а $AKS_CLUSTER_NAME также соответствующими строками добавляемого кластера AKS.

Замените $CAPABILITY на "Имя возможности" добавляемого сбоя.

az rest --method put --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh/capabilities/$CAPABILITY?api-version=2024-01-01"  --body "{\"properties\":{}}"

Ниже приведен пример включения PodChaos возможности для ссылки:

az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.ContainerService/managedClusters/myCluster/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh/capabilities/PodChaos-2.1?api-version=2024-01-01"  --body "{\"properties\":{}}"

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

Теперь вы успешно добавили кластер AKS в Chaos Studio.

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

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

  1. Создание сетки jsonSpecхаоса:

    1. См. документацию по Сетке Хаоса для типа сбоя, например типа PodChaos.

    2. Сформулируйте конфигурацию YAML для этого типа сбоя с помощью документации по Сетке Хаоса.

      apiVersion: chaos-mesh.org/v1alpha1
      kind: PodChaos
      metadata:
        name: pod-failure-example
        namespace: chaos-testing
      spec:
        action: pod-failure
        mode: all
        duration: '600s'
        selector:
          namespaces:
            - default
      
    3. Удалите любой YAML за пределами spec, включая имя свойства спецификации. Удалите отступ сведений о спецификации. Параметр duration не нужен, но используется, если он указан. В этом случае удалите его.

      action: pod-failure
      mode: all
      selector:
        namespaces:
          - default
      
    4. Используйте преобразователь YAML-to-JSON, как этот, для преобразования YAML-сетки Хаоса в JSON и свести к минимуму его.

      {"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
      
    5. Используйте средство escape-строки JSON, например это, чтобы избежать спецификации JSON или изменить двойные кавычки на одинарные кавычки.

      {\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
      
      {'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
      
  2. Создайте json эксперимента, начиная со следующего примера JSON. Измените JSON, чтобы соответствовать эксперименту, который требуется запустить с помощью API создания эксперимента, библиотеки ошибок и jsonSpec созданного на предыдущем шаге.

    {
      "location": "centralus",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "steps": [
          {
            "name": "AKS pod kill",
            "branches": [
              {
                "name": "AKS pod kill",
                "actions": [
                  {
                    "type": "continuous",
                    "selectorId": "Selector1",
                    "duration": "PT10M",
                    "parameters": [
                      {
                          "key": "jsonSpec",
                          "value": "{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}"
                      }
                    ],
                    "name": "urn:csci:microsoft:azureKubernetesServiceChaosMesh:podChaos/2.2"
                  }
                ]
              }
            ]
          }
        ],
        "selectors": [
          {
            "id": "Selector1",
            "type": "List",
            "targets": [
              {
                "type": "ChaosTarget",
                "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/myRG/providers/Microsoft.ContainerService/managedClusters/myCluster/providers/Microsoft.Chaos/targets/Microsoft-AzureKubernetesServiceChaosMesh"
              }
            ]
          }
        ]
      }
    }
    
  3. Создайте эксперимент с помощью 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
    

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

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

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

  1. Получите, $EXPERIMENT_PRINCIPAL_ID выполнив следующую команду и скопировав ответ PrincipalID . Замените $SUBSCRIPTION_ID, $RESOURCE_GROUPа $EXPERIMENT_NAME также свойствами для эксперимента.
az rest --method get --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2024-01-01
  1. Предоставьте эксперименту доступ к ресурсам с помощью следующих команд. Замените $EXPERIMENT_PRINCIPAL_ID идентификатор субъекта на предыдущем шаге. Замените $SUBSCRIPTION_ID, $resourceGroupNameа также $AKS_CLUSTER_NAME соответствующими строками кластера AKS.
az role assignment create --role "Azure Kubernetes Service RBAC Admin Role" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME

az role assignment create --role "Azure Kubernetes Service Cluster User Role" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroupName/providers/Microsoft.ContainerService/managedClusters/$AKS_CLUSTER_NAME

Если вы предпочитаете создавать пользовательские роли вместо встроенных ролей AKS, следуйте инструкциям на странице "Поддерживаемые типы ресурсов и назначения ролей для Chaos Studio ", чтобы вывести список операций управления доступом на основе ролей, необходимых для конкретной ошибки, и добавить их в созданную вручную пользовательскую роль.

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

Теперь вы готовы к выполнению эксперимента. Чтобы увидеть эффект, рекомендуется открыть обзор кластера AKS и перейти к аналитике на отдельной вкладке браузера. Динамические данные для активного числа pod показывают эффект выполнения эксперимента.

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

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

Теперь, когда вы выполнили прямой эксперимент службы akS Chaos Mesh, вы готовы: