Chaosblade Operator 是混沌工程实验工具 ChaosBlade 下的一款面向云原生领域的混沌实验注入工具,可单独部署使用。通过定义 Kubernetes CRD 来管理混沌实验,每个实验都有非常明确的执行状态。工具具有部署简单、执行便捷、标准化实现、场景丰富等特点。将 ChaosBlade 混沌实验模型与 Kubernetes CRD 很好的结合在一起,可以实现基础资源、应用服务、容器等场景在 Kubernetes 平台上场景复用,方便了 Kubernetes 下资源场景的扩展,而且可通过 chaosblade cli 统一执行调用。
目前实验场景涉及到资源包含 Node、Pod、Container,具体支持的场景如下:
# operator 根目录下
# linux/amd64
make build_all
# linux/arm64
make build_all_amr64
# 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 请使用最新的版本号替代
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
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
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 后即可执行混沌实验,执行方式有以下三种:
下面通过一个具体的案例来说明 chaosblade-operator 的使用:模拟 cn-hangzhou.192.168.0.205 节点本地端口 40690 60% 的网络丢包。
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
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