프로덕션에서 테스트하기
프로덕션에서 테스트하기
이 모듈에서는 프로덕션 환경에서 마이크로서비스를 테스트하는 방법을 배워요. 단일 마이크로서비스 테스트와 카오스 테스트(chaos testing)를 통해 애플리케이션이 장애에 어떻게 반응하는지 확인해요.
출처: Istio 문서
본문
마이크로서비스를 프로덕션에서 테스트해 보세요!
개별 마이크로서비스 테스트하기
- 테스트용 파드에서 서비스 중 하나로 HTTP 요청을 보내세요.
$ kubectl exec $(kubectl get pod -l app=curl -o jsonpath='{.items[0].metadata.name}') -- curl -sS http://ratings:9080/ratings/7
카오스 테스트
프로덕션에서 카오스 테스트를 수행해서 애플리케이션이 어떻게 반응하는지 확인해 보세요. 각 카오스 작업 후에 애플리케이션의 웹페이지에 접속해서 무언가 바뀌었는지 확인하고, kubectl get pods로 파드 상태도 확인하세요.
- 한 파드에서 details 서비스를 종료하세요.
$ kubectl exec $(kubectl get pods -l app=details -o jsonpath='{.items[0].metadata.name}') -- pkill ruby
- 파드 상태를 확인하세요.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-6d86fd9949-fr59p 1/1 Running 1 47m
details-v1-6d86fd9949-mksv7 1/1 Running 0 47m
details-v1-6d86fd9949-q8rrf 1/1 Running 0 48m
productpage-v1-c9965499-hwhcn 1/1 Running 0 47m
productpage-v1-c9965499-nccwq 1/1 Running 0 47m
productpage-v1-c9965499-tjdjx 1/1 Running 0 48m
ratings-v1-7bf577cb77-cbdsg 1/1 Running 0 47m
ratings-v1-7bf577cb77-cz6jm 1/1 Running 0 47m
ratings-v1-7bf577cb77-pq9kg 1/1 Running 0 48m
reviews-v1-77c65dc5c6-5wt8g 1/1 Running 0 47m
reviews-v1-77c65dc5c6-kjvxs 1/1 Running 0 48m
reviews-v1-77c65dc5c6-r55tl 1/1 Running 0 47m
curl-88ddbcfdd-l9zq4 1/1 Running 0 47m
첫 번째 파드가 한 번 재시작된 것을 주목하세요.
- details 서비스를 모든 파드에서 종료하세요.
$ for pod in $(kubectl get pods -l app=details -o jsonpath='{.items[*].metadata.name}'); do echo terminating "$pod"; kubectl exec "$pod" -- pkill ruby; done
- 애플리케이션의 웹페이지를 확인하세요. details 섹션에 책 세부 정보 대신 오류 메시지가 들어 있는 걸 볼 수 있어요.
- 파드 상태를 확인하세요.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-6d86fd9949-fr59p 1/1 Running 2 48m
details-v1-6d86fd9949-mksv7 1/1 Running 1 48m
details-v1-6d86fd9949-q8rrf 1/1 Running 1 49m
productpage-v1-c9965499-hwhcn 1/1 Running 0 48m
productpage-v1-c9965499-nccwq 1/1 Running 0 48m
productpage-v1-c9965499-tjdjx 1/1 Running 0 48m
ratings-v1-7bf577cb77-cbdsg 1/1 Running 0 48m
ratings-v1-7bf577cb77-cz6jm 1/1 Running 0 48m
ratings-v1-7bf577cb77-pq9kg 1/1 Running 0 49m
reviews-v1-77c65dc5c6-5wt8g 1/1 Running 0 48m
reviews-v1-77c65dc5c6-kjvxs 1/1 Running 0 49m
reviews-v1-77c65dc5c6-r55tl 1/1 Running 0 48m
curl-88ddbcfdd-l9zq4 1/1 Running 0 48m
첫 번째 파드는 두 번 재시작됐고, 다른 두 details 파드는 한 번씩 재시작됐어요. 파드가 Running 상태에 도달하기 전까지 Error 및 CrashLoopBackOff 상태가 나타날 수 있어요.
- 터미널에서 Ctrl-C를 사용해서 트래픽을 시뮬레이션 중인 무한 루프를 중지하세요.
두 경우 모두 애플리케이션은 크래시하지 않았어요. details 마이크로서비스의 크래시가 다른 마이크로서비스의 장애를 일으키지 않았어요. 이는 이 상황에서 **연쇄 실패(cascading failure)**가 없었다는 뜻이에요. 대신 **점진적인 서비스 저하(gradual service degradation)**가 있었어요. 한 마이크로서비스가 크래시했음에도 애플리케이션은 여전히 유용한 기능을 제공할 수 있었어요. reviews와 책의 기본 정보를 표시해줬어요.
이제 reviews 애플리케이션의 새 버전 추가하기로 넘어갈 준비가 됐어요.