【ChaosBlade:混沌测试工具安装、模拟K8s Pod 网络丢包场景】

安装

 下载安装包
$ 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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙女肖消乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值