菜鸟笔记
提升您的技术认知

混沌工程实践 - LitmusChaos

LitmusChaos介绍

LitmusChaos是一个用于云原生的混沌工程工具集。Litmus提供了在Kubernetes上注入故障演练的工具,以帮助SRE发现部署中的弱点。SRE使用Litmus在模拟环境中运行混沌实验,最终在生产环境中找到bug和漏洞。修复这些弱点可以提高系统的弹性。

架构

Litmus采用云原生的方法来创建、管理和监控混沌演练。使用Kubernetes自定义资源定义(CRD)进行编排,Litmus模块可以分成两部分:

  1. Portal
  2. Agents

Portal 是一组Litmus组件,用作跨云管理混沌实验的控制平面(WebUI),用于协调和观察Agent的混沌实验工作流。

Agent 是一组Litmus组件,包括运行在K8s集群上的混沌实验工作流。
在典型的用户场景中,用户会安装litmus。

在自有集群上安装Portal和Agent。使用Portal用户可以在Agent上创建/调度新的混沌实验工作流,并从Portal上观察结果。用户还可以将更多集群连接到Portal,并将Portal用作跨云管理的单个Window。

Portal Components

  1. Litmus WebUI
    Litmus WebUI提供了web用户界面,用户可以在这里轻松构建和观察混沌实验工作流,webUI也充当了跨云混沌实验控制平面。
  2. Litmus Server
    Litmus服务器充当中间件,用于处理来自用户界面的API请求,将配置和结果详细信息存储到数据库中。它还充当请求之间的通信接口,并将工作流调度到代理。
  3. Workflow
    基于Argo的一个工作流引擎,混沌实验工作流不仅仅是一个简单的混沌实验。它支持用户定义预期结果、观察结果、分析整个系统行为,以及在决策过程中是否需要调整系统以提高弹性。LitmusChaos为典型的开发或操作团队提供了开发、使用和管理混沌实验工作流所必需的基础设施。Litmus的Teaming和GitOps特性大大有助于团队或软件组织内部的混沌工作流管理的协作。
  4. Litmus DB
    Litmus DB充当混沌实验工作流及其结果的存储。

Agent components

  1. Chaos Operator
    Chaos Operator监视ChaosEngine并执行CR中提到的混沌实验。Chaos Operator是命名空间范围的。默认情况下,它在litmus名称空间中运行。实验完成后,Chaos Operator调用Chaos Exporter将混沌实验Metrics导出到Prometheus数据库。
  2. CRDs
    在安装过程中,Kubernetes集群上安装了以下三个CRD。
  • ChaosExperiment
    混沌实验是LitmusChaos体系结构中的基本单元。用户可以选择现成的混沌实验或创建新的混沌实验来构建所需的混沌工作流。
  • ChaosEngine
    将Kubernetes application或Kubernetes node链接到ChaosExperiment的resource。通过LitmusChaos Operator监控该resource,然后调用混沌演练ChaosExperiment。
  • ChaosResult
    保存混沌实验结果的资源。Chaos Exporter读取结果并将Metrics导出到已配置的Prometheus服务器中。
  1. Chaos Probes
    Chaos Probes是可插拔的检查探针,可以在任何混沌实验的ChaosEngine中定义。混沌实验Pod根据它们定义的模式执行这些检查,并将它们的成功作为确定实验结果的必要条件(以及标准的“内置”检查)。
  2. Chaos Exporter
    可以选择将Metrics导出到Prometheus数据库。Chaos Exporter实现了Prometheus metrics endpoint。
  3. Subscriber
    Subscriber是Agent端使用的组件,它与Litmus Server组件交互,获取混沌实验工作流的详细信息,并将结果发送回代理端。

安装

Control Plane安装

Pre-requisites

  1. Kubernetes 1.15 or later.
  2. Persistent volume of 20GB
  3. 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创建混沌演练,步骤如下:

  1. 登录Portal

  2. Workflows页面点击【schedule a workflow】button

  3. 选择cluster,比如Self-Cluster

  4. 选择或者自定义workflow

  5. 根据需要可以编辑yaml file

  6. 设置故障权重

  7. 选择立即执行还是定时执行

  8. 提交workflow

查看混沌演练

  1. 点击workflow页面

  2. 点击具体的workflow

  3. 点击具体节点,可以查看日志