Создание эксперимента хаоса, использующего ошибку "Сетка хаоса" с помощью Azure CLI
Вы можете использовать эксперимент хаоса для проверки устойчивости приложения к сбоям, вызвав эти сбои в управляемой среде. В этой статье вы вызываете периодические Служба Azure Kubernetes сбои pod в пространстве имен с помощью эксперимента хаоса и Azure Chaos Studio. Выполнение этого эксперимента поможет защититься от недоступности службы, если возникают нерегулярные сбои.
В Студии Chaos Studio используется Платформа разработки хаоса с открытым исходным кодом для Kubernetes, чтобы внедрить ошибки в кластер AKS. Ошибки в сетке Хаоса — это прямые сбои службы , требующие установки Сетки Хаоса в кластере AKS. Эти же действия можно использовать для настройки и запуска эксперимента для любого сбоя сетки хаоса AKS.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
- Кластер AKS с пулами узлов Linux. Если у вас нет кластера AKS, ознакомьтесь с кратким руководством по AKS, использующим Azure CLI, Azure PowerShell или портал Azure.
Ограничения
- С частными кластерами можно использовать ошибки Сетки Хаоса, настроив внедрение виртуальной сети в 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.
Выполните следующие команды в окне 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
Убедитесь, что модули 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.
Создайте целевой объект, заменив
$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\":{}}"
Создайте возможности в целевом объекте, заменив
$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.
Создание эксперимента
Теперь можно создать эксперимент. Эксперимент хаоса определяет действия, которые необходимо предпринять для целевых ресурсов. Действия упорядочены и выполняются последовательно. Эксперимент хаоса также определяет действия, которые необходимо предпринять против ветвей, которые выполняются параллельно.
Создание сетки
jsonSpec
хаоса:См. документацию по Сетке Хаоса для типа сбоя, например типа PodChaos.
Сформулируйте конфигурацию 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
Удалите любой YAML за пределами
spec
, включая имя свойства спецификации. Удалите отступ сведений о спецификации. Параметрduration
не нужен, но используется, если он указан. В этом случае удалите его.action: pod-failure mode: all selector: namespaces: - default
Используйте преобразователь YAML-to-JSON, как этот, для преобразования YAML-сетки Хаоса в JSON и свести к минимуму его.
{"action":"pod-failure","mode":"all","selector":{"namespaces":["default"]}}
Используйте средство escape-строки JSON, например это, чтобы избежать спецификации JSON или изменить двойные кавычки на одинарные кавычки.
{\"action\":\"pod-failure\",\"mode\":\"all\",\"selector\":{\"namespaces\":[\"default\"]}}
{'action':'pod-failure','mode':'all','selector':{'namespaces':['default']}}
Создайте 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" } ] } ] } }
Создайте эксперимент с помощью 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 создает управляемое удостоверение, назначаемое системой, которое выполняет ошибки в целевых ресурсах. Это удостоверение должно быть предоставлено соответствующим разрешениям целевому ресурсу для успешного выполнения эксперимента.
- Получите,
$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
- Предоставьте эксперименту доступ к ресурсам с помощью следующих команд. Замените
$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 показывают эффект выполнения эксперимента.
Запустите эксперимент с помощью 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
Ответ содержит URL-адрес состояния, который можно использовать для запроса состояния эксперимента при выполнении эксперимента.
Следующие шаги
Теперь, когда вы выполнили прямой эксперимент службы akS Chaos Mesh, вы готовы: