locust를kubernetes로 설계하여 부하 테스트를 실시하다
17047 단어 PythonKubernetesTestLocusttech
개시하다
kubernetes에서locust에 대한 디버깅을 실시하고 부하 테스트를 실시하는 방법을 조사했기 때문에 프로그램을 총괄하고 싶습니다.또한 이번에는 로컬docker-desktop에서 테스트를 실시합니다.
시나리오
이번locust를 사용하여 부하 테스트를 실시하는 구성은 다음과 같다.locust를 사용하여 부하를 가하는 Pod는 Master/worker로 구성되어 있으며 각각 경로
/hello
를 통해 Pod로 개발된 테스트 대상 응용 서버에 대한 요청을 수행합니다.이루어지다
코드 구조
부하 테스트를 실행하는 코드는 다음과 같다.또한 구성에 관해서는 여기.를 참고했다.
$ tree .
.
├── image
│ ├── Dockerfile
│ └── test
│ ├── requirements.txt
│ ├── run.sh
│ └── test.py
└── manifest.yaml
image
디렉토리는 로드 테스트를 수행하는 Docker Image를 만드는 데 사용되는 디렉토리입니다.또한manifest.yaml
에는 마스터/worker를 구성하는 설정과 부하 방면의 Pod가 테스트 대상인 Pod에 요청하는 서비스의 설정이 포함되어 있다.Docker Image 만들기
image
디렉토리에 포함된 파일의 내용은 다음과 같습니다.FROM python:3.7.2
ADD test /test
RUN python -m pip install -r /test/requirements.txt
RUN chmod 755 /test/run.sh
ENTRYPOINT ["/test/run.sh"]
locust == 1.6.0
에 사용된 라이브러리는 locust
뿐이다.run.sh
#!/bin/bash
LOCUST="/usr/local/bin/locust"
LOCUS_OPTS="-f /test/test.py --host=$TARGET_HOST"
if [[ "$LOCUST_MODE" = "master" ]]; then
LOCUS_OPTS="$LOCUS_OPTS --master"
elif [[ "$LOCUST_MODE" = "worker" ]]; then
LOCUS_OPTS="$LOCUS_OPTS --worker --master-host=$LOCUST_MASTER"
fi
$LOCUST $LOCUS_OPTS
마스터나 워크맨을 통해 실행할 때 지정한 옵션을 변경합니다.test/test.py
from locust import HttpUser, task, between
class TestUser(HttpUser):
@task
def hello(self):
self.client.get("/hello")
테스트와 관련해서는 스키마 항목에 언급된 것처럼 하중 객체의 API에 대해서만 경로/hello
를 통해 GET 요청을 수행합니다.마지막으로 docker 명령으로 그림을 만듭니다.
$ docker build -t locust:latest ./image
manifest.내용 소개
manifest.yaml의 내용은 다음과 같습니다.
manifest.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: locust-service
name: locust-service
spec:
ports:
- name: master-web
nodePort: 30060
port: 8089
protocol: TCP
targetPort: master-web
- name: master-p1
nodePort: 30061
port: 5557
protocol: TCP
targetPort: master-p1
- name: master-p2
nodePort: 30062
port: 5558
protocol: TCP
targetPort: master-p2
selector:
app: locust-master
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
name: locust-master
name: locust-master
spec:
replicas: 1
selector:
matchLabels:
app: locust-master
template:
metadata:
labels:
app: locust-master
spec:
containers:
- env:
- name: LOCUST_MODE
value: master
- name: TARGET_HOST
value: http://knowledge-service
image: locust:latest
imagePullPolicy: IfNotPresent
name: locust-master
ports:
- containerPort: 8089
name: master-web
protocol: TCP
- containerPort: 5557
name: master-p1
protocol: TCP
- containerPort: 5558
name: master-p2
protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
name: locust-worker
name: locust-worker
spec:
replicas: 4
selector:
matchLabels:
app: locust-worker
template:
metadata:
labels:
app: locust-worker
spec:
containers:
- env:
- name: LOCUST_MODE
value: worker
- name: LOCUST_MASTER
value: locust-master
- name: TARGET_HOST
value: http://knowledge-service
image: locust:latest
imagePullPolicy: IfNotPresent
name: locust-worker
locust-master
에 관하여 마스터/worker로 부하 테스트를 실시하면 5557558 포트를 사용합니다.8089번 포트는 웹 UI에 액세스하기 위한 포트입니다.또한 이번 테스트 대상의 Pod에서 요구를 집행하기 위해 knowledge-service
의 서비스는 별도로 설계될 예정이다.마지막으로
manifest.yaml
에 대한 디버깅을 진행합니다.$ kubectl apply -f manifest.yaml
동작 확인
브라우저 액세스
localhost:30060
를 사용하면 웹 UI가 표시됩니다.테스트를 실행하기 위해 적당한 설정을 하다.테스트 실행 중인'Statistics'항목에서 요청 수와 요청 평균 초, RPS 등의 실측값 등을 실시간으로 확인할 수 있다.
Charts는 차트를 통해 RPS의 실제 측정 값, 1초 실패 요청 수 등을 확인할 수 있습니다.
Reference
이 문제에 관하여(locust를kubernetes로 설계하여 부하 테스트를 실시하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/empenguin/articles/eda7535aeb0977텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)