【ChaosBlade:节点 CPU 负载、节点网络延迟、节点网络丢包、节点域名访问异常】

节点 CPU 负载

目标: 指定一个节点,做 CPU 负载 80% 实验

node_cpu_load.yaml内容:

apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
  name: cpu-load
spec:
  experiments:
  - scope: node
    target: cpu
    action: fullload
    desc: "increase node cpu load by names"
    matchers:
    - name: names
      value:
      - "docker20"
    - name: cpu-percent
      value:
      - "80"
选择一个节点,修改 node_cpu_load.yaml 中的 names 值。
执行命令:
$ kubectl apply -f node_cpu_load.yaml

查看状态
执行 kubectl get blade cpu-load -o json 命令,查看实验状态。

查看结果
进入该 Node 节点,使用 top 命令可以看到该节点 CPU 达到预期效果。

停止
执行命令:kubectl delete -f node_cpu_load.yaml
或者直接删除 blade 资源:kubectl delete blade cpu-load

节点网络相关场景
操作前,请先登录 node 节点,使用 ifconfig 命令查看网卡信息,不是所有系统默认的网卡名称都是 eth0

节点网络延迟场景

目标: 指定节点的本地 32436 端口添加 3000 毫秒访问延迟,延迟时间上下浮动 1000 毫秒

选择一个节点,修改 delay_node_network_by_names.yaml 中的 names 值
对 docker20 节点本地端口 32436 访问丢包率 100%。
delay_node_network_by_names.yaml 内容:
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
  name: delay-node-network-by-names
spec:
  experiments:
  - scope: node
    target: network
    action: delay
    desc: "delay node network loss"
    matchers:
    - name: names
      value: ["docker20"]
    - name: interface
      value: ["ens33"]
    - name: local-port
      value: ["32436"]
    - name: time
      value: ["3000"]
    - name: offset
      value: ["1000"]
执行命令:
$ kubectl apply -f delay_node_network_by_names.yaml

查看状态
执行 kubectl get blade delay-node-network-by-names -o json 命令,查看实验状态。

查看结果
# 从实验节点访问 Guestbook
$ time echo "" | telnet 192.168.1.129 32436
Trying 192.168.1.129...
Connected to 192.168.1.129.
Escape character is '^]'.
Connection closed by foreign host.
echo ""  0.00s user 0.00s system 35% cpu 0.003 total
telnet 192.168.1.129 32436  0.01s user 0.00s system 0% cpu 3.248 total

停止
执行命令:kubectl delete -f delay_node_network_by_names.yaml
或者直接删除 blade 资源:kubectl delete blade delay-node-network-by-names

节点网络丢包场景

目标: 指定节点的 32436 端口注入丢包率 100% 的故障

选择一个节点,修改 loss_node_network_by_names.yaml 中的 names 值。
loss_node_network_by_names.yaml 内容:
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
  name: loss-node-network-by-names
spec:
  experiments:
  - scope: node
    target: network
    action: loss
    desc: "node network loss"
    matchers:
    - name: names
      value: ["docker20"]
    - name: percent
      value: ["100"]
    - name: interface
      value: ["ens33"]
    - name: local-port
      value: ["32436"]
执行命令,开始:
$ kubectl apply -f loss_node_network_by_names.yaml

查看状态
执行 kubectl get blade loss-node-network-by-names -o json 命令,查看状态。

查看结果
该端口为 Guestbook nodeport 的端口,访问实验端口无响应,但是访问未开启实验的端口可以正常使用:

# 获取节点 IP
$ kubectl get node -o wide
NAME       STATUS   ROLES                      AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
docker20   Ready    worker                     3d16h   v1.17.6   192.168.1.129   <none>        Ubuntu 18.04.4 LTS   4.15.0-101-generic   docker://19.3.11
kk         Ready    controlplane,etcd,worker   4d16h   v1.17.6   192.168.4.210   <none>        Ubuntu 18.04.4 LTS   4.15.0-101-generic   docker://19.3.11
# 从操作节点访问 Guestbook - 无法访问
$ telnet 192.168.1.129 32436
Trying 192.168.1.129...
telnet: connect to address 192.168.1.129: Operation timed out
telnet: Unable to connect to remote host
# 从非操作节点访问 Guestbook - 正常访问
$ telnet 192.168.4.210 32436
Trying 192.168.4.210...
Connected to 192.168.4.210.
Escape character is '^]'.

同样也可以直接从浏览器访问地址验证。

停止
执行命令:kubectl delete -f loss_node_network_by_names.yaml
或者直接删除 blade 资源:kubectl delete blade loss-node-network-by-names

节点域名访问异常场景

目标: 本实验通过修改 Node 的 hosts,篡改域名地址映射,模拟 Pod 内域名访问异常场景。

选择一个节点,修改 dns_node_network_by_names.yaml 中的 names 值。
dns_node_network_by_names.yaml 内容:

apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
  name: dns-node-network-by-names
spec:
  experiments:
  - scope: node
    target: network
    action: dns
    desc: "dns node network by names"
    matchers:
    - name: names
      value:
      - "docker20"
    - name: domain
      value: ["www.baidu.com"]
    - name: ip
      value: ["10.0.0.1"]
执行命令,开始实验:
$ kubectl apply -f dns_node_network_by_names.yaml

查看实验状态
执行 kubectl get blade dns-node-network-by-names -o json 命令,查看实验状态。

查看实验结果
# 进入实验 node
$ ssh kk@192.168.1.129
# Ping www.baidu.com
$ ping www.baidu.com
# 无响应
可以看到 Node 的 /etc/hosts 文件被修改,模拟了 dns 解析异常的场景。

停止
执行命令:kubectl delete -f dns_node_network_by_names.yaml
或者直接删除 blade 资源:kubectl delete blade dns-node-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、付费专栏及课程。

余额充值