JMeter 설치하는법
Host PC 직접 설치 (Windows 기준)
1. Zip 파일로 설치 (Portable)
https://jmeter.apache.org/download_jmeter.cgi
Apache JMeter - Download Apache JMeter
Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava
jmeter.apache.org
압축해제 후 bin폴더에 jmeter.bat을 실행
OR
2. Chocolatey 설치되어있다는 가정
https://chocolatey.org/install#install-with-cmdexe
Installing Chocolatey
Chocolatey is software management automation for Windows that wraps installers, executables, zips, and scripts into compiled packages. Chocolatey integrates w/SCCM, Puppet, Chef, etc. Chocolatey is trusted by businesses to manage software deployments.
chocolatey.org
Chocolatey 패키지 인스톨러 명령어로 설치
choco install jmeter
이후 jmeter 실행
jmeter
만약 jdk가 없다면 jdk 먼저 설치 (버전은 다르게 설치 가능)
choco install openjdk17
원하는 버전으로 설치가 잘 되었는지 확인해보기
java -version
JMeter 사용법
워낙 유명한 툴이기 때문에 사용법도 많이 소개되어 있다.
간단하게만 설명을 하면
1. 테스트 플랜 만들기
File -> New -> Test Plan
2. 쓰레드 혹은 유저 설정하기 ( 테스트 할 때 가동될 인원 )
만든 Test Plan 우클릭 -> Add -> Threads (Users) -> Thread Group
- Number of Threads : 목표 동시접속 유저의 수
- Ramp-up period : 총 테스트 시간(초)
- Loop Count : 반복 횟수
아래 그림으로 예를 들면 30초동안 1000명이 순차적으로 늘어날 것이고
그렇게 해서 목표 동접자 1000명이 되고 테스트를 완료하면 성공한 것으로 간주하고
이걸 반복 횟수만큼 반복한다.
3. 테스트 샘플러 만들기 ( 실제로 테스트 해볼 내용 )
Thread Group 우클릭 -> Add -> Sampler -> HTTP Request
4. 리스너 만들기 ( 보고서 혹은 결과서 )
HTTP Request 우클릭 -> Add -> Listener -> 원하는 보고서 형태 선택 (예: Summary Report)
5. 검증 단계 ( 선택사항 )
HTTP Request 우클릭 -> Add -> Assertions -> Response Assertion
*request를 보냈으니 원하는 response가 온게 맞는지 검증하는 단계로
기본적으로 http 통신에서 오는 response가 아닌 특정 api call이 있어서 오는 response일 경우 검증하면 유용하다.
이후 테스트 시작!
이제 JMeter를 이용해서 쿠버네티스 HPA를 하기 위해서는 무엇을 해야하나
바로 테스트 하고자 하는 애플리케이션의 ip를 노출시켜서 접근이 가능하도록 하고 http request에 넣어야 한다.
이렇게 되면 JMeter가 정해진 시간, 지정한 Thread 수 만큼 트래픽과 부하를 유발할 것이다.
그런데 여기서 기존에 http request로 테스트를 할 기존 프로젝트가 없거나
간편하게 hpa가 동작하는지만 보고싶으면 어떻게 하느냐?
get밖에 요청을 못 날리지 않나? 생각할 수 있는데 Httpbin이라고
이미 지구 어딘가에 있는 개발자가 테스트하라고 이미지로 만들어놨다.
https://hub.docker.com/r/kennethreitz/httpbin
https://hub.docker.com/r/kennethreitz/httpbin
hub.docker.com
다운로드 수가 많은걸 보니 많은 개발자들이 유용하게 사용하는 것 같다.
아무튼 위 링크 참고해서 아래 명령어처럼
이미지 받고 실행시킨 뒤 포트포워딩하면된다.
예시:
우리는 k8s를 사용할 것이기 때문에
이미지도 도커 명령어 = docker pull kennethreitz/httpbin 가 아니라
k8s 로 받을 것이고
실행도 도커 명령어 = docker run -p 80:80 kennethreitz/httpbin 가 아니라
k8s 로 할 것이다.
이미지를 받고 pod로 실행시키는 방법은 deployment.yaml을 작성하고 적용하면 된다.
Sample
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin-deployment
spec:
replicas: 1
selector:
matchLabels:
app: httpbin
template:
metadata:
labels:
app: httpbin
spec:
containers:
- name: httpbin
image: kennethreitz/httpbin
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
spec: containers: image: 부분에 기존 docker pull 하고 썼을 이미지를 쓰면 된다.
작성 후 적용
kubectl apply -f <파일명>
이제 띄워놓은 pod를 접근해야 하지 않는가?
Service를 이용하면 된다.
아니 도커 명령어를 이용하면 컨테이너를 실행시키면서 포트포워딩도 하는데
뭐하러 굳이 yaml을 작성하고 적용해야 하는지 궁금하다면?
이전 포스팅 참고
https://samori.tistory.com/110
쿠버네티스 사용법 (무중단 배포:Rolling Update + 자동 스케일링:HPA)
준비물: 1. 쿠버네티스2. 도커와 쿠버네티스에 대한 기본적인 개념 및 이해 나의 테스트 환경 Host OS: WindowsDocker: Docker Desktop for Windows 기본 개념을 모른다면 이전 포스팅 참고 https://samori.tistor
samori.tistory.com
아무튼 아래 샘플과 같이 작성 후
Sample
apiVersion: v1
kind: Service
metadata:
name: httpbin-service
spec:
selector:
app: httpbin
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
kubectl apply -f <파일명>
selector: app: httpbin을 보면 httpbin이라고 하는 애플리케이션과 연결을 하는 것인데
이 애플리케이션이 pod라고 보면 된다.
이제 deployment와 service가 실행되어있다면 hpa를 적용하면 된다.
Sample
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: my-httpbin-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: httpbin-deployment # 이 이름으로 deployment를 연결할건데 어디서 가져오냐면
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 40
여기서도 scaleTargetRef의 name을 deployment의 metadata 이름으로 정하면 된다.
DEPLOYMENT.YAML 윗부분
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin-deployment # 여기 metadata:name 부분
.
.
.
이후 적용
kubectl apply -f <파일명>
즉 순서가 아래와 같이 되는 것이다.
1. deployment => pod 생성+관리
2. service => pod 접근+로드밸런싱
3. hpa => pod 스케일링
물론 추후 다룰 모니터링을 하려면 이 전에 metric server를 설치해둬야함
이것도 이전 포스팅 참고
이제 k8s로
httpbin이라고 하는 이미지를
띄우고, 관리하고, 접근 할 수 있게 되었다.
접근할 수 있도록 해놨으니
날릴 수 있는 api를 먼저 확인하고
JMeter의 HTTP Request에서
해당 IP와 PORT를 JMeter에 설정하면 된다.
나의 경우 로컬에 띄운 것이라 localhost이고 service를 통해 80포트로 포트포워딩을 한 것이기 때문에 위와 같이 작성했다.
Ngrok 같은 툴을 이용해서 로컬에 띄운 저 ip와 port를 터널링 할 수 있다. 헌데 무료 계정이라면 제한이 있는 단점이 있다.
Ngrok 관련 내용은 이전 포스팅 참고
https://samori.tistory.com/108
로컬에 띄운 내 웹페이지를 외부에서도 접속 가능하게 하는법 (Ngrok)
원래 외부에서 외부망으로 내 로컬 PC에 호스팅하는 애플리케이션 (EX: 웹페이지)에 접속하려면, 내 public ip를 직접 노출하고 포트포워딩 설정 까지 해줘야한다. 그게 아니라면 클라우드 환경에
samori.tistory.com
아무튼 service에 80으로 포트포워딩 해놨기 때문에
ngrok http 80 치고 외부 ip 받아서 넣으면 된다. 마찬가지이다.
Body Data에 저렇게 내용을 넣어서 테스트를 해볼 수 있다.
그리고 JMeter에서 부하테스트를 돌린 뒤 터미널에서
kubectl get hpa
를 통해 모니터링 할 수 있는 것이다.
그러면 아래 그림에서 TARGETS 부분 0%였던 CPU 점유율이
올라가서 결국 임계치인 40%를 넘고 200%를 찍은 뒤
우측 REPLICAS가 늘어나는 것을 볼 수 있을 것이다.
부하테스트가 끝났지만 그 사이 REPLICS가 9개까지 늘어났고
부하테스트를 껐기에 CPU 점유율이 떨어져서 TARGETS에 Metrics가 기록됐지만
REPLICAS는 바로 사라지지 않았다.
어느정도의 시간을 두고 다시 1개로 줄어드는 것을 볼 수 있다.
그런데 조금 아쉽다. 모니터링을 이렇게 명령어를 쳐서 계속 확인해야한다는 것이..
그리고 뭔가 UI적으로도..
그래서 나온게 전용 대시보드이다.
쿠버네티스 전용 대시보드
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl apply -f admin-user.yaml
kubectl apply -f admin-user-binding.yaml
kubectl proxy
웹페이지 접근
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
토큰 얻는법 (로그인을 위해)
kubectl -n kubernetes-dashboard create token admin-user
나온 토큰 복사해서 로그인
부하테스트 하기 전
부하테스트를 시작해서 첫 Pod의 CPU 사용량이 200.00m을 찍고 replicas들이 생겨난 모습
부하테스트 끝나고 나서 좀 지나고 나서 다시 Pod가 1개로 돌아오고 CPU 사용량 1.00m로 하락한 모습
이래도 성이 안찬다면?
더 시각적으로 화려하고 강력한 쿠버네티스 Lens를 이용해볼 수 있다.
자칭 쿠버네티스의 IDE인 Lens는 사용법이 매우 쉽다.
About us | The Kubernetes IDE
Lens IDE for Kubernetes. The only system you’ll ever need to take control of your Kubernetes clusters. Download it today!
k8slens.dev
다운로드 받고
Catalog의 Clusters로 들어가서
k8s를 설치한 Cluster를 클릭하고 (나의 경우 도커 데스크탑 내장 쿠버네티스라 도커 데스크탑 cluster)
그렇게 화면에 진입하면 그래프가 바로 나올 줄 알았는데? 웬걸 에러가 뜰 것이다.
Settings 에서 내장 Lens Metrics 부터 다 켜주자
이게 뭐냐면 Lens는 그 자체로 Metrics가 없어서 이전에는 따로 설치해줘야 했는데 그 중 가장 많이 사용됐던 Prometheus가 내장되면서 이렇게 설정에서 켜줄 수가 있게 되었다.
킨 다음에 Metrics로 넘어와서 자동으로 설정하게 해주고 나서, 안되면 Reset 한번 눌러주고 (혹시 모르니)
첫화면인 Cluster로 돌아오면 에러가 사라져있을 것이다.
이후 부하테스트를 하다보면
아래 처럼 Cluster Overview에서 그래프도 보이고
Workload Overview 에서
현재 띄워진 Pod가 몇개인지도 보인다.
자세하게 보고 싶다면 띄워진 Deployment를 눌러 들어가면 상세내용이 나온다.
'개발자 전향 프로젝트' 카테고리의 다른 글
JMeter - Recording 으로 실시간 브라우저 상호작용 테스트하기 (0) | 2024.09.26 |
---|---|
무한 스크롤 이해하기 (0) | 2024.08.22 |
쿠버네티스 사용법 (무중단 배포:Rolling Update + 자동 스케일링:HPA) (0) | 2024.07.25 |
Gitlab 과 Jenkins 연동하기 (0) | 2024.07.18 |
로컬에 띄운 내 웹페이지를 외부에서도 접속 가능하게 하는법 (Ngrok) (0) | 2024.07.18 |