Skip to content

Latest commit

 

History

History
227 lines (208 loc) · 8.97 KB

README_CN.md

File metadata and controls

227 lines (208 loc) · 8.97 KB

Chaosblade Operator: 面向云原生的混沌工程执行工具

license

介绍

Chaosblade Operator 是混沌工程实验工具 ChaosBlade 下的一款面向云原生领域的混沌实验注入工具,可单独部署使用。通过定义 Kubernetes CRD 来管理混沌实验,每个实验都有非常明确的执行状态。工具具有部署简单、执行便捷、标准化实现、场景丰富等特点。将 ChaosBlade 混沌实验模型与 Kubernetes CRD 很好的结合在一起,可以实现基础资源、应用服务、容器等场景在 Kubernetes 平台上场景复用,方便了 Kubernetes 下资源场景的扩展,而且可通过 chaosblade cli 统一执行调用。

支持的场景(持续新增中...)

目前实验场景涉及到资源包含 Node、Pod、Container,具体支持的场景如下:

  • Node:
    • CPU: 指定 CPU 使用率
    • 网络: 指定网卡、端口、IP 等包延迟、丢包、包阻塞、包重复、包乱序、包损坏等
    • 进程:指定进程 Hang、强杀指定进程等
    • 磁盘:指定目录磁盘填充、磁盘 IO 读写负载等
    • 内存:指定内存使用率
  • Pod:
    • 网络:指定网卡、端口、IP 等包延迟、丢包、包阻塞、包重复、包乱序、包损坏等
    • 磁盘:指定目录磁盘填充、磁盘 IO 读写负载等
    • 内存:指定内存使用率
    • Pod:杀 Pod
  • Container:
    • CPU: 指定 CPU 使用率
    • 网络: 指定网卡、端口、IP 等包延迟、丢包、包阻塞、包重复、包乱序、包损坏等
    • 进程:指定进程 Hang、强杀指定进程等
    • 磁盘:指定目录磁盘填充、磁盘 IO 读写负载等
    • 内存:指定内存使用率
    • Container: 杀 Container

本地构建&安装

构造镜像

# operator 根目录下
# linux/amd64
make build_all
# linux/arm64
make build_all_amr64

构造并安装 Helm Chart

# operator 根目录下
cd deploy/helm
# linux/amd64
helm package ./chaosblade-operator
kubectl create ns chaosblade
helm install chaosblade chaosblade-operator-${version}.tgz --namespace chaosblade
# linux/arm64
helm package ./chaosblade-operator-arm64
kubectl create ns chaosblade
helm install chaosblade chaosblade-operator-arm64-${version}.tgz --namespace chaosblade

安装&卸载

支持的 Kubernetes 最小版本是 v1.12,chaosblade operator 可通过 kubectl 或者 helm 进行安装,安装方式如下: 注意:以下的 VERSION 请使用最新的版本号替代

Helm v2

  • Release 地址下载最新的 chaosblade-operator-VERSION-v2.tgz
  • 使用 helm install --namespace kube-system --name chaosblade-operator chaosblade-operator-VERSION-v2.tgz 命令安装
  • 使用 kubectl get pod -l part-of=chaosblade -n kube-system 查看 Pod 的安装状态,如果都是 running 状态,说明安装成功
  • 使用以下命令进行卸载,注意执行顺序:
kubectl delete crd chaosblades.chaosblade.io
helm del --purge chaosblade-operator

Helm v3

  • Release 地址下载最新的 chaosblade-operator-VERSION-v3.tgz
  • 使用 helm install chaosblade-operator chaosblade-operator-VERSION-v3.tgz --namespace kube-system 命令安装
  • 使用 kubectl get pod -l part-of=chaosblade -n kube-system 查看 Pod 的安装状态,如果都是 running 状态,说明安装成功
  • 使用以下命令卸载,注意执行顺序:
kubectl delete crd chaosblades.chaosblade.io
helm uninstall chaosblade-operator -n kube-system

Kubectl

  • Release 地址下载最新的 chaosblade-operator-yaml-VERSION.tar.gz
  • 解压后执行 kubectl apply -f chaosblade-operator-yaml-VERSION/ 安装
  • 使用 kubectl get pod -l part-of=chaosblade -n kube-system 查看 Pod 的安装状态,如果都是 running 状态,说明安装成功
  • 使用以下命令卸载,注意执行顺序:
kubectl delete crd chaosblades.chaosblade.io
kubectl delete -f chaosblade-operator-yaml-VERSION/

使用

安装 chaosblade operator 后即可执行混沌实验,执行方式有以下三种:

  • 通过配置 yaml 方式,使用 kubectl 执行
  • 使用 chaosblade cli 工具执行
  • 通过编写代码调用 Kubernetes API 执行

下面通过一个具体的案例来说明 chaosblade-operator 的使用:模拟 cn-hangzhou.192.168.0.205 节点本地端口 40690 60% 的网络丢包。

通过配置 yaml 方式,使用 kubectl 执行

apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
  name: loss-node-network-by-names
spec:
  experiments:
  - scope: node
    target: network
    action: loss
    desc: "node network loss"
    matchers:
    - name: names
      value: ["cn-hangzhou.192.168.0.205"]
    - name: percent
      value: ["60"]
    - name: interface
      value: ["eth0"]
    - name: local-port
      value: ["40690"]

执行实验:

kubectl apply -f loss-node-network-by-names.yaml

查询实验状态,返回信息如下(省略了 spec 等内容):

~ » kubectl get blade loss-node-network-by-names -o json                                                            
{
    "apiVersion": "chaosblade.io/v1alpha1",
    "kind": "ChaosBlade",
    "metadata": {
        "creationTimestamp": "2019-11-04T09:56:36Z",
        "finalizers": [
            "finalizer.chaosblade.io"
        ],
        "generation": 1,
        "name": "loss-node-network-by-names",
        "resourceVersion": "9262302",
        "selfLink": "/apis/chaosblade.io/v1alpha1/chaosblades/loss-node-network-by-names",
        "uid": "63a926dd-fee9-11e9-b3be-00163e136d88"
    },
        "status": {
        "expStatuses": [
            {
                "action": "loss",
                "resStatuses": [
                    {
                        "id": "057acaa47ae69363",
                        "kind": "node",
                        "name": "cn-hangzhou.192.168.0.205",
                        "nodeName": "cn-hangzhou.192.168.0.205",
                        "state": "Success",
                        "success": true,
                        "uid": "e179b30d-df77-11e9-b3be-00163e136d88"
                    }
                ],
                "scope": "node",
                "state": "Success",
                "success": true,
                "target": "network"
            }
        ],
        "phase": "Running"
    }
}

通过以上内容可以很清晰的看出混沌实验的运行状态,执行以下命令停止实验:

kubectl delete -f loss-node-network-by-names.yaml

或者直接删除此 blade 资源

kubectl delete blade loss-node-network-by-names

还可以编辑 yaml 文件,更新实验内容执行,chaosblade operator 会完成实验的更新操作。更多案例请查看 Examples

使用 chaosblade cli 工具执行

blade create k8s node-network loss --percent 60 --interface eth0 --local-port 40690 --names cn-hangzhou.192.168.0.205 --kubeconfig config

如果执行失败,会返回详细的错误信息;如果执行成功,会返回实验的 UID:

{"code":200,"success":true,"result":"e647064f5f20953c"}

可通过以下命令查询实验状态:

blade query k8s create e647064f5f20953c --kubeconfig config

{
  "code": 200,
  "success": true,
  "result": {
    "uid": "e647064f5f20953c",
    "success": true,
    "error": "",
    "statuses": [
      {
        "id": "fa471a6285ec45f5",
        "uid": "e179b30d-df77-11e9-b3be-00163e136d88",
        "name": "cn-hangzhou.192.168.0.205",
        "state": "Success",
        "kind": "node",
        "success": true,
        "nodeName": "cn-hangzhou.192.168.0.205"
      }
    ]
  }
}

销毁实验:

blade destroy e647064f5f20953c

除了上述两种方式调用外,还可以使用 kubernetes client-go 方式执行,具体可参考:executor.go 代码实现。

中文使用文档

问题&建议

如果在安装使用过程中遇到问题,或者建议和新功能,所有项目(包含其他项目)的问题都可以提交到Github Issues

你也可以通过以下方式联系我们:

参与贡献

我们非常欢迎每个 Issue 和 PR,即使一个标点符号,如何参加贡献请阅读 CONTRIBUTING 文档,或者通过上述的方式联系我们。

开源许可证

Chaosblade-operator 遵循 Apache 2.0 许可证,详细内容请阅读 LICENSE