LitmusChaos介绍
LitmusChaos是一个用于云原生的混沌工程工具集。Litmus提供了在Kubernetes上注入故障演练的工具,以帮助SRE发现部署中的弱点。SRE使用Litmus在模拟环境中运行混沌实验,最终在生产环境中找到bug和漏洞。修复这些弱点可以提高系统的弹性。
架构
Litmus采用云原生的方法来创建、管理和监控混沌演练。使用Kubernetes自定义资源定义(CRD)进行编排,Litmus模块可以分成两部分:
- Portal
- Agents
Portal 是一组Litmus组件,用作跨云管理混沌实验的控制平面(WebUI),用于协调和观察Agent的混沌实验工作流。
Agent 是一组Litmus组件,包括运行在K8s集群上的混沌实验工作流。
在典型的用户场景中,用户会安装litmus。
在自有集群上安装Portal和Agent。使用Portal用户可以在Agent上创建/调度新的混沌实验工作流,并从Portal上观察结果。用户还可以将更多集群连接到Portal,并将Portal用作跨云管理的单个Window。
Portal Components
- Litmus WebUI
Litmus WebUI提供了web用户界面,用户可以在这里轻松构建和观察混沌实验工作流,webUI也充当了跨云混沌实验控制平面。 - Litmus Server
Litmus服务器充当中间件,用于处理来自用户界面的API请求,将配置和结果详细信息存储到数据库中。它还充当请求之间的通信接口,并将工作流调度到代理。 - Workflow
基于Argo的一个工作流引擎,混沌实验工作流不仅仅是一个简单的混沌实验。它支持用户定义预期结果、观察结果、分析整个系统行为,以及在决策过程中是否需要调整系统以提高弹性。LitmusChaos为典型的开发或操作团队提供了开发、使用和管理混沌实验工作流所必需的基础设施。Litmus的Teaming和GitOps特性大大有助于团队或软件组织内部的混沌工作流管理的协作。 - Litmus DB
Litmus DB充当混沌实验工作流及其结果的存储。
Agent components
- Chaos Operator
Chaos Operator监视ChaosEngine并执行CR中提到的混沌实验。Chaos Operator是命名空间范围的。默认情况下,它在litmus名称空间中运行。实验完成后,Chaos Operator调用Chaos Exporter将混沌实验Metrics导出到Prometheus数据库。 - CRDs
在安装过程中,Kubernetes集群上安装了以下三个CRD。
- ChaosExperiment
混沌实验是LitmusChaos体系结构中的基本单元。用户可以选择现成的混沌实验或创建新的混沌实验来构建所需的混沌工作流。 - ChaosEngine
将Kubernetes application或Kubernetes node链接到ChaosExperiment的resource。通过LitmusChaos Operator监控该resource,然后调用混沌演练ChaosExperiment。 - ChaosResult
保存混沌实验结果的资源。Chaos Exporter读取结果并将Metrics导出到已配置的Prometheus服务器中。
- Chaos Probes
Chaos Probes是可插拔的检查探针,可以在任何混沌实验的ChaosEngine中定义。混沌实验Pod根据它们定义的模式执行这些检查,并将它们的成功作为确定实验结果的必要条件(以及标准的“内置”检查)。 - Chaos Exporter
可以选择将Metrics导出到Prometheus数据库。Chaos Exporter实现了Prometheus metrics endpoint。 - Subscriber
Subscriber是Agent端使用的组件,它与Litmus Server组件交互,获取混沌实验工作流的详细信息,并将结果发送回代理端。
安装
Control Plane安装
Pre-requisites
- Kubernetes 1.15 or later.
- Persistent volume of 20GB
- Helm3 or Kubectl
Installation Using helm
kubectl create ns litmus
git clone https://github.com/litmuschaos/litmus-helm
cd litmus-helm
helm install litmuschaos --namespace litmus ./charts/litmus-2-0-0-beta/
Verify your installation
kubectl get pods -n litmus
chaos-litmus-portal-frontend-ff8b554dc-q5rl4 1/1 Running 0 2m6s
chaos-litmus-portal-mongo-6764cfdd59-c9r56 1/1 Running 0 2m6s
chaos-litmus-portal-server-5ffbccbfff-dknv8 2/2 Running 0 2m6s
Setup the Portal
kubectl get svc -n litmus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
chaos-litmus-portal-mongo ClusterIP 10.104.107.117 <none> 27017/TCP 2m
litmusportal-frontend-service NodePort 10.101.81.70 <none> 9091:30385/TCP 2m
litmusportal-server-service NodePort 10.108.151.79 <none> 9002:32456/TCP,9003:31160/TCP 2m
Accessing the Portal
Username: admin
Password: litmus
Agent安装
Litmus包含两种类型的Agent,
- Self Agent
- External Agent
默认情况下,作为Litmus安装的一部分,安装Portal所在的集群被自动注册为Self Cluster。从Portal中可以自动的在Self Cluster中执行混沌实验,并且查看执行结果。
如前所述,Portal是一个跨云混沌实验控制Plane。也就是说,用户可以将多个外部Kubernetes Agent连接到此Portal。连接后,用户可以从Portal管理混沌实验,也就是说,用户可以从Portal将混都实验发送给Agent,并从Portal观察结果。使用命令行实用程序,可以将External Agent连接到Portal。
Requirements
Kubeconfig
Installation
#step1,Download litmusctl
wget https://litmusctl-bucket.s3-eu-west-1.amazonaws.com/litmusctl-xxx-xxx-v0.1.0.tar.gz
#step2,unzip
tar -zxvf litmusctl-<OS>-<ARCH>-<VERSION>.tar.gz
#step3,install litmusctl
sudo mv litmusctl /usr/local/bin/litmusctl
#step4,register
litmusctl agent connect
Connecting LitmusChaos agent
Please enter LitmusChaos details --
Host URL where litmus is installed: http://172.17.0.2:31696/
🤔 Username [admin]: admin
Password:
Login Successful!
Projects List:
1. abc
Select Project: 1
Installation Modes:
1. Cluster
2. Namespace
Select Mode [cluster]: 1
Running prerequisites check....
clusterrole -
clusterrolebinding -
Sufficient permissions. Connecting Agent
Enter the details of the agent ----
🤷 Agent Name: my-agent
Agent Description: This is a new agent.
Platform List
1. AWS
2. GKE
3. Openshift
4. Rancher
5. Others
Select Platform [Others]: 5
Enter the namespace (new or existing) [litmus]: litmus
Enter service account [litmus]: litmus
Summary --------------------------
Agent Name: my-agent
Agent Description: This is a new agent.
Platform Name: Others
Namespace: litmus
Service Account: litmus
Installation Mode: cluster
-------------------------------------
🤷 Do you want to continue with the above details? [Y/N]: Y
Connecting agent to Litmus Portal.
Agents running!!
Agent Connection Successful!!
Litmus agents can be accessed here: http://172.17.0.2:31696/targets
创建混沌演练
通过LitmusChaos Portal创建混沌演练,步骤如下:
-
登录Portal
-
Workflows页面点击【schedule a workflow】button
-
选择cluster,比如Self-Cluster
-
选择或者自定义workflow
-
根据需要可以编辑yaml file
-
设置故障权重
-
选择立即执行还是定时执行
-
提交workflow
查看混沌演练
-
点击workflow页面
-
点击具体的workflow
-
点击具体节点,可以查看日志