Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

디지안의 개발일지

k8s에 JMeter 배포하기 본문

Kubernates

k8s에 JMeter 배포하기

안덕기 2022. 3. 7. 20:40

이 글은 Kubernates 환경에서 분산 Jmeter 테스트를 어떻게 하는지에 대해서 설명합니다.

배경

API 서버에 대해서 스트레스 테스트를 하고 싶었다. 테스트 도구로써 Jmeter를 선정하였는데 로컬 컴퓨터에서 요청할 수 있는 갯수에 제한이 있다보니 여러 컴퓨터에서 요청할 수 있는 방법이 필요했다. 찾아보니 Jmeter에서는 원격 PC를 이용해서 테스트를 진행할 수 있는 기능이 있었다. 자세한 설명은 Jmeter 공식 홈페이지를 참고하길 바란다.

구성

테스트 구성은 다음과 같이 Master POD에서 Slave POD 로 테스트 요청을 보내면 Slave POD들이 테스트를 수행한다.

테스트 방법

  1. Jmeter의 테스트 파일 저장

Jmeter를 통해서 테스트를 작성한다. 테스트 하는 방법은 블로그에서 확인하면 된다. 작성한 테스트를 아래의 저장 버튼을 통해서 저장한다.

  1. 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