首页 > 其他分享 >Chaos Mesh(上)

Chaos Mesh(上)

时间:2024-11-15 19:07:54浏览次数:1  
标签:混沌 Chaos mesh chaos Mesh master

Chaos Mesh(上)

目录

1、基本功能

1.1 故障注入

故障注入是混沌实验的核心。Chaos Mesh 充分考虑分布式系统可能出现的故障,提供全面、细粒度的故障类型,分为基础资源类型故障、平台类型故障和应用层故障三大类。

  • 基础资源类型故障:
    • PodChaos:模拟 Pod 故障,例如 Pod 节点重启、Pod 持续不可用,以及特定 Pod 中的某些容器故障。
    • NetworkChaos:模拟网络故障,例如网络延迟、网络丢包、包乱序、各类网络分区。
    • DNSChaos:模拟 DNS 故障,例如 DNS 域名解析失败、返回错误 IP 地址。
    • HTTPChaos:模拟 HTTP 通信故障,例如 HTTP 通信延迟。
    • StressChaos:模拟 CPU 抢占或内存抢占场景。
    • IOChaos:模拟具体某个应用的文件 I/O 故障,例如 I/O 延迟、读写失败。
    • TimeChaos:模拟时间跳动异常。
    • KernelChaos:模拟内核故障,例如应用内存分配异常。
  • 平台类型故障:
    • AWSChaos:模拟 AWS 平台故障,例如 AWS 节点重启。
    • GCPChaos:模拟 GCP 平台故障,例如 GCP 节点重启。
  • 应用层故障:
    • JVMChaos:模拟 JVM 应用故障,例如函数调用延迟。

1.2 混沌实验场景

混沌实验场景由一组混沌实验和应用状态检查组成,旨在帮助用户在平台上实现混沌工程闭环。

用户运行混沌场景,可以通过一系列的混沌实验,不断地扩大爆炸半径(包括攻击范围)和增加故障类型。运行混沌实验后,用户可以方便地检查当前的应用状态,判断是否需要进行后续混沌实验。同时用户可以不断地迭代混沌实验场景,积累混沌实验场景,以及方便地将已有的混沌实验场景复用到其他应用混沌实验中,大大降低了混沌实验的成本。

  • 目前混沌实验场景提供的功能有:
    • 编排串行混沌实验
    • 编排并行混沌实验
    • 支持状态检查步骤
    • 支持中途暂停混沌实验
    • 支持使用 YAML 文件定义和管理混沌实验场景
    • 支持通过 Web UI 定义和管理混沌实验场景

具体的实验场景配置,参考具体创建 Chaos Mesh 工作流。

1.3 可视化操作

Chaos Mesh 为用户提供了单独的 Chaos Dashboard 组件,即可视化支持。Chaos Dashboard 极大地简化了混沌实验,用户可以直接通过可视化界面来管理和监控混沌实验,仅需点一点鼠标就能够定义混沌实验的范围、指定混沌注入的类型、定义调度规则,以及在界面上获取到混沌实验的结果等。

image.png-592.5kB

1.4 安全保障

Chaos Mesh 通过 Kubernetes 原生的 RBAC(基于角色的权限控制)功能对权限进行管理。

用户可以根据实际的权限需求自由地创建多种 Role,然后绑定到用户名 Service Account 上,最后生成 Service Account 对应的 Token。用户使用该 Token 登陆 Dashboard,只能在该 Service Account 允许的权限范围内进行 Chaos 实验。

此外 Chaos Mesh 还支持通过设置 Namespace Annotation 的方式开启特定 Namespace 下混沌实验的权限,进一步保障混沌实验的可控性。

2、使用 Helm 安装 Chaos Mesh

2.1 环境准备

在此之前,请先确保环境中已经部署 Kubernetes 集群、安装helm

主机名称 物理IP 服务器版本 k8s版本 Helm 版本 Chaos Mesh 版本
master 172.16.20.10 Centos7.9 v1.31 v3.16.2 v2.7.0
worker 172.16.20.11 Centos7.9 v1.31 v3.16.2 v2.7.0

2.2 添加 Chaos Mesh 仓库

[root@master ~]# helm repo add chaos-mesh https://charts.chaos-mesh.org

2.3 查看可以安装的 Chaos Mesh 版本

[root@master ~]# helm search repo chaos-mesh
NAME                 	CHART VERSION	APP VERSION	DESCRIPTION                                       
chaos-mesh/chaos-mesh	2.7.0        	2.7.0      	Chaos Mesh is a cloud-native Chaos Engineering ...

# 上述命令会输出最新发布的 chart,如需安装历史版本,请执行如下命令查看所有的版本:
helm search repo chaos-mesh -l

2.4 创建安装 Chaos Mesh 的命名空间

推荐将 Chaos Mesh 安装在 chaos-mesh 命名空间下,也可以指定任意命名空间安装 Chaos Mesh:

[root@master ~]# kubectl create ns chaos-mesh

2.5 使用 Helm 安装 Chaos Mesh

[root@master ~]# helm install chaos-mesh chaos-mesh/chaos-mesh -n=chaos-mesh --set chaosDaemon.runtime=crio --set chaosDaemon.socketPath=/var/run/crio/crio.sock --set controllerManager.replicaCount=1 --version 2.7.0

# 可以通过 --set controllerManager.replicaCount=1 来将控制器管理器减少到一个副本

2.6 验证安装

[root@master ~]# kubectl get pod -n chaos-mesh
NAME                                        READY   STATUS    RESTARTS   AGE
chaos-controller-manager-66b9fcf4df-h5j2z   1/1     Running   0          5m6s
chaos-daemon-gwggl                          1/1     Running   0          5m6s
chaos-dashboard-5795fbfc4d-b4wg5            1/1     Running   0          5m6s
chaos-dns-server-fb4794c4b-6q58c            1/1     Running   0          5m6s

# 如要升级 Chaos Mesh,请执行如下命令:
helm upgrade chaos-mesh chaos-mesh/chaos-mesh

3、Chaos Mesh图形界面的访问

3.1 配置端口转发

# 获取 Chaos mesh Dashbaord 上的容器端口
[root@master ~]# kubectl get deploy chaos-dashboard -n chaos-mesh -o=jsonpath="{.spec.template.spec.containers[0].ports[0].containerPort}{'\n'}"
2333

# 然后紧接着我们把本地IP端口转发到 Pod 上的端口
[root@master ~]# kubectl port-forward -n chaos-mesh chaos-dashboard-5795fbfc4d-b4wg5 --address 172.16.20.10 8888:2333

3.2 访问图形界面

image.png-371.8kB

3.3 创建用户并绑定权限

可以直接通过 Chaos Mesh Dashboard 界面创建用户并绑定权限。在访问 Dashboard 时会有登录窗口弹出,点击这里生成

image.png-279.5kB

点击后,弹出的窗口如下所示:

image.png-297.5kB

需在弹出的窗口上执行如下操作

3.3.1 选择权限范围

如要获取整个 Kubernetes 混沌实验的相应权限,勾选集群范围方框。如果在命名空间下拉选项中指定了 namespace,则只获取该 namespace 下的权限

3.3.2 选择角色

目前 Chaos Mesh 提供了以下角色:

  • Manager:拥有混沌实验的创建、查看、更新、删除等所有权限
  • Viewer:只拥有混沌实验的查看权限

3.3.3 生成 RBAC 配置

在确定了所创建权限的范围和角色后,Dashboard 页面上会显示对应的 RBAC 配置。例如, default namespace 下 Manager 角色的 RBAC 配置如下所示:

[root@master ~]# vim rbac.yaml
[root@master ~]# cat rbac.yaml
kind: ServiceAccount
apiVersion: v1
metadata:
  namespace: default
  name: account-cluster-manager-kczxl

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: role-cluster-manager-kczxl
rules:
- apiGroups: [""]
  resources: ["pods", "namespaces"]
  verbs: ["get", "watch", "list"]
- apiGroups: ["chaos-mesh.org"]
  resources: [ "*" ]
  verbs: ["get", "list", "watch", "create", "delete", "patch", "update"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: bind-cluster-manager-kczxl
subjects:
- kind: ServiceAccount
  name: account-cluster-manager-kczxl
  namespace: default
roleRef:
  kind: ClusterRole
  name: role-cluster-manager-kczxl
  apiGroup: rbac.authorization.k8s.io

3.3.4 创建用户并绑定权限

[root@master ~]# kubectl apply -f rbac.yaml

3.3.5 生成令牌

# 如果使用的是 Kubernetes 1.24+,则需要手动创建令牌:
[root@master ~]# kubectl create token account-cluster-manager-kczxl
eyJhbGciOiJSUzI1NiIsImtpZCI6InJmNk5pcWlWcmc2VV9sSjhFVjVRR2t5MU8wNWFwVTlYTkhadlNDazhNbjQifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzMxNTAyOTE1LCJpYXQiOjE3MzE0OTkzMTUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiOGU3NWRlMjItYThkYi00NTEyLTg1NTMtNDExMDUxOWRmNjI4Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFjY291bnQtZGVmYXVsdC1tYW5hZ2VyLXNxcnl5IiwidWlkIjoiNjRiMWRmZjktMGJjZS00MmQ3LWE3MjctMDA3ZWM2Njg1OTFkIn19LCJuYmYiOjE3MzE0OTkzMTUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmFjY291bnQtZGVmYXVsdC1tYW5hZ2VyLXNxcnl5In0.NZYunTjuS4lRNfUxMGNTU_uqN81-BhHhj--Bi11GHQfmd66LjWYJAxZPvEVoUDRQvMMTiHivi36G2eQc9mxxjc9W4TuEFCD6pswx_NaOFZPCuH83fA0scd5po3LfAGyEryC8FmRVbEdmViaa52LYEVmLbrUrFv4KmMOBmFr5qQjzaXzQuX_FiM2glPETRcoBdjvsUgZxB0eDbAwhb9Yt2zXt0_Ayis3rjXc-JerRse2-egCPQ_Ls6dpjLrowsgDLcNG8WwGJh9qHs1Ay_dYPetZpU1eknCwaW7l-8BNVevbEddlRl-VwPdj7yQxNxJECIPm-79I_aV1X2qB0iFewlQ

3.3.6 使用创建的用户登录 Chaos Mesh

点击 Dashboard 令牌辅助生成器窗口上的关闭,返回到登录窗口。在令牌输入框中输入上一步复制的 token 数据,并在名称输入框中给该令牌输入一个有意义的名称,建议使用权限的范围和角色,例如 default-manager。输入完成后,点击提交进行登录:

image.png-472.7kB

3.3.7 可以在设置里调整为中文

image.png-411.4kB

4、混沌实验入门介绍

4.1 准备工作

# 创建一个测试的空间
[root@master ~]# kubectl create ns ceshi

# 创建一个nginx-pod用作与测试
[root@master ~]# vim nginx.yaml
[root@master ~]# cat nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: ceshi
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

[root@master ~]# kubectl apply -f nginx.yaml

# 查看
[root@master ~]# kubectl get pod -n ceshi
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          70s

4.2 打开 Chaos Dashboard

image.png-276kB

4.3 设置工作流基本信息

image.png-79.2kB

4.4 配置工作流节点

4.4.1 根据需求选择选择任务类型(本次示例任务类型为“单一”)

image.png-145.1kB

4.4.2 填写实验信息

image.png-294.7kB

image.png-255.8kB

image.png-165.1kB

4.5 提交工作流

可以先在预览查看工作流定义。确认无误后,点击提交工作流按钮创建工作流

image.png-175.9kB

apiVersion: chaos-mesh.org/v1alpha1
kind: Workflow
metadata:
  name: simple-workflow
  namespace: default
spec:
  entry: entry
  templates:
    - name: entry
      templateType: Serial
      deadline: 300s
      children:
        - kill-nginx
    - name: kill-nginx
      templateType: PodChaos
      deadline: 120s
      podChaos:
        selector:
          namespaces:
            - ceshi
        mode: all
        action: pod-kill

4.6 验证故障注入结果

image.png-135.8kB

# 故障注入结果
[root@master ~]# kubectl get pod -n ceshi
No resources found in ceshi namespace.

标签:混沌,Chaos,mesh,chaos,Mesh,master
From: https://www.cnblogs.com/ywb123/p/18548519

相关文章

  • ServiceMesh 4:实现流量染色和分级发布
    1什么是流量染色在复杂的生产场景中,经常会有同一个服务中,存在多个版本长期共存的需求。为了让不同的用户在不一样的版本中使用,就需要对用户的请求进行采样和染色,打上不同的标识。这样的目的有几个:支撑分级发布,避免全量发布时可能遇到的大规模风险,如系统崩溃、用户流失。支持......
  • HyperWorks的shrink warp meshing
    在HyperWorks中,针对某些具有复杂几何特征的零部件的网格剖分,AltairHyperMesh向用户提供了一种名为ShrinkWarpMeshing的技术,快捷高效地完成有限元模型前处理工作。例如在车辆碰撞分析研究中,用户可以使用ShrinkWarpMeshing技术快速构建诸如传动系统等(具有复杂几何特征且非......
  • HyperWorks的Loose Shrink Warp Mesh
    我们希望用户通过对比学习的方式,研究LooseShrinkWarpMesh和TightShrinkWarpMesh二者的技术细节及其区别。LooseShrinkWarpMesh和TightShrinkWarpMesh二者并不是基于所采用单元尺寸的大小不同而分类的,而是由于此二者在网格剖分策略上的不同而有所区别。在本节,我......
  • Unity的SkinnedMeshRenderer性能优化
    Unity支持两种主要的Skinning技术在Unity中,Skinning主要指的是角色的蒙皮过程,这是3D动画中的一个关键步骤,用于将3D模型的网格(皮肤)附着到骨骼上,使得模型可以根据骨骼的动作进行逼真的变形。Unity支持两种主要的Skinning技术:CPUSkinning和GPUSkinning。1.CPUSkinning......
  • hypermesh画网格
    12 3    4  5    6删除2D面    7仅显示3D网格    8创建材料  创建属性 切换到下一个部件  添加固定约束   保存为bat格式。 ......
  • Altair官方文档——HyperMesh的使用与帮助
    1.1.3启动HyperMesh(1)OnPC•从起始菜单,选择AllPrograms>AltairHyperWorks(version)>HyperMeshDesktop。•右击上述程序创建软件启动快捷方式,点击快捷方式。(2)OnUNIX•在命令窗口点击<installdirectory>/scripts/hm。•设置软件别名。(3)OnMacOSX......
  • Mesh Renderer
    网格渲染器(MeshRenderer)网格渲染器从网格过滤器(MeshFilter)获取几何体,然后在游戏对象的变换组件所定义的位置渲染该几何体。MaterialsMaterials部分列出了MeshRenderer当前使用的所有材质。从3D建模软件导入的网格可以使用多种材质,而每个子网格使用列表中的一种材......
  • Altair官方文档——HyperMesh模型管理
    1.4模型管理在HyperMesh中创建一个有效的求解输入文件时,模型管理功能是非常必要的。本节将介绍基本的模型管理方法,如单元和载荷归类、集合组装、重命名、删除、排序以及重新编号等。本节将学习如何:创建几何和组件归类。单元归类。组件重命名。识别和删除空组件。删除所有......
  • HyperMesh打开保存文件与面板功能使用
    打开和保存文件在HyperMesh中,打开和保存文件是最常用的命令。本节介绍HyperMesh打开和保存文件的多种方式。后续的练习中假定用户已经熟练使用HyperMesh进行文件打开和保存操作。本节将学习:  -打开HyperMesh文件。-在当前HyperMesh窗口中导入文件。-保存Hyper......
  • CAE教程:HyperMesh概述与有限元分析简介
    1.1HyperMesh概述本节将介绍有限单元法基本原理,HyperMesh软件基本功能及界面介绍,获取在线帮助等内容。1.1.1有限元分析方法简介有限单元法(FEM)是一种可以精确预测复杂结构在外界载荷作用下响应的方法,该数值方法起源于上世纪50年代。在有限单元法出现之前,验证设计方案或评......