디지안의 개발일지
k8s에 JMeter 배포하기 본문
이 글은 Kubernates 환경에서 분산 Jmeter 테스트를 어떻게 하는지에 대해서 설명합니다.
배경
API 서버에 대해서 스트레스 테스트를 하고 싶었다. 테스트 도구로써 Jmeter를 선정하였는데 로컬 컴퓨터에서 요청할 수 있는 갯수에 제한이 있다보니 여러 컴퓨터에서 요청할 수 있는 방법이 필요했다. 찾아보니 Jmeter에서는 원격 PC를 이용해서 테스트를 진행할 수 있는 기능이 있었다. 자세한 설명은 Jmeter 공식 홈페이지를 참고하길 바란다.
구성
테스트 구성은 다음과 같이 Master POD
에서 Slave POD
로 테스트 요청을 보내면 Slave POD
들이 테스트를 수행한다.
테스트 방법
- Jmeter의 테스트 파일 저장
Jmeter를 통해서 테스트를 작성한다. 테스트 하는 방법은 블로그에서 확인하면 된다. 작성한 테스트를 아래의 저장 버튼을 통해서 저장한다.
- helm jmeter install
우선, Github 에서 helm chart를 다운 받는다.
$ git clone https://github.com/dgahn/distributed-jmeter.git
다운이 완료되면 아래 명령어를 통해서 jmeter를 k8s에 배포한다.
$ helm install jmeter-test .
배포한 후 실행이 잘됬는지 확인한다. 현재 기본 설정이 마스터 1개, 슬레이브 3개여서 아래와 같이 나온다.
$ kubectl get pod | grep jmeter-test
jmeter-test-distributed-jmeter-master-d4b7977fb-zt92h 1/1 Running 0 47s
jmeter-test-distributed-jmeter-server-74669476d6-cck8t 1/1 Running 0 47s
jmeter-test-distributed-jmeter-server-74669476d6-g49sv 1/1 Running 0 47s
jmeter-test-distributed-jmeter-server-74669476d6-tx44m 1/1 Running 0 47s
실제 테스트 실행을 위해 다음과 같은 명령어를 실행한다.
$ export MASTER_NAME=$(kubectl get pods -l app.kubernetes.io/component=master -o jsonpath='{.items[*].metadata.name}')
$ kubectl cp google-test.jmx(테스트할 jmx 파일) $MASTER_NAME:/jmeter
$ export SERVER_IPS=$(kubectl get pods -l app.kubernetes.io/component=server -o jsonpath='{.items[*].status.podIP}' | tr ' ' ',')
$ kubectl exec -it $MASTER_NAME -- jmeter -n -t /jmeter/sample.jmx -R $SERVER_IPS
테스트를 진행하면 다음과 같은 결과가 나온다.
Creating summariser <summary>
Created the tree successfully using /jmeter/google-test.jmx
Configuring remote engine: 10.244.17.40
Configuring remote engine: 10.244.14.28
Configuring remote engine: 10.244.13.38
Starting remote engines
Starting the test @ Mon Mar 07 11:31:31 UTC 2022 (1646652691938)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary + 1 in 00:00:01 = 1.2/s Avg: 614 Min: 614 Max: 614 Err: 0 (0.00%) Active: 202 Started: 203 Finished: 1
summary + 299 in 00:00:03 = 102.2/s Avg: 1616 Min: 619 Max: 2728 Err: 0 (0.00%) Active: 0 Started: 300 Finished: 300
summary = 300 in 00:00:04 = 79.9/s Avg: 1613 Min: 614 Max: 2728 Err: 0 (0.00%)
Tidying up remote @ Mon Mar 07 11:31:36 UTC 2022 (1646652696567)
... end of run
JTL 파일로 테스트 결과 export 하기
테스트를 실행할 때 아래와 같은 명령어를 실행한다.
$ kubectl exec -it $MASTER_NAME -- jmeter -n -t /jmeter/google-test.jmx -l test.jtl -R $SERVER_IPS
$ kubectl cp $MASTER_NAME:/jmeter/apache-jmeter-3.3/test.jtl test.jtl
k8s에 가져온 파일을 Jmeter에서 보면 다음과 같이 나온다.
'Kubernates' 카테고리의 다른 글
[실습] Pod 생성시 Probe 설정하기 (0) | 2021.12.17 |
---|