模拟 Azure 故障

本文档介绍如何使用 Chaos Mesh 来模拟 Azure 故障。

AzureChaos 介绍

AzureChaos 能够帮助你模拟指定的 Azure 实例发生故障的情景。目前,AzureChaos 支持以下类型的故障:

  • VM Stop:使指定的 VM 实例进入停止状态。
  • VM Restart:重启指定的 VM 实例。
  • Disk Detach:从指定的 VM 实例中卸载数据磁盘。

Secret 文件

为了方便地连接 Azure 集群,你可以提前创建一个 Kubernetes Secret 文件存储认证相关信息。

以下是一个 Secret 文件示例:

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: cloud-key-secret
  5. namespace: chaos-testing
  6. type: Opaque
  7. stringData:
  8. client_id: your-client-id
  9. client_secret: your-client-secret
  10. tenant_id: your-tenant-id
  • name 表示 Kubernetes Secret 对象的名字。
  • namespace 表示 Kubernetes Secret 对象的命名空间。
  • client_id 存储 Azure 应用注册的应用程序(客户端)ID。
  • client_secret 存储 Azure 应用注册的应用程序(客户端)的机密值。
  • tenant_id 存储 Azure 应用注册的目录(租户)ID。 client_idclient_secret 的获取请参考机密客户端应用程序
注意请确保 Secret 文件中的应用注册已作为参与者或所有者添加到指定 VM 实例的访问控制(IAM)中。 :::

使用 Dashboard 方式创建实验

在使用 Dashboard 方式创建实验之前,请确保:

  1. 已经安装了 Dashboard。

  2. 可以通过 kubectl port-forward 方式访问 Dashboard:

    1. kubectl port-forward -n chaos-testing svc/chaos-dashboard 2333:2333

    接着你可以在浏览器通过 http://localhost:2333 访问 Dashboard。

:::

  1. 单击实验页面中的新的实验按钮进行创建实验。

    img

  2. 选择目标处选择 Azure 故障,并选择具体行为,例如 VM STOP

  3. 填写实验信息,指定实验范围以及实验计划运行时间。

  4. 提交实验。

使用 YAML 方式创建实验

vm-stop 配置文件示例

  1. 将实验配置写入到文件 azurechaos-vm-stop.yaml 中,内容如下所示:

    1. apiVersion: chaos-mesh.org/v1alpha1
    2. kind: AzureChaos
    3. metadata:
    4. name: vm-stop-example
    5. namespace: chaos-testing
    6. spec:
    7. action: vm-stop
    8. secretName: 'cloud-key-secret'
    9. subscriptionID: 'your-subscription-id'
    10. resourceGroupName: 'your-resource-group-name'
    11. duration: '5m'

    依据此配置示例,Chaos Mesh 将向指定的 VM 实例中注入 vm-stop 故障,该 VM 实例将在 5 分钟时间内处于不可用的状态。

    如需查看更多关于停止 VM 实例的信息,可以参考启动或停止 VM

  2. 使用 kubectl 创建实验,命令如下:

    1. kubectl apply -f azurechaos-vm-stop.yaml

vm-restart 配置文件示例

  1. 将实验配置写入到文件 azurechaos-vm-restart.yaml 中,内容如下所示:

    1. apiVersion: chaos-mesh.org/v1alpha1
    2. kind: AzureChaos
    3. metadata:
    4. name: vm-restart-example
    5. namespace: chaos-testing
    6. spec:
    7. action: vm-restart
    8. secretName: 'cloud-key-secret'
    9. subscriptionID: 'your-subscription-id'
    10. resourceGroupName: 'your-resource-group-name'

    依据此配置示例,Chaos Mesh 将向指定的 VM 实例中注入 vm-restart 故障,该 VM 实例将重启一次。

    如需查看更多关于重启 VM 实例的信息,可以参考重新启动 VM

  2. 使用 kubectl 创建实验,命令如下:

    1. kubectl apply -f azurechaos-vm-restart.yaml

disk-detach 配置文件示例

  1. 将实验配置写入到文件 azurechaos-disk-detach.yaml 中,内容如下所示:

    1. apiVersion: chaos-mesh.org/v1alpha1
    2. kind: AzureChaos
    3. metadata:
    4. name: disk-detach-example
    5. namespace: chaos-testing
    6. spec:
    7. action: disk-detach
    8. secretName: 'cloud-key-secret'
    9. subscriptionID: 'your-subscription-id'
    10. resourceGroupName: 'your-resource-group-name'
    11. lun: 'your-disk-lun'
    12. diskName: 'your-disk-name'
    13. duration: '5m'

    依据此配置示例,Chaos Mesh 将向指定的 VM 实例中注入 disk-detach 故障,使该 VM 实例在 5 分钟内与指定数据磁盘分离。

    查看更多关于分离 Azure 数据磁盘的消息,可以参考分离数据磁盘

  2. 使用 kubectl 创建实验,命令如下:

    1. kubectl apply -f azurechaos-disk-detach.yaml

字段说明

下表介绍以上 YAML 配置文件中的字段。

参数类型说明默认值是否必填示例
actionstring表示具体的故障类型,仅支持 vm-stopvm-restartdisk-detachvm-stopvm-stop
modestring指定实验的运行方式,可选择的方式包括:one(表示随机选出一个符合条件的 Pod)、all(表示选出所有符合条件的 Pod)、fixed(表示选出指定数量且符合条件的 Pod)、fixed-percent(表示选出占符合条件的 Pod 中指定百分比的 Pod)、random-max-percent(表示选出占符合条件的 Pod 中不超过指定百分比的 Pod)one
valuestring取决与 mode 的配置,为 mode 提供对应的参数。例如,当你将 mode 配置为 fixed-percent 时,value 用于指定 Pod 的百分比。1
secretNamestring指定存储 Azure 认证信息的 Kubernetes Secret 名字cloud-key-secret
subscriptionIDstring指定 VM 实例的订阅 IDyour-subscription-id
resourceGroupNamestring指定 VM 实例所属的资源组的名称your-resource-group-name
lunstring当 action 为 disk-detach 时必填,指定硬盘的 LUN (Logic Unit Number)0
diskNamestring当 action 为 disk-detach 时必填,指定设备名DATADISK_0
durationstring指定实验的持续时间30s