你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

创建一个使用动态目标确定来选择主机的混沌试验

可以在混沌试验中使用动态目标确定选择一组目标来对其运行试验。 在本文中,我们将向你展示如何根据可用区域动态确定要关闭的虚拟机规模集。 运行此试验可以帮助你测试在发生中断时进行的故障转移(故障转移到另一区域中的 Azure 虚拟机规模集实例)。

可以使用这些相同的步骤针对任何支持动态目标确定的故障设置并运行试验。 目前,只有虚拟机规模集关闭支持动态目标确定。

先决条件

打开 Azure Cloud Shell

Azure Cloud Shell 是免费的交互式 shell,可以使用它运行本文中的操作步骤。 它预安装有常用 Azure 工具并将其配置与帐户一起使用。

若要打开 Cloud Shell,请在代码块的右上角选择“试一试”。 也可以在单独的浏览器标签页中通过转到 Bash 打开 Cloud Shell。 选择“复制”以复制代码块,将其粘贴到 Cloud Shell 中,然后选择“Enter”来运行它

如果你希望在本地安装并使用 CLI,则本教程需要 Azure CLI 2.0.30 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

注意

这些说明使用 Cloud Shell 中的 Bash 终端。 如果是在本地或在 PowerShell 终端中运行 CLI,则某些命令可能无法按说明正常使用。

在虚拟机规模集实例上启用 Chaos Studio

Azure Chaos Studio 无法针对资源注入故障,除非已先将该资源添加到 Chaos Studio。 若要将资源添加到 Chaos Studio,请在资源上创建目标和功能

虚拟机规模集只有一种目标类型 (Microsoft-VirtualMachineScaleSet) 和一种功能 (shutdown)。 其他资源最多可以有两种目标类型。 一种目标类型用于服务直接故障。 另一种目标类型用于基于代理的故障。 其他资源可能还有许多其他功能。

  1. 创建虚拟机规模集资源的目标。 将 $RESOURCE_ID 替换为要添加的虚拟机规模集的资源 ID:

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachineScaleSet?api-version=2023-11-01" --body "{\"properties\":{}}"
    
  2. 在虚拟机规模集目标上创建功能。 将 $RESOURCE_ID 替换为要添加的资源的资源 ID。 指定 VirtualMachineScaleSet 目标和 Shutdown-2.0 功能。

    az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachineScaleSet/capabilities/Shutdown-2.0?api-version=2023-11-01" --body "{\"properties\":{}}"
    

你现在已成功地将虚拟机规模集添加到 Chaos Studio。

创建试验

现在,你可以创建自己的试验。 混沌试验定义要针对目标资源执行的操作。 这些操作是按顺序步骤组织和运行的。 混沌试验还定义了要针对分支执行的操作(并行运行)。

  1. 以下面的 Virtual Machine Scale Sets Shutdown 2.0 JSON 示例为基础构建你的试验 JSON。 使用创建试验 API故障库修改 JSON,以响应你要运行的试验。 目前,动态目标确定仅适用于 Virtual Machine Scale Sets Shutdown 2.0 故障,并且只能按可用性区域进行筛选。

    • 使用 filter 元素配置用于筛选目标的 Azure 可用性区域列表。 如果未提供 filter,则此故障会关闭虚拟机规模集中的所有实例。
    • 试验面向指定区域中的所有虚拟机规模集实例。
     {
        "location": "westus2",
        "identity": {
            "type": "SystemAssigned"
        },
        "properties": {
            "selectors": [
                {
                    "type": "List",
                    "id": "Selector1",
                    "targets": [
                        {
                            "id": "/subscriptions/581d4e64-0ad7-495b-bff4-347a5944a2e1/resourceGroups/rg-demo/providers/Microsoft.Compute/virtualMachineScaleSets/vmss-demo/providers/Microsoft.Chaos/targets/Microsoft-VirtualMachineScaleSet",
                            "type": "ChaosTarget"
                        }
                    ],
                    "filter": {
                        "type": "Simple",
                        "parameters": {
                            "zones": [
                                "1"
                            ]
                        }
                    }
                }
            ],
            "steps": [
                {
                    "name": "Step1",
                    "branches": [
                        {
                            "name": "Branch1",
                            "actions": [
                                {
                                    "name": "urn:csci:microsoft:virtualMachineScaleSet:shutdown/2.0",
                                    "type": "continuous",
                                    "selectorId": "Selector1",
                                    "duration": "PT2M",
                                    "parameters": [
                                        {
                                            "key": "abruptShutdown",
                                            "value": "false"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    }
    
  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
    

    每个试验将创建对应的系统分配的托管标识。 请记下响应中此标识的主体 ID,以便在下一步骤中使用。

向虚拟机规模集授予试验权限

创建混沌试验时,Chaos Studio 会创建系统分配的托管标识,用于针对目标资源执行故障。 若要成功运行试验,必须向此标识提供目标资源的适当权限

使用以下命令向试验授予对资源的访问权限。 将 $EXPERIMENT_PRINCIPAL_ID 替换为上一步骤中的主体 ID。 将 $RESOURCE_ID 替换为目标资源的资源 ID。 将角色更改为该资源类型的相应内置角色。 为试验中的每个资源运行此命令。

az role assignment create --role "Virtual Machine Contributor" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID

运行试验

现在可以开始运行试验了。 若要查看效果,请检查门户以了解虚拟机规模集目标是否已关闭。 如果它们已关闭,请查看虚拟机规模集上运行的服务是否仍按预期运行。

  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,在试验运行时可以使用它来查询试验状态。

后续步骤

现在,你已运行进行动态目标确定的虚拟机规模集关闭试验,可以执行以下操作了: