当前位置:网站首页>【ChaosBlade:根据标签删除POD、Pod 域名访问异常场景、Pod 文件系统 I/O 故障场景】
【ChaosBlade:根据标签删除POD、Pod 域名访问异常场景、Pod 文件系统 I/O 故障场景】
2022-07-07 06:20:00 【仙女肖消乐】
根据标签删除POD
目标:在 chaosblade 命名空间中,对 redis-master-68857cd57c-dzbs9 Pod 的本地 6379
端口添加 3000 毫秒访问延迟,延迟时间上下浮动 1000 毫秒。
delay_pod_network_by_names.yaml 内容:
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
name: delay-pod-network-by-names
spec:
experiments:
- scope: pod
target: network
action: delay
desc: "delay pod network by names"
matchers:
- name: names
value:
- "redis-master-68857cd57c-dzbs9"
- name: namespace
value:
- "chaosblade"
- name: local-port
value: ["6379"]
- name: interface
value: ["eth0"]
- name: time
value: ["3000"]
- name: offset
value: ["1000"]
获取 Pod 名称
$ kubectl get pod -l app=redis,role=master -o jsonpath={
.items..metadata.name}
修改 delay_pod_network_by_names.yaml 中的 name 字段的值。
开始模拟:
$ kubectl apply -f delay_pod_network_by_names.yaml
查看模拟配置详情
kubectl get blade delay-pod-network-by-names -o yaml
观察结果:可以看到访问实验 pod 6379 端口的延迟为 3s 左右,结果符合预期。
# 获取实验 pod ip
$ kubectl get pod -l app=redis,role=master -o jsonpath={
.items..status.podIP}
10.42.69.44
# 进入观测 pod
$ kubectl exec -it redis-slave-6dd975d4c8-2zrkb bash
# 在 pod 中安装 telnet
$ apt-get update && apt-get install -y telnet
# 测试时间
$ time echo "" | telnet 10.42.69.44 6379
Trying 10.42.69.44...
Connected to 10.42.69.44.
Escape character is '^]'.
Connection closed by foreign host.
real 0m3.790s
user 0m0.007s
sys 0m0.001s
停止实验
执行命令:kubectl delete -f delay_pod_network_by_names.yaml
或者直接删除 blade 资源:kubectl delete blade delay-pod-network-by-names
Pod 域名访问异常场景
目标:Pod 内访问指定域名异常。
获取 pod 名称内容同上。
dns_pod_network_by_names.yaml 内容:
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
name: dns-pod-network-by-names
spec:
experiments:
- scope: pod
target: network
action: dns
desc: "dns pod network by names"
matchers:
- name: names
value:
- "redis-slave-6dd975d4c8-lm8jz"
- name: namespace
value:
- "chaosblade"
- name: domain
value: ["www.baidu.com"]
- name: ip
value: ["10.0.0.1"]
执行命令
$ kubectl apply -f dns_pod_network_by_names.yaml
查看实验状态
执行 kubectl get blade dns-pod-network-by-names -o json 命令,查看实验状态。
观测结果
# 进入实验 pod
$ kubectl exec -it redis-slave-6dd975d4c8-lm8jz bash
# Ping www.baidu.com
$ ping www.baidu.com
# 无响应
可以看到访问指定域名 www.baidu.com 异常,结果符合预期。
停止实验
执行命令:kubectl delete -f dns_pod_network_by_names.yaml
或者直接删除 blade 资源:kubectl delete blade dns-pod-network-by-names
Pod 文件系统 I/O 故障场景
目标:给 kubernetes 的 pod 注入文件系统I/O故障。
注意:此场景需要激活 --webhook-enable 参数,如需使用此功能,请在 chaosblade-operator 参数中添加
–webhook-enable,或者在安装时指定:例如 helm 安装时添加 --set webhook.enable=true 指定。
前提条件
集群中部署了 chaosblade-admission-webhook•需要注入故障的 volume 设置
mountPropagation 为 HostToContainer•pod上面添加了如下annotations:chaosblade/inject-volume: “data” //需要注入故障的volume name
chaosblade/inject-volume-subpath: “conf” //volume 挂载的子目录
部署测试 pod
chaosblade webhook 会根据 pod 的 annotation,注入 fuse 的 sidecar 容器:
1.chaosblade/inject-volume 指明需要注入故障的 volume name,比如例子中的 data。2.chaosblade/inject-volume-subpath 指明 volume
挂载路径的子目录。上面的例子中,volume 的挂载路径是 /data,子目录是 conf,则在 pod 内,注入I/O异常的目录是
/data/conf。3.指定需要注入故障的 volume 需要指定
mountPropagation:HostToContainer,这个字段的含义可以参考官方文档 Volumes[3]。
# 部署测试 pod
$ kubectl apply -f io-test-pod.yaml
# 查看 sidecar 是否注入成功
$ kubectl get pod test-7c9fc6fd88-7lx6b -n chaosblade
NAME READY STATUS RESTARTS AGE
test-7c9fc6fd88-7lx6b 2/2 Running 0 4m8s
pod_io.yaml 内容:
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
name: inject-pod-by-labels
spec:
experiments:
- scope: pod
target: pod
action: IO
desc: "Pod IO Exception by labels"
matchers:
- name: labels
value:
- "app=test"
- name: namespace
value:
- "chaosblade"
- name: method
value:
- "read"
- name: delay
value:
- "1000"
- name: path
value:
- ""
- name: percent
value:
- "60"
- name: errno
value:
- "28"
执行命令
$ kubectl apply -f pod_io.yaml
查看实验状态
执行 kubectl get blade inject-pod-by-labels -o json 命令,查看实验状态
观测结果
# 进入实验 pod
$ kubectl exec -it test-7c9fc6fd88-7lx6b bash
# 在 pod 内读取指定目录中的文件,如果没有可以新建一个
$ time cat /data/conf/test.yaml
cat: read error: No space left on device
real 0m3.007s
user 0m0.002s
sys 0m0.002s
# 因为有重试,显示有 3s 的延迟
# 因为设置了 60% 的异常,所有还是有成功的情况
$ time cat /data/conf/test.yaml
123
real 0m0.004s
user 0m0.002s
sys 0m0.000s
文件读取异常,结果符合预期。
在本例中,我们对 read 操作注入两种异常,异常率为百分之60:
对 read 操作增加 1s 的延迟。•对 read 操作返回错误 28。
这里只是做了一种类型的实验,更多的实验类型详见官方文档[4]。
停止实验
执行命令:kubectl delete -f pod_io.yaml
或者直接删除 blade 资源:kubectl delete blade inject-pod-by-labels
删除测试 pod:kubectl delete -f io-test-pod.yaml
边栏推荐
- 模拟卷Leetcode【普通】1557. 可以到达所有点的最少点数目
- Mountaineering team (DFS)
- Calf problem
- Digital triangle model acwing 1027 Grid access
- 数字三角形模型 AcWing 275. 传纸条
- [MySQL] detailed explanation of trigger content of database advanced
- go mod module declares its path as: gtihub. com/xxx-xx but was required as:xx-xx
- 说一个软件创业项目,有谁愿意投资的吗?
- PPT模板、素材下载网站(纯干货,建议收藏)
- Selenium automation integration, eight years of testing experience, soft test engineer, an article to teach you
猜你喜欢

LeetCode 715. Range 模块

调用华为游戏多媒体服务的创建引擎接口返回错误码1002,错误信息:the params is error

2022-07-06 Unity核心9——3D动画

IP地址的类别

Calling the creation engine interface of Huawei game multimedia service returns error code 1002, error message: the params is error

LeetCode 736. Lisp 语法解析

如何在快应用中实现滑动操作组件

平台化,强链补链的一个支点

Introduction to data fragmentation

Analysis of using jsonp cross domain vulnerability and XSS vulnerability in honeypot
随机推荐
systemd
ESP32-ULP协处理器低功耗模式RTC GPIO中断唤醒
Greenplum6.x搭建_环境配置
实现自定义内存分配器
Mock. JS usage details
Interpolation lookup (two methods)
Enterprise manager cannot connect to the database instance
模拟卷Leetcode【普通】1706. 球会落何处
阿里p8推荐,测试覆盖率工具—Jacoco,实用性极佳
Newly found yii2 excel processing plug-in
[南京大学]-[软件分析]课程学习笔记(一)-introduction
数据分片介绍
【微信小程序:缓存操作】
南京商品房买卖启用电子合同,君子签助力房屋交易在线网签备案
Problems encountered in the use of go micro
Tronapi-波场接口-源码无加密-可二开--附接口文档-基于ThinkPHP5封装-作者详细指导-2022年7月6日-新手快速上手-可无缝升级tp6版本
JS operation
FPGA knowledge accumulation [6]
Markdown editor Use of MD plug-in
Platformization, a fulcrum of strong chain complementing chain