添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Skip to main content

模拟 Pod 故障

本文档介绍如何使用 Chaos Mesh 为 Kubernetes Pod 注入故障,模拟 Pod 或容器故障,并提供 Chaos Dashboard 和 YAML 文件两种方式用于创建 PodChaos 实验。

PodChaos 介绍

PodChaos 是 Chaos Mesh 中的一种故障类型,通过创建 PodChaos 类型的混沌实验,你可以模拟指定 Pod 或者容器发生故障的情景。目前,PodChaos 支持模拟以下故障类型:

  • Pod Failure:向指定的 Pod 中注入故障,使得该 Pod 在一段时间内处于不可用的状态。
  • Pod Kill:杀死指定的 Pod 。为了保证 Pod 能够成功重启,需要配置 ReplicaSet 或者类似的机制。
  • Container Kill:杀死位于目标 Pod 中的指定容器。
  • 使用限制

    Chaos Mesh 可以向任一 Pod 注入 PodChaos,无论其 Pod 是否绑定至 Deployment,StatefulSet,DaemonSet 或其他控制器。然而,当向独立的 Pod 注入 PodChaos 时,可能会引起不同的情况。比如,向独立的 Pod 注入 "pod-kill" 混沌时,无法保证应用程序在故障发生后能够恢复正常。

    注意事项

    创建 PodChaos 实验前,请确保以下事项:

  • 目标 Pod 上没有运行 Chaos Mesh 的 Control Manager。
  • 如果故障类型为 Pod Kill,配置了 ReplicaSet 或者类似保证 Pod 能够自动重启的机制。
  • 使用 Chaos Dashboard 方式创建实验

    注意

    在使用 Chaos Dashboard 创建实验前:

      确保已经安装了 Chaos Dashboard。

      如果已安装 Chaos Dashboard,你可以通过运行 kubectl port-forward 命令的方式访问 Dashboard:

      kubectl port-forward -n chaos-mesh svc/chaos-dashboard 2333:2333

      然后可以在浏览器中输入 http://localhost:2333 访问 Chaos Dashboard。

      将实验配置写入到文件中 pod-failure.yaml ,内容示例如下:

      apiVersion: chaos-mesh.org/v1alpha1
      kind: PodChaos
      metadata:
      name: pod-failure-example
      namespace: chaos-mesh
      spec:
      action: pod-failure
      mode: one
      duration: '30s'
      selector:
      labelSelectors:
      'app.kubernetes.io/component': 'tikv'

      依据此配置示例,Chaos Mesh 将向指定的 Pod 中注入 pod-failure 故障,将使该 Pod 在 30 秒内处于不可用的状态。

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

      kubectl apply -f ./pod-failure.yaml

      pod-kill 示例

      将实验配置写入到文件中 pod-kill.yaml ,内容示例如下:

      apiVersion: chaos-mesh.org/v1alpha1
      kind: PodChaos
      metadata:
      name: pod-kill-example
      namespace: chaos-mesh
      spec:
      action: pod-kill
      mode: one
      selector:
      namespaces:
      - tidb-cluster-demo
      labelSelectors:
      'app.kubernetes.io/component': 'tikv'

      依据此配置示例,Chaos Mesh 将向指定的 Pod 中注入 pod-kill 故障,将使该 Pod 被杀死一次。

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

      kubectl apply -f ./pod-kill.yaml

      container-kill 示例

      将实验配置写入到文件中 container-kill.yaml ,内容示例如下:

      apiVersion: chaos-mesh.org/v1alpha1
      kind: PodChaos
      metadata:
      name: container-kill-example
      namespace: chaos-mesh
      spec:
      action: container-kill
      mode: one
      containerNames: ['prometheus']
      selector:
      labelSelectors:
      'app.kubernetes.io/component': 'monitor'

      依据此配置示例,Chaos Mesh 将向指定的 Container 中注入 container-kill 故障,将使该 Container 被杀死一次。

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