blade create k8s pod-IO

blade create k8s pod-IO

给kubernetes的pod注入文件系统I/O故障

介绍

k8s 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挂载的子目录

命令

blade create k8s pod-pod IO

参数

除了上述基础场景各自所需的参数外,在 kubernetes 环境下,还支持的参数如下:

案例

首先,通过deployment部署测试pod,并在pod的annotation里面指定需要注入I/O异常的volume以及子目录。

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

通过上面的yaml文件创建deployment后,chaosblade webhook会自动插入sidecar容器:

这时虽然插入了sidecar容器,但是还没有注入I/O异常,可以通过下面的yaml注入相关的I/O异常:

在这里例子中,我们对read操作注入两种异常,异常率为百分之60:

  • read操作增加1s的延迟,支持的操作类型包括:

  • read操作返回错误28,支持的错误码包括:

当用上面的yaml文件注入I/O异常后,在pod内读取指定目录中的文件,发现返回了No space left on device,因为有重试,显示有3s的延迟。

Last updated

Was this helpful?