混沌工程之ChaosBlade-Operator使用之一模拟POD丢包场景

1.概述

在写了多篇混沌工程后,今天我们再介绍一个新的工具在K8S环境实现混沌工程测试。

2.ChaosBalde-Operator介绍

ChaosBlade-Operator是ChaosBlade的K8s平台场景的实现。将混沌实验通过 Kubernetes 标准的 CRD 方式定义,用户可以像定义 Deployment 或 StatefulSet 那样定义 ChaosBlade 实验,只要对 kubectl 和 Kubernetes 对象有所了解,就可以轻松的创建、更新和删除实验场景;同时也可以通过 chaosblade cli 工具来操作实验场景。

3.ChaosBalde-Operator安装

3.1.安装命令

使用 Helm 3 安装,ChaosBlade-Operator 启动后将会在每个节点部署一个 chaosblade-tool Pod 和一个 chaosblade-operator Pod,如果都运行正常,则安装成功。上面设置 --set webhook.enable=true 是为了 Pod 文件系统 I/O 故障实验,如果不需要进行该实验,则无需添加该设置。

# 下载安装包
[root@s5 k8s]# wget -qO chaosblade-operator-1.2.0-v3.tgz https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/1.2.0/chaosblade-operator-1.2.0-v3.tgz
# 为 chaosblade 创建一个 namespace
[root@s5 k8s]#  kubectl create namespace chaosblade
namespace/chaosblade created
# 安装 ChaosBlade-Operator
[root@s5 k8s]#  ./helm-darwin-amd64/helm install chaos chaosblade-operator-1.2.0-v3.tgz --set webhook.enable=true --namespace=chaosblade
W0621 14:39:16.362347   42437 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W0621 14:39:16.375507   42437 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W0621 14:39:18.394761   42437 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W0621 14:39:20.669546   42437 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
W0621 14:39:20.674105   42437 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
W0621 14:39:20.687832   42437 warnings.go:70] admissionregistration.k8s.io/v1beta1 MutatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 MutatingWebhookConfiguration
W0621 14:39:20.734308   42437 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
W0621 14:39:20.742406   42437 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
W0621 14:39:20.804103   42437 warnings.go:70] admissionregistration.k8s.io/v1beta1 MutatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 MutatingWebhookConfiguration
NAME: chaos
LAST DEPLOYED: Mon Jun 21 14:39:20 2021
NAMESPACE: chaosblade
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for using chaosblade.
[root@s5 k8s]#
# 查看安装结果
[root@s5 k8s]# kubectl get pod -n chaosblade | grep chaosblade
chaosblade-operator-67779995db-cs2lv   1/1     Running   0          4m49s
chaosblade-tool-58ch2                  1/1     Running   0          3m27s
chaosblade-tool-qdwb6                  1/1     Running   0          2m57s
chaosblade-tool-z8jds                  1/1     Running   0          2m57s
[root@s5 k8s]#

3.2.示例应用准备

配置实验对象,这里使用 guestbook 应用,如果你已经有应用了,就不需要安装这个小的示例应用。

1.示例应用安装

默认的 Service 类型为 LoadBalancer,这里为了方便访问设置为了 NodePort。

- 添加helm仓库
[root@s5 k8s]# helm repo add apphub-incubator https://apphub.aliyuncs.com/incubator/
"apphub-incubator" has been added to your repositories
- 安装应用示例
[root@s5 k8s]# helm install guestbook apphub-incubator/guestbook --set service.type=NodePort --namespace=chaosblade
NAME: guestbook
LAST DEPLOYED: Mon Jun 21 22:42:41 2021
NAMESPACE: chaosblade
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:export NODE_PORT=$(kubectl get --namespace chaosblade -o jsonpath="{.spec.ports[0].nodePort}" services guestbook)export NODE_IP=$(kubectl get nodes --namespace chaosblade -o jsonpath="{.items[0].status.addresses[0].address}")echo http://$NODE_IP:$NODE_PORT
[root@s5 k8s]# echo http://$NODE_IP:$NODE_PORT
http://172.31.184.225:32310

2.示例应用安装验证

访问http://nodeip:nodeport。
成功后可以看到这个界面,输入任何字符点击submit都会显示在上面,如此而已的一个小应用。

4.ChaosBalde-Operator使用

4.1.模拟Pod 网络丢包场景

1.目标

对 redis-master-b96c9795b-4ghxq Pod 注入丢包率 50% 的故障,持续10分钟,只针对 IP 为 10.100.53.195 的 pod 生效,也就是除 10.100.53.195 以外的 pod 都能正常访问 redis-master-b96c9795b-4ghxq。

2.查看网络配置信息

[root@s5 chaosblade_scenarios]# kubectl get pods -n chaosblade -o wide
NAME                                    READY   STATUS    RESTARTS   AGE    IP               NODE   NOMINATED NODE   READINESS GATES
chaosblade-operator-67779995db-ns4qg    1/1     Running   0          100m   10.100.53.193    s7     <none>           <none>
chaosblade-tool-bhgbk                   1/1     Running   0          100m   172.31.184.224   s7     <none>           <none>
chaosblade-tool-mqmrc                   1/1     Running   0          100m   172.31.184.226   s6     <none>           <none>
chaosblade-tool-xqgl5                   1/1     Running   0          100m   172.31.184.225   s5     <none>           <none>
guestbook-7fcc447874-q248s              1/1     Running   0          98m    10.100.53.194    s7     <none>           <none>
guestbook-7fcc447874-zpbn4              1/1     Running   0          98m    10.100.220.67    s6     <none>           <none>
mall-tiny-deployment-85bdb875cf-zl6jw   1/1     Running   0          54m    10.100.220.71    s6     <none>           <none>
redis-master-b96c9795b-4ghxq            1/1     Running   0          10m    10.100.53.196    s7     <none>           <none>
redis-slave-6b8d456947-c6h64            1/1     Running   0          98m    10.100.53.195    s7     <none>           <none>
redis-slave-6b8d456947-twgk9            1/1     Running   0          98m    10.100.220.68    s6     <none>           <none>

3.配置网络信息

[root@s5 chaosblade_scenarios]# cat loss_pod_network_by_names.yaml
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:name: loss-pod-network-by-names
spec:experiments:- scope: podtarget: networkaction: lossdesc: "loss pod network by names"matchers:- name: namesvalue:- "redis-master-b96c9795b-4ghxq"- name: namespacevalue:- "chaosblade"- name: interfacevalue: ["eth0"]- name: percentvalue: ["50"]- name: timeoutvalue: ["600"]- name: destination-ipvalue: ["10.100.53.195"]
[root@s5 chaosblade_scenarios]#

3.模拟网络丢包

[root@s5 chaosblade_scenarios]# kubectl apply -f loss_pod_network_by_names.yaml
chaosblade.chaosblade.io/loss-pod-network-by-names created
[root@s5 chaosblade_scenarios]#

4.验证网络丢包

  • 登录到10.100.53.195服务器,执行ping命令。确实产生近50%的丢包。
[root@s5 chaosblade_scenarios]# kubectl exec -it redis-slave-6b8d456947-c6h64 bash -n chaosblade
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[ root@redis-slave-6b8d456947-c6h64:/data ]$ ping 10.100.53.196
PING 10.100.53.196 (10.100.53.196) 56(84) bytes of data.
64 bytes from 10.100.53.196: icmp_seq=1 ttl=63 time=0.112 ms
64 bytes from 10.100.53.196: icmp_seq=2 ttl=63 time=0.096 ms
64 bytes from 10.100.53.196: icmp_seq=3 ttl=63 time=0.098 ms
64 bytes from 10.100.53.196: icmp_seq=4 ttl=63 time=0.091 ms
64 bytes from 10.100.53.196: icmp_seq=7 ttl=63 time=0.092 ms
64 bytes from 10.100.53.196: icmp_seq=8 ttl=63 time=0.084 ms
64 bytes from 10.100.53.196: icmp_seq=13 ttl=63 time=0.085 ms
64 bytes from 10.100.53.196: icmp_seq=14 ttl=63 time=0.088 ms
64 bytes from 10.100.53.196: icmp_seq=17 ttl=63 time=0.086 ms
^C
--- 10.100.53.196 ping statistics ---
17 packets transmitted, 9 received, 47% packet loss, time 15999ms
rtt min/avg/max/mdev = 0.084/0.092/0.112/0.012 ms
[ root@redis-slave-6b8d456947-c6h64:/data ]$
  • 进入master机器,检查网络队列

确实产生队列规则。
可见这个模拟是通过操作qdisc来实现的。如果你有兴趣的话,可以去查一下linux上的traffic control的逻辑。

[root@s5 chaosblade_scenarios]# kubectl exec -it redis-master-b96c9795b-4ghxq bash -n chaosblade
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@redis-master-b96c9795b-4ghxq:/data# tc qdisc ls dev eth0
qdisc prio 1: root refcnt 2 bands 4 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc netem 40: parent 1:4 limit 1000 loss 50%
root@redis-master-b96c9795b-4ghxq:/data#

5.恢复网络

[root@s5 chaosblade_scenarios]# kubectl delete -f loss_pod_network_by_names.yaml
chaosblade.chaosblade.io "loss-pod-network-by-names" deleted

混沌工程之ChaosBlade-Operator使用之一模拟POD丢包场景相关推荐

  1. 混沌工程之ChaosBlade(一):建立混沌工程思想

    本系列文章的目标,是将混沌工程作为一个入口,窥探整个分布式系统. 混沌工程之ChaosBlade(一):建立混沌工程思想 混沌工程之ChaosBlade(二):原理深度剖析 一.混沌工程是什么 < ...

  2. 混沌工程之ChaosToolkit使用之一删除K8s POD

    混沌工程之ChaosToolkit使用之一删除K8s POD 1.概述 今天我们来玩一下混沌工程的开源工具chaostoolkit . 它的目标是提供一个免费,开放,社区驱动的工具集以及api. 2. ...

  3. 混沌工程之ChaosMesh使用之模拟POD网络延迟

    文章目录 前言 模拟 POD 网络延迟 目标 配置文件 执行 验证 恢复 留个思考题给你 前言 在这一篇中我们来看一下如何模拟 POD 网络故障. 模拟 POD 网络延迟 目标 指定 pod 产生 1 ...

  4. 云原生 | 混沌工程工具 ChaosBlade Operator Pod 篇(文末赠书)

    作者:丁源 RadonDB 测试负责人 负责 RadonDB 云数据库.容器化数据库的质量性能测试,迭代验证.对包括云数据库以及容器化数据库性能和高可用方案有深入研究. 继<混沌工程工具 Cha ...

  5. windows下网络丢包模拟软件(Network Emulator for Windows Toolkit)

    最近公司有一个直播的测试项目,需要模拟各种网络环境下的直播状态,最后找到一款这样的软件(如果有遇到更好的软件,望和网友多多交流) 介绍一款windows下的网络模拟器,可以模拟各种丢包或延迟的网络(N ...

  6. linux 无线网卡 延时 丢包 模拟,Linux模拟网络丢包与延迟的方法

    netem 与 tc: netem 是 linux 2.6 及以上内核版本提供的一个网络模拟功能模块.该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽.传输延迟.丢包等等 ...

  7. linux 模拟延时和丢包

    这是 RHCA 中的一个 BDP 的测试,这也是公司很常用的一种延时和丢包的模拟,现在分享给大家. 我们做的应用软件,还有测试 TCP/UDP  对比,测试 BDP 对 TCP/IP 的影响时,我们都 ...

  8. 在 Linux 的应用中测试中的延时和丢包模拟

    这是 RHCA 中的一个 BDP 的测试,这也是公司很常用的一种延时和丢包的模拟,现在分享给大家. 我们做的应用软件,还有测试 TCP/UDP  对比,测试 BDP 对 TCP/IP 的影响时,我们都 ...

  9. python socket通信 recv 丢包_用clumsy模拟丢包测试socket库的失败重传

    用python的socket库写了通信小程序,现在我需要通过软件模拟出在网络极差的情况下,socket底层解决丢包问题的能力怎么样,我一开始想的是分别在linux和windowns下分别测试,后来一想 ...

最新文章

  1. C++实现求数组中前K大的数
  2. 计算机IO系列「零」计算机IO【硬件部分】
  3. linux中内核中machine_desc,Linux-内核-学习笔记(13):移植三星官方内核
  4. Linux云服务器安装JDK1.8
  5. 哔哩哔哩2019年Q4及全年财报:全年营收67.8亿元,同比增长64%
  6. Shell命令_for
  7. 数据持久化mysql_Nacos数据持久化到MySQL
  8. 列车停站方案_高速铁路列车停站方案与运行图协同优化理论和方法
  9. 数据--第25课 - 队列课后练习
  10. hexo matery 相册 视频相册 相册加密 描述备注
  11. NAT(地址转换技术)详解
  12. GUI制作信号分析的频域和时域分析
  13. 服务器上phpstudy搭建网站,如何使用PHPstudy在本地搭建一个网站(最新图文教程)...
  14. 排列组合(组合C语言实现)
  15. 什么是上位机、下位机
  16. MS Excel生成二维码
  17. 【板栗糖GIS】为什么内网穿透过的地址出现Tunnel not found
  18. 矩阵论 - 9 - 线性无关、基、维数
  19. 新仙剑奇侠传H5上线测试了
  20. 关于python中end函数的使用

热门文章

  1. 为什么软考高项考了很多次还没通过?
  2. 图片33333333
  3. dubbo.xsd下载
  4. 如何用Word做流程图
  5. 软路由(openwrt)的三个基础知识
  6. 智能混剪系统爆款生成器移动端-----H5手机版(小程序端)
  7. 别让甲醛检测仪继续“野蛮生长”
  8. VHDL——4选1多路选择器
  9. 99物联 REALTEK IOT8710B模块SDK下载
  10. 一个北漂程序员在新年的反思