安排实验

本页面介绍了如何在 Fault Injection Testing 中安排实验,以及如何使用外部调度服务来自动执行弹性测试。

通过安排实验,您可以自动执行测试流程,并在对用户影响最小的时段运行实验,例如:

  • 非高峰时段或计划维护期。
  • 定期安排的游戏日或混沌工程演练。
  • 自动测试流水线 (CI/CD),用于在部署前验证弹性。

安排实验有助于您持续验证系统的容错能力,而无需在每次运行时进行手动干预。

安排的实验的工作原理

Fault Injection Testing 不包含内置的调度服务。相反,您可以通过将 Fault Injection Testing 与外部调度服务(例如 Cloud Scheduler)集成来安排实验。

如需安排实验,您可以将外部调度器配置为在特定时间调用 Fault Injection Testing API 或运行 gcloud 命令。为了支持此集成,Fault Injection Testing 提供了 startOnCreateEnabled 参数。当设置为 true 时,此参数会指示系统在实验创建后立即自动启动实验。

为安排的实验选择目标

安排的实验的目标资源在实验模板中定义,而不是在调度配置本身中定义。Fault Injection Testing 处理目标的方式如下:

  • 创建实验模板时,您可以定义故障类型和目标资源的选择条件。资源示例包括特定虚拟机实例、具有匹配标签的资源或特定可用区中的资源。
  • 配置外部调度器时,API 载荷会引用您的实验模板。
  • 在安排的时间,外部调度器会触发实验的创建。然后,Fault Injection Testing 会在此时评估模板中的目标选择规则,以确定哪些资源受到影响。

如果您的模板基于标签将虚拟机作为目标,则安排的实验会在实验运行的确切时间影响具有该标签的任何虚拟机。

设置安排的实验

在继续之前,请确保您拥有 roles/faulttesting.operatorroles/faulttesting.admin 角色。

使用 Google Cloud 控制台和 Cloud Scheduler 配置时间表

虽然您无法直接在 Fault Injection Testing 控制台中创建时间表,但控制台提供了在 Cloud Scheduler 中设置作业所需的参数。

  1. 在 Google Cloud 控制台中,前往 实验模板 页面。
  2. 选择一个模板以查看其详细信息。
  3. 在详细信息页面中,记下以下内容:

    • JSON 载荷,其中包括 "startOnCreateEnabled": true
    • 用于创建实验的 REST API 端点网址。

    您将在 Cloud Scheduler 中使用它们。

  4. 在 Google Cloud 控制台中,前往 Cloud Scheduler 页面,然后点击 创建作业

  5. 定义作业的时间表和时区。

  6. 目标类型下,选择HTTP

  7. 网址 设置为实验模板 详细信息页面中的 REST API 端点网址。

  8. HTTP 方法 设置为 POST

  9. Body 字段中,输入 JSON 载荷:

    {
      "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID",
      "startOnCreateEnabled": true,
      "description": "DESCRIPTION"
    }
    
  10. 为作业配置身份验证。如需了解建议,请参阅服务帐号最佳实践

  11. 点击创建

使用 Google Cloud CLI 配置时间表

如果您使用的是运行 shell 命令的脚本或工具,则可以通过将 Cloud Scheduler 或您自己的调度器配置为运行带有 --start-on-create-enabled 标志的 gcloud alpha fault-testing experiments create 命令来安排实验。

运行以下命令以创建并立即启动实验实例:

gcloud alpha fault-testing experiments create EXPERIMENT_ID \
    --experiment-template=TEMPLATE_ID \
    --location=REGION \
    --start-on-create-enabled \
    [--description="DESCRIPTION"] \
    [--project=PROJECT_ID]
  • EXPERIMENT_ID:实验运行的唯一标识符。由于此命令是自动执行的,因此您的脚本应为每次运行生成一个唯一 ID。例如,您可以附加时间戳:scheduled-exp-$(date +%s)
  • TEMPLATE_ID:预配置的实验模板的 ID。
  • REGION:实验运行所在的区域。 Google Cloud
  • --start-on-create-enabled:此标志指示 Fault Injection Testing 在创建后立即启动实验。
  • DESCRIPTION:(可选)实验运行的说明。
  • PROJECT_ID:(可选)您的 Google Cloud 项目 ID。

管理实验运行

每次安排的执行都会创建一个新的不同实验实例。您可以使用以下命令管理这些实例:

  • 列出所有实验运行:

    gcloud alpha fault-testing experiments list --location=REGION
    
  • 查看特定运行的详细信息:

    gcloud alpha fault-testing experiments describe EXPERIMENT_ID --location=REGION
    
  • 提前停止正在运行的实验:

    gcloud alpha fault-testing experiments stop EXPERIMENT_ID --location=REGION
    

最佳实践

安排实验时,请考虑以下最佳实践:

  • 使用专用服务账号。配置调度器(例如 Cloud Scheduler)时,请将其与专用服务帐号相关联。仅授予此服务帐号管理实验所需的最低权限,例如项目中的 roles/faulttesting.operatorroles/faulttesting.admin
  • 生成唯一的实验 ID。使用脚本触发实验时,请确保脚本为每次运行生成唯一的实验 ID,以避免资源名称冲突。
  • 使用描述性名称或说明。每次安排的运行都会创建一个新实验实例。 它不会重启或覆盖之前的实验。使用描述性名称或说明有助于将运行追溯到其时间表。
  • 监控时间表失败。外部触发器可能会因网络问题、凭据过期或 API 配额而失败。在调度器作业中设置监控和提醒,以便在作业运行失败或收到错误响应时通知您。
  • 与排除窗口期协调。验证安排的 实验是否与有效的 排除 窗口期重叠。如果在排除窗口期内触发了安排的实验,Fault Injection Testing 会阻止运行,并且实验无法启动。