반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- argocd
- gitops
- argo rollout
- CANARY
- Kubernetes
- seldon core
- Kopf
- Model Serving
- gitea
- tekton
- 오퍼레이터
- keda
- 카오스 엔지니어링
- mlops
- nginx ingress
- MLflow
- Argo
- CI/CD
- opentelemetry
- operator
- Pulumi
- Litmus
- blue/green
- knative
- serving
- kubernetes operator
- Kubeflow
- Kubernetes 인증
- Continuous Deployment
- opensearch
Archives
- Today
- Total
Kubernetes 이야기
Locust를 사용하여 부하테스트 실행하기 본문
반응형
부하테스트 툴 중에 가장 많이 사용하는 것은 JMeter 일 것이다. 이번에는 Kubernetes에서 Locust 툴을 사용하여 웹 UI에서 부하를 테스트하는 방식을 알아보자
Locust 특징
- Python 코드로 부하 테스트 조건을 쉽게 제작할 수 있다.
- CLI 뿐만 아니라 WEB UI에서 시작 및 결과를 조회할 수 있다.
- Jenkins와 유사하게 Master / Worker 로 구성되고 Kubernetes 에서 Worker가 부하발생 시 Autoscaling을 통해 부하기를 증가시킬 수 있다.
Locust 설치
우선 Helm 차트를 사용하여 설치해 보자 (https://github.com/deliveryhero/helm-charts/tree/master/stable/locust)
설치 전 아래의 작업을 먼저 선행한다.
main.py 작성하기
kind: ConfigMap
apiVersion: v1
metadata:
name: my-loadtest-locustfile
namespace: test
data:
main.py: >
from locust import HttpUser, task, between
import random
default_headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X
10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100
Safari/537.36'}
class WebsiteUser(HttpUser):
def on_start(self):
self.client.verify = False
@task(1)
def get_index(self):
wait_time = random.randrange(1000,5000)
url = "/sleep.jsp?sleep=" + str(wait_time)
self.client.get(url, headers=default_headers)
위와 같이 configmap을 만들거나 아래와 같이 main.py만 만든경우 confimap을 kubectl 로 생성한다.
kubectl create configmap my-loadtest-locustfile --from-file main.py
helm 배포하기
helm repo add deliveryhero https://charts.deliveryhero.io/
helm install 전 values 를 환경에 맞게 수정한다.
locust_locustfile: main.py
locust_locustfile_configmap: my-loadtest-locustfile
affinity: {}
extraConfigMaps: {}
extraLabels: {}
fullnameOverride: ''
image:
pullPolicy: IfNotPresent
repository: locustio/locust
tag: 2.4.0
imagePullSecrets: []
ingress:
annotations: {}
className: ''
enabled: false
hosts:
- host: chart-example.local
path: /
pathType: ImplementationSpecific
tls: []
loadtest:
environment: {}
environment_external_secret: {}
environment_secret: {}
excludeTags: ''
headless: false
locustCmd: /usr/local/bin/locust
locust_host: 'https://www.google.com'
locust_lib_configmap: example-lib
locust_locustfile: main.py
locust_locustfile_configmap: my-loadtest-locustfile
locust_locustfile_path: /mnt/locust
mount_external_secret: {}
name: example
pip_packages: []
tags: ''
master:
args: []
auth:
enabled: false
password: ''
username: ''
command:
- sh
- /config/docker-entrypoint.sh
deploymentAnnotations: {}
environment: {}
envs_include_default: true
image: ''
logLevel: INFO
pdb:
enabled: false
resources: {}
restartPolicy: Always
serviceAccountAnnotations: {}
strategy:
type: RollingUpdate
nameOverride: ''
nodeSelector: {}
podSecurityContext: {}
securityContext: {}
service:
annotations: {}
extraLabels: {}
type: ClusterIP
tolerations: []
worker:
args: []
command:
- sh
- /config/docker-entrypoint.sh
deploymentAnnotations: {}
environment: {}
envs_include_default: true
hpa:
enabled: false
maxReplicas: 100
minReplicas: 1
targetCPUUtilizationPercentage: 40
image: ''
logLevel: INFO
replicas: 1
resources: {}
restartPolicy: Always
serviceAccountAnnotations: {}
strategy:
type: RollingUpdate
helm install locust deliveryhero/locust -f values.yaml
테스트하기
브라우저에서 NodePort 로 접속하면 아래와 같이 설정화면이 뜬다. ( 서비스 포트는 8089를 사용한다.)
실행하면 아래와 같이 모니터링이 가능하다.
반응형
'Kubernetes > 모니터링' 카테고리의 다른 글
OpenTelemetry (0) | 2022.04.16 |
---|---|
OpenTelemetry auto-instrumentation (0) | 2022.04.16 |
host 서버에서 pod내부의 외부 통신 상태 (netstat) 조회 (0) | 2022.03.22 |
Robusta 를 활용한 Kubernetes 문제점 해결하기 (0) | 2022.02.27 |
Kyverno 정책 모니터링 (0) | 2022.02.20 |
Comments