반응형
참고
-
Load Testing With JMeter On Kubernetes and OpenShift - Kubernauts
-
kubernauts/jmeter-kubernetes - github
-
JMeter 분산 테스팅환경 만들기 (가상머신에 cluster 환경 설정하는 방법)
-
How To Create a Database on InfluxDB 1.7 & 2.0 - (2.0에서 database 생성하는 방법 잘 나와있음)
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가 필요할 때 즉시 환경을 구성하는 것'이였지만 몇 가지 이슈가 발견 되었습니다.
-
jmeter에서 테스트할 내용과 환경이 항상 다르다.
-
influxdb 필드가 자동으로 구성 되지 않았다.
-
grafana data source가 자동으로 연결 되지 않았다.
-
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
'IT > 개발환경' 카테고리의 다른 글
NSIS 타겟 프로그램 실행 중 인스톨 진행하지 못하도록 (0) | 2023.04.18 |
---|---|
jq 툴 설치 (0) | 2023.04.18 |
JMeter 분산 테스팅환경 만들기(2/2) - 부가적인 세부 옵션들 (0) | 2023.04.18 |
JMeter 분산 테스팅환경 만들기(1/2) - 기본구축 (0) | 2023.04.18 |
Gitlab Runner CI/CD (0) | 2023.04.18 |