카오스 엔지니어링 도구를 활용하여 실제 운영 환경의 안정성을 확보하는 방법에 대해 알아봅시다.
카오스 엔지니어링은 시스템이나 애플리케이션에 대한 실험을 통해 시스템의 취약점과 한계점을 발견하는 것을 목표로 합니다. 이는 개발 과정에서 미처 예상하지 못했던 문제들을 드러낼 수 있습니다. 고의적인 오류 발생을 통해 시스템의 취약점을 파악하고 개선함으로써 시스템과 애플리케이션의 복원력을 향상시킬 수 있습니다.
Netflix, LinkedIn, Facebook과 같은 대규모 조직들은 마이크로서비스 아키텍처와 분산 시스템을 더욱 심층적으로 이해하기 위해 카오스 엔지니어링을 적극적으로 활용합니다. 이를 통해 실제 사용자 불만이 발생하기 전에 새로운 문제점을 식별하고 신속하게 해결함으로써 서비스를 개선하고 있습니다. 이러한 접근 방식은 수백만 명의 사용자에게 서비스를 제공하는 동시에 생산성을 높이고 운영 비용을 절감하는 데 기여합니다 🤑.
카오스 엔지니어링의 주요 이점:
- 핵심적인 문제점을 조기에 발견하여 수익 손실을 최소화
- 시스템 또는 애플리케이션 장애 발생 빈도 감소
- 서비스 중단 감소 및 서비스 가용성 향상으로 사용자 경험 개선
- 시스템에 대한 이해도를 높이고 운영 자신감 확보
현재 운영 시스템의 안정성에 대해 얼마나 확신하고 계십니까? 실제 재난 상황에 대한 대비가 충분하다고 생각하십니까?
다음은 널리 사용되는 카오스 테스팅 도구들을 살펴보고 함께 알아보겠습니다.
카오스 메시
카오스 메쉬는 Kubernetes 환경에서 다양한 계층에 걸쳐 결함을 주입하는 카오스 엔지니어링 관리 솔루션입니다. 여기에는 파드, 네트워크, 시스템 I/O 및 커널 등이 포함됩니다. Chaos Mesh는 Kubernetes 파드를 자동 종료하거나 지연 시간을 시뮬레이션하는 기능을 제공합니다. 파드 간 통신을 방해하거나 읽기/쓰기 오류를 모의 실험할 수 있습니다. 실험에 대한 규칙 설정과 범위 정의를 지원하며, 이러한 실험은 YAML 파일을 통해 지정됩니다.
카오스 메쉬는 실험 분석 결과를 제공하는 대시보드를 포함하고 있습니다. Kubernetes 환경 위에서 실행되며 대부분의 클라우드 플랫폼을 지원합니다. 오픈 소스 프로젝트로 최근 CNCF 샌드박스 프로젝트로 선정되었습니다. 카오스 엔지니어링 원칙을 기반으로 Chaos Mesh를 DevOps 워크플로에 통합하여 보다 탄력적인 애플리케이션을 구축할 수 있습니다.
카오스 메쉬의 주요 기능:
- Kubernetes 클러스터에 배포 로직 수정 없이 간편하게 배포 가능
- 배포에 필요한 고유 종속성 없음
- CustomResourceDefinitions(CRD)를 사용하여 혼돈 객체 정의
- 모든 실험을 추적할 수 있는 대시보드 제공
카오스 툴킷은 카오스 엔지니어링 실험 자동화를 위한 간단한 오픈 소스 도구입니다.

AWS, Google Cloud, Slack, Prometheus 등을 지원하는 드라이버 또는 플러그인 세트를 활용하여 Chaos ToolKit을 시스템에 통합할 수 있습니다.

카오스 툴킷의 주요 기능:
- 벤더나 기술에 제약 없이 카오스 실험을 생성할 수 있는 선언적 Open API 제공
- 자동화를 위해 CICD 파이프라인에 간편하게 통합 가능
- 카오스IQ를 통해 상업 및 기업 지원 제공
카오스큐브
이름에서 알 수 있듯이 Kubernetes 환경에 특화된 도구입니다.
카오스큐브는 Kubernetes 클러스터에서 임의의 파드를 주기적으로 종료하는 오픈 소스 카오스 도구입니다. 파드 실패 시 시스템이 어떻게 반응하는지 파악하는 데 도움이 됩니다. 기본적으로 모든 네임스페이스에서 10분마다 파드를 종료하며, 네임스페이스, 레이블, 주석 등을 활용하여 특정 파드를 대상으로 필터링할 수 있습니다. Chaoskube는 간편하게 설치하여 사용할 수 있습니다.

카오스 몽키
카오스 몽키는 클라우드 시스템의 복원력을 확인하기 위해 의도적으로 장애를 생성하는 도구입니다. Netflix는 AWS 인프라의 복원력 및 복구 능력을 테스트하기 위해 이를 개발했습니다. 카오스 몽키라는 이름은 마치 무장한 원숭이가 무작위로 파괴를 일으키듯 시스템에 장애를 유발하여 테스트한다는 의미에서 유래되었습니다.
카오스 몽키는 새로운 엔지니어링 접근 방식인 카오스 엔지니어링의 탄생에 중요한 역할을 했습니다. 갑작스러운 대규모 장애를 피하기 위해서는 반복적인 소규모 장애를 통해 시스템을 개선해야 한다는 원칙을 강조합니다.

카오스 몽키의 주요 기능:
- 무작위 인스턴스 실패에 대한 대비를 지원
- 예상치 못한 장애에 대한 이중화 구성 권장
- Spinnaker를 사용하여 클라우드 간 호환성 활성화
- 장애 시뮬레이션을 위한 구성 가능한 일정 제공
- 주지사를 통합하여 카오스 몽키에 새로운 종속성을 추가

시미
시미는 .NET용 Polly 복원 프로젝트와 통합되는 결함 주입 카오스 도구입니다. Polly를 통해 코드를 실행하면서 카오스 주입 정책을 설정할 수 있습니다. 예외를 주입하는 예외 정책, 새로운 동작을 주입하는 동작 정책 등 다양한 정책을 제공하며, 이러한 정책은 무작위로 동작을 주입하도록 설계되었습니다.

시미의 주요 기능:
- 혼돈 주입을 위한 Monkey 정책 또는 Chaos 정책 제공
- 모든 종속성 실패를 쉽게 테스트
- 운영 모델을 빠르게 복구하고 장애 영향을 제어
- 실제 운영 환경에 적용 가능
- 글로벌 구성으로 인한 장애와 같은 외부 요인에 기반하여 장애 정의 가능
피스톨
피스톨은 클라우드 네이티브 환경에서 결함 주입을 수행하는 도구입니다. Kubernetes 운영자를 통해 ETCD의 이벤트를 모니터링합니다. 결함 주입 작업이 실행되면 운영자는 파드를 생성하고 일부 Ansible 컬렉션을 실행합니다. 따라서 개발자가 직접 작업을 작성할 필요가 없습니다.
피스톨은 시스템 테스트를 위해 미리 정의된 작업을 제공하며, 개발자는 GoLang과 Python을 사용하여 새로운 작업을 생성할 수도 있습니다.
모든 작업 결과를 요약하여 볼 수 있는 지속적인 통합 대시보드를 제공합니다. 피스톨은 로컬에서 실행하거나 도커 이미지를 사용하여 컨테이너에 배포할 수 있습니다. 웹 UI와 CLI 두 가지 인터페이스를 제공하며, 일반적으로 웹 UI가 더 편리합니다.

먹시
먹시는 실제 분산 시스템 오류에 대한 복원력과 내결함성을 테스트하기 위한 프록시 도구입니다. 전송 수준(4계층), TCP 세션 수준(5계층), HTTP 프로토콜 수준(7계층)을 변조할 수 있습니다.

먹시의 주요 기능:
- 모듈식 구조와 뛰어난 확장성
- 공식 도커 컨테이너 제공
- 설치가 간편하고 종속성 불필요
- 복원력 지속적 테스트에 최적화
- 분산 시스템 및 모바일 장치에서 발생할 수 있는 네트워크 연결 문제 시뮬레이션
품바
품바는 도커 컨테이너에 대한 카오스 테스트를 수행하는 명령줄 도구입니다. 품바를 사용하면 의도적으로 애플리케이션의 도커 컨테이너를 충돌시켜 시스템 반응을 확인할 수 있습니다. CPU, 메모리, 파일 시스템, I/O 등과 같은 컨테이너 리소스에 대한 스트레스 테스트도 지원합니다.
Kubernetes 클러스터에서도 품바를 실행할 수 있습니다. Kubernetes 노드에 품바를 배포하려면 DaemonSets를 사용해야 합니다. 여러 품바 컨테이너를 동일한 DaemonSet에서 실행하여 여러 품바 명령을 수행할 수 있습니다.

카오스블레이드
카오스블레이드는 알리바바의 시스템에 실험을 주입하는 오픈 소스 도구입니다. 지난 10년 동안 알리바바가 겪었던 다양한 장애들을 테스트하고 이를 피하기 위한 모범 사례를 적용합니다. 분산 시스템의 내결함성을 확인하기 위해 카오스 엔지니어링 원칙을 준수합니다.

카오스블레이드의 주요 기능:
- CPU, 네트워크, 메모리, 디스크 등 다양한 리소스에 대한 실험 시나리오 제공
- Kubernetes 플랫폼의 노드, 네트워크 및 파드에 대한 실험적 시나리오 제공
- 실험 실행을 위한 사용하기 쉬운 CLI 명령 제공
리트머스
리트머스는 클라우드 네이티브 카오스 엔지니어링 원칙을 따릅니다. Kubernetes 시스템 및 Kubernetes에서 실행되는 애플리케이션의 취약점을 찾아내는 데 필요한 완벽한 프레임워크를 제공하는 것이 리트머스 도구의 목표입니다.
리트머스는 카오스 연산자와 관련 CRD(CustomResourceDefinitions)를 통해 플러그 앤 플레이 기능을 제공합니다. 카오스 로직을 도커 이미지에 넣고 리트머스 프레임워크 내에서 CRD를 사용하여 오케스트레이션하는 방식입니다.

리트머스의 주요 특징:
- 사이트 안정성 엔지니어 및 개발자가 Kubernetes 시스템의 취약점을 찾는 데 기여
- 즉시 사용 가능한 일반 실험 제공
- 카오스 워크플로 관리를 위한 Chaos API 제공
- Litmus SDK는 Go, Python 및 Ansible을 지원하여 고유한 실험 생성 가능
그렘린
그렘린은 엔지니어가 더욱 탄력적인 소프트웨어를 구축할 수 있도록 지원합니다. 카오스 엔지니어링 실험을 안전하고 간편하게 수행할 수 있는 플랫폼을 제공합니다.

공용 클라우드든 자체 데이터 센터든 상관없이 Gremlin을 사용하여 호스트 또는 컨테이너에 오류를 신중하게 주입할 수 있습니다.

그렘린의 주요 기능:
- 호스트 또는 컨테이너에 장애 주입을 위한 경량 에이전트 설치
- 10개 이상의 다양한 인프라 공격 모드 제공
- 시스템 시간을 조작하거나 호스트를 종료/재시작하거나 프로세서를 종료할 수 있는 상태 그렘린 기능
- 대기 시간 추가, 패킷 손실 유발 또는 트래픽 삭제와 같은 네트워크 그렘린 기능
- Gremlin의 Alfi 라이브러리 공격은 웹 앱을 통해 구성, 시작 및 중지 가능 (API 또는 CLI 사용)
- 공격 대상 영역을 정확하게 지정 가능
- 모든 공격을 중단하고 시스템을 정상 상태로 복구 가능
스테디빗
스테디빗은 사전 예방적으로 다운타임을 줄이고 시스템 문제에 대한 가시성을 제공하는 것을 목표로 합니다. 인프라 환경이나 SaaS(Cloud as a Service) 환경에서 로컬로 실행할 수 있습니다.

Steadybit 사용 과정은 상황 정의, 실험 시뮬레이션, 실제 운영 환경에서 시뮬레이션 실험 실행, 모든 실험 자동화로 구성됩니다. 시스템에서 지능형 에이전트를 실행하여 잠재적인 문제점과 취약점을 발견하고 여러 시스템과의 간편한 통합을 지원합니다.
결론
카오스 엔지니어링 원칙을 적극적으로 도입하고 위에서 언급한 다양한 도구를 활용하여 실제 운영 환경을 테스트하는 데 주저하지 마십시오. 이러한 도구들은 시스템에서 식별되지 않았던 여러 취약점을 찾아내고 시스템의 전반적인 탄력성을 개선하는 데 크게 기여할 것입니다.