前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云TKE-混沌测试 部署chaos-mesh (一)

腾讯云TKE-混沌测试 部署chaos-mesh (一)

原创
作者头像
朱瑞卿
发布2020-11-05 20:49:35
1.9K0
发布2020-11-05 20:49:35
举报
文章被收录于专栏:腾讯云容器专家服务的专栏

背景

在现实生活中, 汽车领域有一套安全, 性能测试平台和机构,在云原生领域PiingCAP公司在2019年12月31日开源了一个云原生的混沌测试平台Chaos MeshChaos Mesh 提供在 Kubernetes 平台上进行混沌测试的能力.在我们排查问题的过程中经常需要模拟各种场景,例如,podkil,网络延迟,丢包, cpu,内存压测,有了这个工具就可以非常方便的模拟各种场景 本篇文章主要给大家介绍下原理,在TKE中如何部署,以及简单的使用。目前支持以下类型的测试:

image.png
image.png

原理

Chaos Mesh 中使用 CRD 来定义 chaos 对象,在 Kubernetes 生态中 CRD 是用来实现自定义资源的成熟方案,又有非常成熟的实现案例和工具集供我们使用,这样我们就可以借助于生态的力量,避免重复造轮子。并且可以更好的融合到 Kubernetes 生态中。

目前在 Chaos Mesh 中设计了三个 CRD 对象,分别是 PodChaos、NetworkChaos 以及 IOChaos,从命名上就可以很容易的区分这几个 CRD 对象分别对应的错误注入类型。

以 PodChaos 为例:

代码语言:txt
复制
spec:
 action: pod-kill
 mode: one
 selector:
   namespaces:
     - tidb-cluster-demo
   labelSelectors:
     "app.kubernetes.io/component": "tikv"
 scheduler:
   cron: "@every 2m"

架构图如下:

image.png
image.png

ChaosMesh 工作原理

image.png
image.png

基本工作流程:

  • Controller-manager 目前 controller-manager 可以分为两部分,一部分 controllers 用于调度和管理 CRD 对象实例,另一部分为 admission-webhooks 动态的给 Pod 注入 sidecar 容器。
  • Chaos-daemon Chaos-daemon 以 daemonset 的方式运行,并具有 Privileged 权限,Chaos-daemon 可以操作具体 Node 节点上网络设备以及 Cgroup 等。
  • Sidecar Sidecar contianer 是一类特殊的容器,由 admission-webhooks 动态的注入到目标 Pod 中,目前在 Chaos Mesh 中实现了 chaosfs sidecar 容器,chaosfs 容器内会运行 fuse-daemon,用来劫持应用容器的 I/O 操作。 整体工作流如下:
  • 用户通过 YAML 文件或是 Kubernetes 客户端往 Kubernetes API Server 创建或更新 Chaos 对象。
  • Chaos-mesh 通过 watch API Server 中的 Chaos 对象创建更新或删除事件,维护具体 Chaos 实验的运行以及生命周期,在这个过程中 controller-manager、chaos-daemon 以及 sidecar 容器协同工作,共同提供错误注入的能力。
  • Admission-webhooks 是用来接收准入请求的 HTTP 回调服务,当收到 Pod 创建请求,会动态修改待创建的 Pod 对象,例如注入 sidecar 容器到 Pod 中。第 3 步也可以发生在第 2 步之前,在应用创建的时候运行.

TKE 中部署Chaos Mesh

首先要拥有一套腾讯云TKE环境, 然后获取到kube-config后通过helm或者shell脚本进行部署.

  1. helm 部署 第一步 添加Chaos Mesh 仓库到helm仓库 helm repo add chaos-mesh https://charts.chaos-mesh.org 成功添加仓库之后, 然后通过命令行查看 helm search repo chaos-mesh

第二步 创建自定义类型

curl -sSL https://mirrors.chaos-mesh.org/v1.0.1/crd.yaml | kubectl apply -f -

第三步 安装Chaos Mesh

kubectl create ns chaos-testing

helm install chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-testing --set dashboard.create=true --set chaosDaemon.hostNetwork=true

注意: 1. dashboard.create=true 开启dashboard, 2. chaosDaemon.hostNetwork=true 如果不开启在执行任务的时候会报tcp连接被拒绝.

  1. shell脚本部署

curl -sSL https://mirrors.chaos-mesh.org/v1.0.1/install.sh | bash -s -- --host-network

  1. 查看pod 状态

kubectl get pods --namespace chaos-testing -l app.kubernetes.io/instance=chaos-mesh

预期输出如下:

代码语言:txt
复制
 ~  kubectl get pods --namespace chaos-testing -l app.kubernetes.io/instance=chaos-mesh                                                         8s  四 11/ 5 12:35:06 2020
NAME                                        READY   STATUS    RESTARTS   AGE
chaos-controller-manager-6f779f755f-kn6tg   1/1     Running   0          52m
chaos-daemon-6rz8m                          1/1     Running   0          52m
chaos-daemon-cgktm                          1/1     Running   0          52m
chaos-daemon-drvhz                          1/1     Running   0          52m
chaos-daemon-llp5h                          1/1     Running   0          52m
chaos-dashboard-86d489c8f-fkt66             1/1     Running   0          52m
 ~ 
  1. 在TKE中开启公网访问用于访问WEB页面
image.png
image.png
image.png
image.png

端口为:2333

测试

访问service 的公网ip:2333 端口:

image.png
image.png
  1. 内存压测案例: 创建实验
    image.png
    image.png

选测命名空间和实例

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

正在执行

image.png
image.png

然后可以在TKE控制台或者命令行进入到pod中查看内存状态。

结束

本片文章简单介绍了chaosmesh在TKE中的部署以及基本使用, 接下来的文章会使用这个工具去模拟场景进行测试介绍。

文中的部分图片和内容参考pingcap公司文档。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 原理
  • TKE 中部署Chaos Mesh
  • 测试
  • 结束
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档