跳到主要内容

模拟 GCP 故障

GCPChaos 实验能够模拟指定的 GCP 实例发生故障的场景。目前,GCPChaos 实验支持以下几种故障类型:

  • Node Stop:使指定的 GCP 实例进入停止状态。
  • Node Restart:重置指定的 GCP 实例。
  • Disk Loss:从指定的 GCP 实例中卸载存储卷。

开始之前

  • 默认已导入本地代码的 GCP 身份验证信息。如果尚未导入,请按照前提条件文档中的步骤进行操作。

  • 为了方便连接到 GCP 集群,可以提前创建一个 Kubernetes Secret 文件存储身份验证信息。Secret 文件的示例如下:

    apiVersion: v1
    kind: Secret
    metadata:
    name: cloud-key-secret-gcp
    namespace: default
    type: Opaque
    stringData:
    service_account: your-gcp-service-account-base64-encode
    • name 表示 Kubernetes Secret 对象的名字。
    • namespace 表示 Kubernetes Secret 对象的命名空间。
    • service_account 存储 GCP 集群的服务账号密钥。请注意,你需要对 GCP 集群的服务账号密钥进行 Base64 编码。如需了解 GCP 服务账号密钥,请参阅创建和管理服务帐号密钥

使用 kbcli 模拟故障注入

Stop

执行以下命令,向指定的 GCP 实例中注入 node-stop 故障,使该实例在 3 分钟内处于不可用的状态。

kbcli fault node stop [node1] [node2] -c=gcp --region=us-central1-c --duration=3m

执行上述命令后,node-stop 命令会创建资源,包括 Secret cloud-key-secret-gcp 和 GCPChaos node-chaos-w98j5。执行 kubectl describe node-chaos-w98j5 命令,可以验证是否成功注入了 node-stop 故障。

警告

在更改集群权限、更新密钥或更改集群 context 时,必须删除 cloud-key-secret-gcp。注入 node-stop 后,将根据新的密钥创建一个新的 cloud-key-secret-gcp

Restart

执行以下命令,向指定的 GCP 实例中注入 node-restart 故障,使得该实例重启。

kbcli fault node restart [node1] [node2] -c=gcp --region=us-central1-c

Detach volume

执行以下命令,向指定的 GCP 实例中注入 detach-volume 故障,使该实例与指定存储卷分离。

kbcli fault node detach-volume [node1] -c=gcp --region=us-central1-c --device-name=/dev/sdb

使用 YAML 文件模拟故障注入

GCP stop 示例

  1. 将实验配置写入到 gcp-stop.yaml 文件中。

    在下例中,Chaos Mesh 将向指定的 GCP 实例中注入 node-stop 故障,使该实例在 30 秒内不可用。

    apiVersion: chaos-mesh.org/v1alpha1
    kind: GCPChaos
    metadata:
    creationTimestamp: null
    generateName: node-chaos-
    namespace: default
    spec:
    action: node-stop
    duration: 30s
    instance: gke-yjtest-default-pool-c2ee710b-fs5q
    project: apecloud-platform-engineering
    secretName: cloud-key-secret-gcp
    zone: us-central1-c
  2. 使用 kubectl 创建实验。

    kubectl apply -f ./aws-detach-volume.yaml

GCP restart 示例

  1. 将实验配置写入到 gcp-restart.yaml 文件中。

    在下例中,Chaos Mesh 将向指定的 GCP 实例中注入 node-reset 故障,使得该实例重启。

    apiVersion: chaos-mesh.org/v1alpha1
    kind: GCPChaos
    metadata:
    creationTimestamp: null
    generateName: node-chaos-
    namespace: default
    spec:
    action: node-reset
    duration: 30s
    instance: gke-yjtest-default-pool-c2ee710b-fs5q
    project: apecloud-platform-engineering
    secretName: cloud-key-secret-gcp
    zone: us-central1-c
  2. 使用 kubectl 创建实验。

    kubectl apply -f ./aws-detach-volume.yaml

GCP detach volume 示例

  1. 将实验配置写入到 gcp-detach-volume.yaml 文件中。

    在下例中,Chaos Mesh 将向指定的 GCP 实例中注入 disk-loss 故障,使该实例在 30 秒内与指定存储卷分离。

    apiVersion: chaos-mesh.org/v1alpha1
    kind: GCPChaos
    metadata:
    creationTimestamp: null
    generateName: node-chaos-
    namespace: default
    spec:
    action: disk-loss
    deviceNames:
    - /dev/sdb
    duration: 30s
    instance: gke-yjtest-default-pool-c2ee710b-fs5q
    project: apecloud-platform-engineering
    secretName: cloud-key-secret-gcp
    zone: us-central1-c
  2. 使用 kubectl 创建实验。

    kubectl apply -f ./aws-detach-volume.yaml

字段说明

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

参数类型说明默认值是否必填
actionstring指定要注入的故障类型,支持 node-stopnode-resetdisk-lossnode-stop
modestring指定实验的运行方式,可选项包括:one(表示随机选出一个符合条件的 Pod)、all(表示选出所有符合条件的 Pod)、fixed(表示选出指定数量且符合条件的 Pod)、fixed-percent(表示选出占符合条件的 Pod 中指定百分比的 Pod)和 random-max-percent(表示选出占符合条件的 Pod 中不超过指定百分比的 Pod)。
valuestring取决于 mode 的配置,为 mode 提供对应的参数。例如,当你将 mode 配置为 fixed-percent 时,value 用于指定 Pod 的百分比。
secretNamestring指定存储 GCP 认证信息的 Kubernetes Secret 名字。
projectstring指定 GCP 项目的 ID。
zonestring指定 GCP 实例的区域。
instancestring指定 GCP 实例的名称。
deviceNames[]stringactiondisk-loss 时必填,指定设备磁盘 ID。
durationstring指定实验的持续时间。