安装
下载安装包
$ https://github.com/chaosblade-io/chaosblade/releases
包名:(chaosblade-operator-1.6.0.tgz)
# 为 chaosblade 创建一个 namespace
$ kubectl create namespace lsc-test
# 安装 ChaosBlade-Operator
[root@user1-master-0 lsctest]# tar -xzvf chaosblade-operator-1.6.0.tgz
chaosblade-operator/Chart.yaml
chaosblade-operator/values.yaml
chaosblade-operator/templates/NOTES.txt
chaosblade-operator/templates/_helpers.tpl
chaosblade-operator/templates/daemonset.yaml
chaosblade-operator/templates/deployment.yaml
chaosblade-operator/templates/rbac.yaml
chaosblade-operator/templates/secret.yaml
chaosblade-operator/templates/service.yaml
chaosblade-operator/.helmignore
chaosblade-operator/crds/crd.yaml
[root@user1-master-0 lsctest]#
[root@user1-master-0 lsctest]#
[root@user1-master-0 lsctest]# ls
advisor.yaml chaosblade-1.6.0.tar chaosblade-operator-1.6.0.tgz f-demo-stock-provider-sidecar
chaosblade-1.6.0 chaosblade-1.6.0.tar.gz demoCheck.sh f-demo-stock-provider-sidecar.skiff-nsfdemo-sideca"
chaosblade-1.6.0-linux-amd64-alpha.tar.gz chaosblade-operator echo3.yaml wall2.yaml
[root@user1-master-0 lsctest]#
[root@user1-master-0 lsctest]#
[root@user1-master-0 lsctest]#
[root@user1-master-0 lsctest]# sudo helm install chaosblade-operator ./chaosblade-operator -n lsc-test
sudo: helm: command not found
[root@user1-master-0 lsctest]#
[root@user1-master-0 lsctest]#
[root@user1-master-0 lsctest]# sudo /root/helm install chaosblade-operator ./chaosblade-operator -n lsc-test
NAME: chaosblade-operator
LAST DEPLOYED: Mon Jun 13 18:30:31 2022
NAMESPACE: lsc-test
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for using chaosblade.
You have new mail in /var/spool/mail/root
[root@user1-master-0 lsctest]#
ChaosBlade-Operator 启动后将会在每个节点部署一个 chaosblade-tool Pod 和一个 chaosblade-operator Pod,如果都运行正常,则安装成功。上面设置 --set webhook.enable=true 是为了 Pod 文件系统 I/O 故障实验,如果不需要进行该实验,则无需添加该设置。
Pod 网络丢包场景实例
在 chaosblade 命名空间中,对 redis-master-68857cd57c-dzbs9 Pod 注入丢包率 100%
的故障,只针对 IP 为 10.42.69.42 的 pod 生效,也就是除 10.42.69.42 以外的 pod 都能正常访问
redis-master-68857cd57c-dzbs9
# 创建pod loss_pod_network_by_names.yaml:
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
name: loss-pod-network-by-names
spec:
experiments:
- scope: pod
target: network
action: loss
desc: "loss pod network by names"
matchers:
- name: names
value:
- "redis-master-68857cd57c-dzbs9"
- name: namespace
value:
- "chaosblade"
- name: interface
value: ["eth0"]
- name: percent
value: ["100"]
- name: timeout
value: ["60"]
- name: destination-ip
value: ["10.42.69.42"]
# 创建pod loss_pod_network_by_appname.yaml:
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: delay-traffic
namespace: your-namespace
spec:
action: delay
mode: one
selector:
podSelector:
matchLabels:
app: your-app
delay:
latency: "100ms"
correlation: "25%"
jitter: "50ms"
direction: all
执行命令,创建pod
$ kubectl apply -f loss_pod_network_by_names.yaml
查看资源
$ kubectl get blade loss_pod_network_by_names -o yaml
观察结果:
# 获取实验 pod ip
$ kubectl get pod -l app=redis,role=master -o jsonpath={.items..status.podIP}
10.42.69.44
# 进入观测 pod,IP为:10.42.69.42(被设置丢包率 100%)
$ kubectl exec -it redis-slave-6dd975d4c8-lm8jz bash
# Ping 实验Pod ip
$ ping 10.42.69.44
PING 10.42.69.44 (10.42.69.44) 56(84) bytes of data.
# 无响应
# 进入观测 pod,该 pod 未被指定丢包
$ kubectl exec -it redis-slave-6dd975d4c8-2zrkb bash
# Ping 实验Pod ip
$ ping 10.42.69.44
PING 10.42.69.44 (10.42.69.44) 56(84) bytes of data.
64 bytes from 10.42.69.44: icmp_seq=1 ttl=63 time=0.128 ms
64 bytes from 10.42.69.44: icmp_seq=2 ttl=63 time=0.128 ms
64 bytes from 10.42.69.44: icmp_seq=3 ttl=63 time=0.092 ms
...
# 响应正常
#可以看到观测 pod 访问实验 pod 丢包率 100%(无法访问),而其他 pod 不受影响,结果符合预期。
#这里在配置中将 timeout 设置为 60 秒,60 秒后 100% 丢包的情况将会消失,这个配置是为了防止因丢包率设置太高,造成机器无法连接的情况。与其有相似功能的还有 exclude-port,该配置指定一些端口不会丢包,以免该 pod 失联。
停止该资源
执行命令:kubectl delete -f loss_pod_network_by_names.yaml
或者直接删除 blade 资源:kubectl delete blade loss-pod-network-by-names)