ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Litmus Chaos 로컬 개발 환경 설정
    카테고리 없음 2024. 8. 16. 20:28
    오픈소스 컨트리뷰션 2주차

     

     

    Litmus Chaos에는 크게 두 가지로 나뉜다.

    • Control Plane : Chaos Scenario를 만들고 모니터링하는 UI (=Chaos Center)
    • Execution Plane : 실제로 Fault를 주입

    Litmus Chaos Architecture summary

     

    여기서 Control Plane에 대한 로컬 환경 설정을 진행하였다.

     

    • Frontend
    • Backend
      • Auth Server
      • GraphQL Server
      • MongoDB

    Frontend

    프론트엔드 소스 위치는 /litmus/chaoscenter/web 에 위치해 있다.

    해당 디렉토리로 이동하고 yarn generate-certificate를 이용하여 인증서와 개인키를 만든다.

    로컬 개발환경에서 https를 적용하기 위해 설정하는 것 같다.

    cd litmus/chaoscenter/web
    
    yarn generate-certificate
    yarn dev

     

     

    이렇게 표시되면 성공!!

     

     

     

    Auth Server

    Auth Server는 User와 Project 관련 내용이 포함되어 있다.

    Auth Server를 실행하면 다음과 같은 로그를 볼 수 있는데 HTTP REST API Server와 gRPC Server가 동시에 실행된다.  

     

    REST API Server는 UI와 통신하고 gRPC Server는 GraphQL Server와 통신한다.

    {... "msg":"Listening and serving HTTP on :3000"}
    {... "msg":"Listening and serving gRPC on :3030"}

     

     

    chaoscenter/authentication/pkg/utils/configs.go에서 환경변수 목록을 확인할 수 있으며 

    goland 기준으로 Edit Configuration > Configuration > Enviornment에 해당 변수들을 선언하면 된다.

     

    * 아래 환경변수 목록은 실행을 하기 위한 최소한의 목록이며 추후 수정될 수 있음

    더보기

     

    KEY VALUE
    ADMIN_PASSWORD litmus
    ADMIN_USERNAME admin
    DB_PASSWORD 1234
    DB_SERVER mongodb://localhost:27016/litmus
    DB_USER root
    GRPC_PORT 3030
    LITMUS_GQL_GRPC_PORT 8000
    REST_PORT 3000

     

    Swagger

    Swagger는 다른 프레임워크들에서 사용하는 Swagger와는 조금 실행방식이 달랐다. 

    FastAPI나 Spring에서 Swagger를 사용할 때는 코드 내부에 Swagger용 Annotation을 선언하고 자동으로 실행이 된 반면,

    gin에서는 yaml파일과 go파일을 만들고 이 파일로 로컬서버를 실행하는 방식인 것 같았다.

     

    // swago, go-swagger 설치
    go install github.com/swaggo/swag/cmd/swag@latest
    go install github.com/go-swagger/go-swagger/cmd/swagger@latest
    
    // swagger 문서 생성
    swag init
    
    // swagger 서버 실행
    swagger serve swagger.yaml

     

     

    이렇게 표시되면 성공!!

     

     

     

    GraphQL Server

    Auth Server와 마찬가지로 gRPC Server와 GraphQL Server가 동시에 실행된다.

     

    Auth Server의 환경변수들은 대략적으로 이해가 갔지만 GraphQL Server 환경변수들은 이해하기 힘들었다..

    추후 공부가 더 필요할 것 같다..

     

    * 아래 환경변수 목록은 실행을 하기 위한 최소한의 목록이며 추후 수정될 수 있음

    더보기

     

    KEY VALUE
    ARGO_WORKFLOW_CONTROLLER_IMAGE argoproj/workflow-controller:v2.11.0
    ARGO_WORKFLOW_EXECUTOR_IMAGE argoproj/argoexec:v2.11.0
    CONTAINER_RUNTIME_EXECUTOR k8sapi
    DB_PASSWORD 1234
    DB_SERVER mongodb://localhost:27016
    DB_USER root
    DEFAULT_HUB_BRANCH_NAME master
    EVENT_TRACKER_IMAGE litmuschaos/litmusportal-event-tracker:ci
    GRPC_PORT 8000
    INFRA_COMPATIBLE_VERSIONS '["0.2.0", "0.1.0","ci"]'
    INFRA_DEPLOYMENTS "[\"app\=chaos-exporter\", \"name\=chaos-operator\", \"app\=event-tracker\",\"app\=workflow-controller\"]"
    LITMUS_AUTH_GRPC_PORT 3030
    LITMUS_CHAOS_EXPORTER_IMAGE litmuschaos/chaos-exporter:3.0.0
    LITMUS_CHAOS_OPERATOR_IMAGE litmuschaos/chaos-operator:3.0.0
    LITMUS_CHAOS_RUNNER_IMAGE litmuschaos/chaos-runner:3.0.0
    REST_PORT 8080
    SUBSCRIBER_IMAGE litmuschaos/litmusportal-subscriber:ci

     

     

    MongoDB

    GraphQL Server까지 세팅을 마치고 다 끝났구나 싶었는데 자꾸 GraphQL Server가 죽어서 확인해 보니

    아래와 같은 에러가 로그에 찍혔다.

     

    $chageStream이라는 기능을 이용하기 위해서는 MongoDB를 Replica set으로 구성해야 한다는 오류였다. 

    The $changeStream stage is only supported on replica sets

     

     

    MongoDB Replica Set 구성은 아래 블로그에 자세하게 나와있어 무사히 적용했다!!

     

    [MongoDB] replica sets 설정

    만들고 있는 어플 기능 중에 실시간으로 데이터의 변경 사항을 뿌려줘야 하는 기능이 필요한데, push & pull 방식보다는 DB의 실시간 변경 사항을 추적하여 ws으로 뿌려주는 게 낫겠다 싶어서, 어떻

    til-choonham.tistory.com

     

     

    최종적으로 아래와 같은 그림이 된다

     

     

     

    Ref. 

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

    https://github.com/litmuschaos/litmus/wiki/ChaosCenter-Development-Guide

Designed by Tistory.