
클라우드 네이티브 워크로드에 카오스 실험을 주입하고, 선언적 CRD를 통해 복원력 테스트와 워크로드 강화를 자동화하는 Kubernetes Operator.
Litmus chaos operator는 Kubernetes 애플리케이션 개발자와 SRE가 관리되는 방식으로 애플리케이션과 Kubernetes 인프라에 카오스를 주입하는 데 사용됩니다. 그 목적은 카오스 실험 실행을 자동화하여 Kubernetes에서 애플리케이션 워크로드의 검증 및 하드닝(강화) 과정을 쉽게 만드는 것입니다. 간단한 카오스 주입 워크플로의 예는 다음과 같습니다:
Chaos Operator가 제공하는 이점은 다음과 같습니다:
Chaos Operator는 Kubernetes API에 직접 액세스할 수 있는 사용자 정의 컨트롤러(custom-controller)에 불과한 Kubernetes Operator입니다. 특정 리소스나 애플리케이션의 수명 주기를 관리하면서 리소스가 항상 "원하는 상태(desired state)"에 있도록 보장합니다. 이를 보장하는 로직은 일반적으로 "reconcile" 함수라고 합니다.
Chaos Operator는 널리 사용되는 Operator-SDK 프레임워크를 기반으로 구축되었습니다. 이 프레임워크는 새로운 Operator 프로젝트를 위한 부트스트랩 지원을 제공하여 팀이 비즈니스/운영 로직에 집중할 수 있게 해줍니다.
Litmus Chaos Operator는 특정 stateless/stateful Kubernetes 배포에 대해 개발자/DevOps 엔지니어가 지정한 카오스 의도를 담고 있는 사용자 정의 리소스인 ChaosEngine의 상태를 reconcile하는 데 도움을 줍니다. Operator는 기본 리소스인 ChaosEngine의 CRUD 시 특정 작업을 수행합니다. 또한 Operator는 reconcile 함수를 구현하기 위해 생성 및 관리되는 보조 리소스(엔진 러너 파드, engine runner pod)를 정의합니다.
ChaosEngine은 주어진 애플리케이션에 대한 카오스 워크플로를 정의하는 핵심 스키마입니다. 현재 다음을 정의합니다:
ChaosEngine은 보조(reconcile) 리소스의 소유자로 참조되며, Kubernetes deletePropagation을 통해 ChaosEngine CR이 삭제될 때 이러한 리소스도 함께 제거되도록 보장합니다.
참고용 샘플 ChaosEngineSpec은 다음과 같습니다: https://v1-docs.litmuschaos.io/docs/getstarted/#prepare-chaosengine
Litmus Chaos Chart는 "카오스 실험 번들(Chaos Experiment Bundles)"을 설치하는 데 사용되며, 실험의 특성에 따라 분류됩니다(일반 Kubernetes 카오스, OpenEBS와 같은 벤더/공급자별 카오스, NuoDB와 같은 애플리케이션별 카오스). 이 차트는 Operator가 실험을 실행하기 위해 조회하는 저수준 카오스(테스트) 매개변수를 담고 있는 사용자 정의 리소스로 구성됩니다. spec.definition의 fields 와 해당 values 는 카오스 실험을 실행하는 최종 실행 아티팩트(일반적으로 K8s Job 리소스인 litmusbook)를 구성하는 데 사용됩니다. 또한 실험을 실행하는 데 필요한 권한도 정의합니다.
참고용 샘플 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 문서를 참조하세요
이슈를 제기하거나, 문서를 개선하거나, 핵심 프레임워크 및 도구에 기여하는 등의 방법으로 기여할 수 있습니다.
기여 가이드를 확인하세요