[kubernetes] 카오스 엔지니어링-1

Deagwon Bu·2022년 7월 18일
0

kubernetes

목록 보기
1/2

- Netflix에서 사용하는 Chaos Monkey의 로고

techtarget에서 Ben Lutkevich가 소개하는 카오스 엔지니어링에 대해 정리하였다. 이번 포스트에서는 쿠버네티스 클러스터에 카오스 엔지니어링을 적용하는 방법은 다루지 않는다. 카오스 엔지니어링이 무엇인지 알아보고, 다음 포스트에서 쿠버네티스에 적용하는 방법을 다루겠다.

1. 카오스 엔지니어링 이란?

테스트 환경 혹은 개발 환경은 실제 배포 환경과는 여러 가지 차이점이 있다. 이로인해 배포 환경이 아닌 다른 환경에서 테스트를 할 경우, 실제로 발생할 수 있는 모든 문제를 적절히 테스트 할 수 없다.

몇몇 기업들은 운영 상황에서 발생할 수 있는 문제를 효과적으로 파악하기 위해서 운영 테스트를 도입하였는데, 운영 테스트의 대표적인 방법으로 카오스 엔지니어링이 있다.

카오스 엔지니어링(Chaos Engineering)이란 분산 컴퓨터 시스템이 예상치 못한 스트레스를 견딜 수 있는지 테스트하는 과정을 말한다.

무작위로 예상치 못한 작업을 반복적으로 요청하면서, 시스템이 가지고 있는 약점을 파악하는 것이 목적이다.

하나의 네트워크 혹은 공유된 자원으로 묶여있는 시스템을 분산 시스템이라고 부르는데, 복잡한 분산 시스템에서는 예상하지 못하는 에러가 종종 발생하며, 이러한 에러가 발생했을 때, 대처하기 매우 까다롭다.

카오스 엔지니어링은 이런 복잡한 분산 시스템에서 에러가 발생하는 부분을 찾는데 매우 유용하다.

예를 들면

  • Blind Spots 모니터링 도구들이 확인하지 못하는 영역에서 발생하는 에러
  • Hidden Bugs 소프트웨어의 오작동을 유발하는 결함 혹은 이슈
  • Performance Bottlenecks 성능과 효율을 끌어올릴 수 있는 특정 지점

과 같은 지점을 발견하고 사전에 조치하도록 도와준다.

2. 카오스 엔지니어링과 스트레스 테스팅의 차이점

카오스 엔지니어링은 시스템이나 네트워크의 이슈를 발견하고 고친다는 점에서 스트레스 테스팅과 유사하다.

카오스 엔지니어링과 스트레스 테스팅의 차이점을 알아보면 카오스 엔지니어링에 대해 조금 더 명확히 이해할 수 있다.

우선 스트레스 테스팅은 한 번에 하나의 컴포넌트를 테스트하고 수정하며, 의도한 방향으로 시스템이 잘 동작하는지를 확인한다.

반면, 카오스 엔지니어링은 일어날 가능성이 희박하거나, 불분명한 이슈를 찾는다. 즉, 시스템에 대해 지금까지 알지 못했던 새로운 지식을 얻은 것이 목적이다.

3. 카오스 엔지니어링 단계

  1. 베이스라인 설정

    이상적인 시스템의 상태를 정의하는 단계이다. 일반적인 동작 상태를 정의하고 여기서 벗어나는 상황을 파악해야 한다.

  2. 가설 설정

    여러 가지 가능성 있는 약점들을 생각해 보고, 이를 통해서 가설을 설정하는 단계이다. 가장 대표적으로, 매우 큰 트래픽 스파이크가 발생할 때, 서버에 어떤 문제가 생길지 생각해 보고, 가설을 새워볼 수 있다.

  3. 테스트

    가설에서 만들 상황을 실제로 테스트하는 단계이다. 테스트 단계에서 발생하는 문제를 파악하면, 시스템이 가지고 있는 약점을 파악할 수 있다.

  4. 평가

    가설과 실제 테스트 결과를 비교하고, 개선사항을 찾는 단계이다.

4. 분산시스템에서 발생할 수 있는 8가지 오류

L. Peter Deutsch와 그의 연구진은 분산 시스템이 가지는 8가지 오류들을 발표하였다. 많은 개발자들이 은연중에 다음의 오류를 그대로 믿어버린다. 이 8가지 사실이 오류라는 것을 상기하고 시스템을 설계하는 것이 중요하다.

  • 네트워크는 항상 신뢰할 수 있다. 네트워크는 모든 전송을 보장해 주지 않는다. 종종 네트워크 연결은 끊어질 수 있다.
  • latency는 0이다.
  • Bandwidth는 무한하다.
  • 네트워크의 보안은 언제나 철저하다.
  • 네트워크의 위상은 항상 변하지 않는다. 상황에 따라 네트워크의 위상이 바뀔 수 있다.
  • 관리자는 하나뿐이다.
  • 전송 비용(Transport Cost)은 0이다.
  • 네트워크는 Homogeneous(동종) 이다. 네트워크는 이종으로 구성될 수 있다.

이 8가지 오류는 카오스 엔지니어링을 설계할 때도 좋은 출발점이다.

5. 카오스 엔지니어링 체크 리스트

복잡한 카오스 엔지니어링을 수행할 때, 다음의 체크 리스트를 따르면, 위에서 언급했던 8가지 오류를 피하는 데 도움이 된다.

  • 시스템의 일반적인 동작들을 완전히 이해한다.
  • 현실적인 시나리오를 시뮬레이션 한다.
  • real-world의 상황들을 테스트한다.
  • 폭발 반경(생길 수 있는 문제의 범위)를 최소화한다.

6. 카오스 엔지니어링 도구

카오스 엔지니어링을 개발하고 도입한 넷플릭스는 자신들이 개발한 플랫폼을 오픈소스로 공개 하였고, 다양한 회사 및 단체에서 카오스 엔지니어링을 도와주는 도구를 제공한다.

  • Simian Armu
  • AWS Fault Injection Simulator
  • Simoorg
  • Monkey-Ops
  • Gremlin
  • PowerfulSeal
  • KubeMonky

Reference

0개의 댓글