본문 바로가기
IT/개발환경

JMeter k8s에 셋팅하기 (비추)

by rapker 2023. 4. 18.
반응형
참고
 
Kubernetes 에 JMeter 환경을 구축하는 방법이 있어서 도전해 봅니다.

 

 

결과 요약

 
k8s에 jmeter 환경을 구축 하긴 했지만 완벽하게 자동화까지 되진 않았습니다. (매력적인 결과물이 아닙니다.)
jmeter의 시나리오를 linux 환경에서 완벽하게 구축할 수 있는 분들만 도전 하시는것을 권장 합니다. ㅜㅜ
 

 

시작하기 전에

 
JMeter를 어쩌다 한번씩 사용하는 편이고, 비용문제로 인해 JMeter환경을 유지할 수가 없어서
필요할 때마다 JMeter환경을 구축해 왔습니다.
 
그러다 문뜩 k8s로 jmeter cluster환경을 준비 해놓을 수 있다면 언제든지 손쉽게 테스트 환경이 갖추어 질 것이라는 생각이 스쳤습니다.
 
대부분 그렇듯 무언가 필요해서 찾아보면 이미 누군가 정리해 놓은 자료가 있기 마련이죠~
 
k8s와 openshift에서 사용할 수 있다는 kubernauts(쿠버넛)의 자료를 바탕으로 jmeter 환경을 설정해 보려 합니다.
 
kubernauts(쿠버넛)은 아래와 같이 기본적인 jmeter cluster환경과 추이와 과거 데이터 확인을 위한 influxdb, grafana까지 설정을 하는 몇 가지 스크립트를 github에 올려두었습니다.
 
Kubernetes 1.8 이상, OpenShift 3.5 이상 의 버전을 필요로 하고 어느 환경에 있는 k8s에라도 설정이 가능하다고 합니다.
 
쿠버넛의 내용을 토대로 jmeter환경을 구축할 것이지만
쿠버넛의 자료가 오래(2021-08 기준 약 3년 전) 되기도 했고, 쿠버넛의 작업환경은 리눅스라 윈도우 환경에서 작업하는 내용을 기록 합니다.
(몇 번씩 재 배포하면서 이미지들이 캡쳐 되었기에 pod, svc, deployment등 랜덤 이름이 다를 수 있습니다.)
 

 


728x90
 

k8s 준비

 
1.8 버전 이상의 k8s cluster를 생성하고 접속할 수 있는 상태가 준비되어 있어야 합니다.
 
vs code에서 aks의 자격증명 얻기
az aks get-credentials -g <ResourceGroupName> -n <AKSClusterName>
 
아래처럼 kubectl 을 사용할 수 있어야 합니다.
kubectl get all
 
cluster 버전도 1.8 이상인지 확인해 봅니다.
kubectl version --short
 
 
 

yaml 준비

 
쿠버넛에서 제공한 yaml파일을 github에서 가져옵니다.
 
git을 사용한다면 경로를 복사
 
git을 사용하지 않는다면 .zip파일을 다운로드
 
 
이렇게 준비해 줍니다.
 
 
 
반응형
 
 
 

jmeter, influxdb, grafana 배포

 
 

실행경로 이동

 
cmd 창을 열고 git clone이나 .zip 파일로 받은 경로로 이동합니다.
 

k8s namespace 생성

 
kube-jmeter 라는 namespace를 생성합니다.
 
kubectl create namespace kube-jmeter
kubectl get ns
 
 
 

jmeter slave 배포

 
kubectl apply -n kube-jmeter -f jmeter_slaves_deploy.yaml
kubectl apply -n kube-jmeter -f jmeter_slaves_svc.yaml
kubectl get all -n kube-jmeter
 
 
 

jmeter master 배포

 

 
kubectl apply -n kube-jmeter -f jmeter_master_configmap.yaml
kubectl apply -n kube-jmeter -f jmeter_master_deploy.yaml
kubectl get all -n kube-jmeter
 
 
 
 

influxdb 배포

 
InfluxDB 2.0에서 데이터베이스는 더 이상 존재하지 않으며 버킷 으로 대체되었습니다.
 
 
kubectl create -n kube-jmeter -f jmeter_influxdb_configmap.yaml
kubectl create -n kube-jmeter -f jmeter_influxdb_deploy.yaml
kubectl create -n kube-jmeter -f jmeter_influxdb_svc.yaml
kubectl get all -n kube-jmeter
 
 
 
 
 
 

grafana 배포

 
jmeter_grafana_svc.yaml파일을 수정합니다.
 
외부에서 grafana에 접근할 수 있도록 service type을 NodePort에서 LoadBalancer로 바꾸고 port도 80으로 바꾸어줍니다.
 
kubectl create -n kube-jmeter -f jmeter_grafana_deploy.yaml
kubectl create -n kube-jmeter -f jmeter_grafana_svc.yaml
kubectl get all -n kube-jmeter
 
 
 
 

배포 확인

 
지금까지 배포한 리소스들이 실행중인지 kubectl로 확인합니다.
kubectl get all -n kube-jmeter
 
 
 
 

influxdb에 jmeter bucket 생성

 
현재(2021-08-27) influxdb 버전 2.0.8
InfluxDB 2.x에서 데이터베이스는 더 이상 존재하지 않으며 버킷 으로 대체되었습니다.
 
influxdb의 pod 이름 얻기
kubectl get po -n kube-jmeter | findstr influxdb-jmeter
 
 
influxdb setup
kubectl exec -it -n kube-jmeter <pod name> -- influx setup --org <org name> --bucket <bucket name> --username <user name> --password <password> --force
 
 
 

jmeter master 설정

 
jmeter master의 pod 이름 얻기
kubectl get po -n kube-jmeter | findstr jmeter-master
 
 
jmeter 파일 복사
kubectl exec -it -n kube-jmeter <pod name> -- cp -r /load_test /jmeter/load_test
kubectl exec -it -n kube-jmeter <pod name> -- chmod 755 /jmeter/load_test
 
 
 

grafana 설정

 
grafana의 pod 이름 얻기
kubectl get po -n kube-jmeter | findstr jmeter-grafana
 
curl 설치
 
grafana 샘플 image의 linux 는 Devian 9 인데 curl이 설치되어 있지 않아서 curl 먼저 설치 합니다.
pod/jmeter-grafana-5856f7b855-6ndd2
 
kubectl exec -ti -n kube-jmeter <pod name> -- su apt-get install curl
 
kubectl exec -ti -n kube-jmeter pod/jmeter-grafana-5856f7b855-6ndd2 -- adduser rapker sudo
 
 
grafana 초기 설정
kubectl exec -ti -n kube-jmeter <pod name> -- curl 'http://admin:admin@127.0.0.1:3000/api/datasources' -X POST -H 'Content-Type: application/json;charset=UTF-8' --data-binary '{"name":"jmeterdb","type":"influxdb","url":"http://jmeter-influxdb:8086","access":"proxy","isDefault":true,"database":"jmeter","user":"rapker","password":"testpassword"}'
 
kubectl exec -ti -n kube-jmeter jmeter-grafana-5856f7b855-6ndd2 -- curl 'http://admin:admin@127.0.0.1:3000/api/datasources' -X POST -H 'Content-Type: application/json;charset=UTF-8' --data-binary '{"name":"jmeterdb","type":"influxdb","url":"http://jmeter-influxdb:8086","access":"proxy","isDefault":true,"database":"jmeter","user":"rapker","password":"testpassword"}'
 

grafana 접속

 
grafana ip 확인
kubectl get svc -n kube-jmeter -o wide
 
브라우저에서 접속
 
 
 
 
결과
 
단순하게 k8s 환경에 jmeter(master, slave), influx, grafana가 설치되기는 했습니다.
(jmeter로 부하 테스트를 진행해보지 않았습니다.)
하지만, 본 테스트의 의도는 'jmeter가 필요할 때 즉시 환경을 구성하는 것'이였지만 몇 가지 이슈가 발견 되었습니다.
 
  1. jmeter에서 테스트할 내용과 환경이 항상 다르다.
  2. influxdb 필드가 자동으로 구성 되지 않았다.
  3. grafana data source가 자동으로 연결 되지 않았다.
  4. grafana dashboard를 templete으로 가져올 수 없었다.
 
2, 3, 4 번의 실패 들은 시간 들이면 해결 가능할 이슈로 보여집니다.
 
다만 jmeter-master 가 linux 에 올라 가 있다보니 jmeter 시나리오 설정 부분이 걸림돌이 되었습니다.
 
jmeter로 부하 테스트를 하기 위해서는 jmeter 시나리오 설정을 해야 합니다.
시나리오 설정 과정에는 api 서버에 접근하기 위한 인증절차, 테스트할 데이터 및 변수 설정, 테스트할 api 설정, 몇 개의 스레드로 얼만큼의 텀을 두고 각 스레드가 몇 회씩 부하를 줄 것인지 등 엄청 많은 설정을 해야 시나리오가 완성되는데요
이걸 GUI가 아닌환경에서... 가능한지 모르겠지만 가능하다 하더라도 엄청난 무리로 보여집니다.
 
그래도 k8s로 jmeter를 사용해야 한다면
jmeter-master는 VM으로 준비하고 jmeter-slave들을 k8s에 올려서 사용해 볼 수도 있겠습니다만
 
나중에... 언젠가... 먼~ 훗날... k8s를 사용하는 것이 더 좋다고 판단되거나, 누군가 꼭 k8s에 써야한다고 하지 않는 이상
아직 까지는 VM에 jmeter를 올리는 것이 좋아 보이네요.
(종종 필요하다면 jmeter 한번 설정한 후에 image로 묵혀두는것도...)
 
 
 
반응형
LIST