Litmus chaos operator 供 Kubernetes 应用程序开发人员和 SRE(站点可靠性工程师)使用,以受控方式向应用程序和 Kubernetes 基础设施注入混沌。其目标是通过自动化执行混沌实验,让 Kubernetes 上应用程序工作负载的验证与加固变得更加容易。一个简单的混沌注入工作流可以如下所示:
Chaos Operator 提供的优势包括:
Chaos Operator 是一种 Kubernetes Operator,而 Kubernetes Operator 不过是可直接访问 Kubernetes API 的自定义控制器,能够管理某些资源或应用程序的生命周期,同时始终努力确保资源处于“期望状态”。确保这一点的逻辑通常被称为“协调”(reconcile)函数。
Chaos Operator 基于广受欢迎的 Operator-SDK 框架构建,该框架为新的 operator 项目提供 bootstrap 支持,使团队能够专注于业务/运营逻辑。
Litmus Chaos Operator 帮助协调 ChaosEngine 的状态。ChaosEngine 是一种自定义资源,保存着开发人员/DevOps 工程师针对特定无状态/有状态 Kubernetes 部署所指定的混沌意图。该 operator 会在其主资源 ChaosEngine 的增删改查(CRUD)时执行特定动作。operator 还定义了一个辅助资源(engine runner pod),由它创建并管理,以实现协调功能。
ChaosEngine 是定义给定应用程序混沌工作流的核心模式。目前,它定义了以下内容:
ChaosEngine 被引用为辅助(协调)资源的所有者,Kubernetes 的 deletePropagation 机制可确保这些资源在删除 ChaosEngine CR 时也会被移除。
以下是 ChaosEngineSpec 示例,供参考:https://v1-docs.litmuschaos.io/docs/getstarted/#prepare-chaosengine
Litmus Chaos Charts 用于安装“混沌实验包”(Chaos Experiment Bundles),并根据实验的性质进行分类(通用 Kubernetes 混沌、供应商/提供商特定混沌——例如 OpenEBS,或应用特定混沌——如 NuoDB)。它们由保存底层混沌(测试)参数的自定义资源组成,operator 会查询这些参数以执行实验。spec.definition 的 fields 及其对应的 values 用于构建最终运行混沌实验的执行工件(通常是 litmusbook,一种 K8s job 资源)。它还定义了执行实验所需的权限。
以下是 ChaosEngineSpec 示例,供参考:
apiVersion: litmuschaos.io/v1alpha1
description:
message: |
Deletes a pod belonging to a deployment/statefulset/daemonset
kind: ChaosExperiment
metadata:
name: pod-delete
labels:
name: pod-delete
app.kubernetes.io/part-of: litmus
app.kubernetes.io/component: chaosexperiment
app.kubernetes.io/version: latest
spec:
definition:
scope: Namespaced
permissions:
- apiGroups:
- ""
- "apps"
- "batch"
- "litmuschaos.io"
resources:
- "deployments"
- "jobs"
- "pods"
- "configmaps"
- "chaosengines"
- "chaosexperiments"
- "chaosresults"
verbs:
- "create"
- "list"
- "get"
- "patch"
- "update"
- "delete"
image: "litmuschaos/go-runner:latest"
imagePullPolicy: Always
args:
- -c
- ./experiments -name pod-delete
command:
- /bin/bash
env:
- name: TOTAL_CHAOS_DURATION
value: '15'
# Period to wait before/after injection of chaos in sec
- name: RAMP_TIME
value: ''
- name: FORCE
value: 'true'
- name: CHAOS_INTERVAL
value: '5'
## percentage of total pods to target
- name: PODS_AFFECTED_PERC
value: ''
- name: LIB
value: 'litmus'
- name: TARGET_PODS
value: ''
## it defines the sequence of chaos execution for multiple target pods
## supported values: serial, parallel
- name: SEQUENCE
value: 'parallel'
labels:
name: pod-delete
app.kubernetes.io/part-of: litmus
app.kubernetes.io/component: experiment-job
app.kubernetes.io/version: latest
请参阅 LitmusChaos 文档 litmus 文档
你可以通过提交 issue、改进文档、为核心框架和工具做出贡献等方式来参与贡献。
前往贡献指南