Kubernetes 이야기

Litmus Chaos Engineering - 설치 본문

Kubernetes/일반

Litmus Chaos Engineering - 설치

kmaster 2022. 8. 9. 21:12
반응형

 

Chaos Engineering은 소프트웨어 시스템에 장애를 주입하여 복원력을 테스트하는 메커니즘이다. 카오스 테스트는 실제 오류가 발생할 경우 애플리케이션이나 인프라가 적절하게 반응하는지 확인하기 위해 다양한 오류 시나리오를 시뮬레이션한다.

 

클라우드 네이티브 환경에서 카오스 테스트 시나리오의 예에는 애플리케이션이 실행되는 클러스터 노드에서 파일 시스템 공간 채우기, 포드 또는 노드에서 높은 메모리 또는 CPU 사용량 시뮬레이션, 네트워크 손상 또는 대기 시간 시뮬레이션, 포드 다시 시작, 비정상적으로 종료가 포함될 수 있따.

 

Litmus는 팀이 통제된 방식으로 카오스 테스트를 유도하여 인프라의 약점 및 잠재적 중단을 식별할 수 있도록 하는 오픈 소스 카오스 엔지니어링 플랫폼이다. Litmus는 100% 오픈 소스이며 CNCF 프로젝트이다.

 

Litmus는 사용자 지정 리소스 (CRD)를 통해 선언적 방식으로 혼돈 의도를 정의하는 접근 방식을 채택한다.

 

  • ChaosExperiment - 실험 유형 및 낮은 수준의 실행 세부 정보를 정의한다. 나중에 특정 응용 프로그램에 바인딩할 수 있는 청사진 역할을 한다.
  • ChaosEngine - ChaosExperiment(s)를 특정 응용 프로그램과 연결하기 위한 사용자 대면 카오스 리소스이다. 애플리케이션은 네임스페이스, 레이블 및 유형으로 식별된다. ChaosExperiment 의 매개변수는  이 계층에서 재정의될 수 있다. spec.engineState  가 활성화 되면 카오스 시나리오가 실행되기 시작한다.
  • ChaosResult -  실험 결과를 저장하고 ChaosEngines에 의해 업데이트된다.
  • Workflow - ChaosEngines와 ChaosExperiments를 모두 포함하여 함께 연결된 일련의 실험이다. Litmus ChaosCenter의 핵심 컴포넌트이며 UI를 통해 쉽게 생성할 수 있다. ( Workflow는 argo workflow를 사용한다. )

 

 

회복력의 중요성

출처 : https://docs.litmuschaos.io/docs/introduction/what-is-litmus

 

애플리케이션 복원력은 실제로 애플리케이션 자체보다 기본 스택에 더 많이 의존한다. 애플리케이션이 안정화되면 Kubernetes에서 실행되는 서비스의 복원력이 90% 이상 다른 구성 요소 및 인프라에 의존할 수 있다.

따라서 기본 스택에서 변경 사항이 발생할 때마다 애플리케이션 탄력성을 확인하는 것이 중요하다. 계속 확인하는 것이 핵심이다. "서비스가 오류에 대해 탄력적인지 지속적으로 확인하는" 프로세스를 카오스 엔지니어링이라고 한다.

 

아키텍처

출처 : https://docs.litmuschaos.io/docs/architecture/architecture-summary

Litmus 아키텍처는 두 부분으로 분리될 수 있다.

 

  • 컨트롤 플레인: 웹사이트 기반 Litmus용 포털인 Chaos Center의 기능에 필요한 구성 요소를 포함합니다.
  • 실행 평면: 대상 리소스에 혼돈을 주입하는 데 필요한 구성 요소를 포함합니다.

Chaos Center는 실행 시 대상 리소스에 원하는 카오스 영향을 달성하기 위해 최종 순서로 정의된 카오스 실험 세트인 Chaos Scenarios를 생성, 예약 및 모니터링하는 데 사용할 수 있다. 사용자는 유효한 로그인 자격 증명을 사용하여 Chaos Center에 로그인하고 대화형 웹 UI를 활용하여 인프라의 여러 측면을 대상으로 하는 카오스 시나리오를 정의할 수 있다.

 

사용자가 Chaos Center를 사용하여 Chaos Scenario를 생성하면 실행 평면으로 전달된다.

실행 평면은 카오스 시나리오를 대상 리소스에 주입하는 데 필요한 단계 목록으로 해석한다. 다양한 Kubernetes CR을 사용하여 클라우드 네이티브 환경에서 카오스 엔지니어링을 사용할 수 있다.

 

설치

Litmus 2.11.0 기준으로 설치 전 사전 조건은 아래와 같다.

 

  • Kubernetes 1.17 이상
  • 20GB 영구 볼륨

설치 전 먼저 litmus 에서 사용할 PV를 생성하자.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: litmus-pv
spec:
  capacity:
    storage: 20Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  local:
    path: /data/litmus
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node1

이제 litmus 를 kubectl 로 설치해 보자.

# kubectl apply -f https://litmuschaos.github.io/litmus/2.11.0/litmus-2.11.0.yaml

 

설치 확인

# kubectl get all -n litmus
NAME                                           READY   STATUS    RESTARTS   AGE
pod/litmusportal-auth-server-58f48c659-mjwtm   1/1     Running   0          79s
pod/litmusportal-frontend-5dd575dfb9-bx7qr     1/1     Running   0          79s
pod/litmusportal-server-545b6447bd-9d467       1/1     Running   0          79s
pod/mongo-0                                    1/1     Running   0          79s

NAME                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
service/litmusportal-auth-server-service   NodePort    10.105.141.255   <none>        9003:31410/TCP,3030:31960/TCP   79s
service/litmusportal-frontend-service      NodePort    10.105.121.231   <none>        9091:31633/TCP                  79s
service/litmusportal-server-service        NodePort    10.99.99.19      <none>        9002:30552/TCP,8000:31549/TCP   79s
service/mongo-headless-service             ClusterIP   None             <none>        27017/TCP                       79s
service/mongo-service                      ClusterIP   10.102.232.107   <none>        27017/TCP                       79s

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/litmusportal-auth-server   1/1     1            1           79s
deployment.apps/litmusportal-frontend      1/1     1            1           79s
deployment.apps/litmusportal-server        1/1     1            1           79s

NAME                                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/litmusportal-auth-server-58f48c659   1         1         1       79s
replicaset.apps/litmusportal-frontend-5dd575dfb9     1         1         1       79s
replicaset.apps/litmusportal-server-545b6447bd       1         1         1       79s

NAME                     READY   AGE
statefulset.apps/mongo   1/1     79s

 

ChaosCenter에 접속하기

 

ChaosCenter를 설정하고 로그인하려면 방금 생성한 사용 가능한 litmusportal-frontend-service  서비스의 NodePort로 접근한다.

 

설치 후 기본 ID/Password는 아래와 같다.

Username : admin
Password : litmus

ID/Password를 입력하면 Password 변경 화면으로 이동한다.

새로운 패스워드 입력을 하거나 Skip 후에는 아래의 화면으로 로그인된다.

 

테스트

이번 테스트할 카오스 시나리오에서는 Podtato Head 라는 샘플 마이크로 서비스 애플리케이션에서 포드 삭제 오류를 실행한다. 그리고 실험에 대한 시각화 및 분석을 어떻게 하는지 살펴보자. ( 아래 예제는 Workflow 를 실행하게 된다. )

 

1. Chaos Scenarios 생성

2. Chaos Delegate를 선택

3. 사전 정의된 카오스 시나리오 목록에서 podtato-head 를 선택

Next 저장 후 Settings는 기본값으로 설정 후 다음으로 이동하자.

 

4. 실행하려는 Litmus Chaos Scenario의 시각화를 조회한다. 이 단계를 통해 필요한 경우 YAML/튜너블을 편집하거나 수정할 수도 있다. 지금은 기본 구성을 그대로 사용해 보자.

5. 슬라이더를 사용하여 카오스 시나리오의 일부인 카오스 실험에 가중치를 할당한다. 이러한 가중치 는 카오스 시나리오에 대한 회복력 점수 계산에 영향을 준다.

6. 스케쥴 선택

"Schedule now" 를 선택하여 즉시 실행하도록 예약하자.

 

7. 확인

마지막 확인 후 [Finish] 버튼을 클릭하여 Chos Injection을 시작한다.

시작을 하게 되면 아래와 같은 진행 상황 화면을 조회할 수 있다.

8. 시각화 및 분석

Podtato-Head Chaos Scenario의 현재 진행 상황을 확인하려면 Litmus Chaos Scenarios 탭에서 Chaos 시나리오의 상태를 확인하면 된다.

 

실행중인 상태를 조회해 보자. 배포된 앱을 삭제하는 시나리오가 보인다.

 

시나리오 테스트가 완료되면 카오스 결과 탭을 클릭 하여 정상 상태 가설 제약 조건(포드 삭제 기간을 통한 podtato-head 웹사이트 가용성) 및 실험 평결의 성공/실패에 대한 세부 정보를 조회한다.

 

litmus 에서 제공하는 간단한 예제를 테스트해 보았는데 다음에 다양한 실험을 테스트 해 보자.

반응형

'Kubernetes > 일반' 카테고리의 다른 글

Configmap/Secret Reloader  (0) 2022.08.11
Nginx Ingress annotations  (0) 2022.08.10
Nats - 오픈 소스 메시징 시스템  (0) 2022.07.27
KubeVirt로 kubernetes에 Windows VM 생성  (0) 2022.06.10
Pod Disruption Budget  (0) 2022.05.19
Comments