이전에 kube-burner로 쿠버네티스 성능 테스트하는 방법을 작성해봤는데 이번에는 perf-tests로 쿠버네티스 테스트를 해보는 것을 진행해보겠습니다.
https://github.com/kubernetes/perf-tests
GitHub - kubernetes/perf-tests: Performance tests and benchmarks
Performance tests and benchmarks. Contribute to kubernetes/perf-tests development by creating an account on GitHub.
github.com
perf-tests는 쿠버네티스의 공식 성능테스트로 다양한 테스트 도구들을 가지고 있습니다.
clusterloader2
kube-burner와 유사하게 테스트 설정할 템플릿을 하나 생성해 주어야합니다.
cat <<EOF > config.yaml
name: test # 테스트 이름
namespace:
number: 1 # 생성할 네임스페이스의 수
tuningSets: # 액션이 실행되는 방식
- name: Uniform1qps # 초당 1개의 요청 속도로 실행
qpsLoad:
qps: 1
steps:
# 테스트의 값을 측정
- name: Start measurements
measurements:
# 파드가 시작되기까지의 시작 지연(latency) 시간 측정
- Identifier: PodStartupLatency
Method: PodStartupLatency
Params:
action: start
labelSelector: group = test-pod
threshold: 20s
# 모든 Pod가 Running 상태가 될 때까지의 시간 측정
- Identifier: WaitForControlledPodsRunning
Method: WaitForControlledPodsRunning
Params:
action: start
apiVersion: apps/v1
kind: Deployment
labelSelector: group = test-deployment
operationTimeout: 120s
# deployment 생성 (1개의 네임스페이스에서 10개의 파드)
- name: Create deployment
phases:
- namespaceRange:
min: 1
max: 1
replicasPerNamespace: 1
tuningSet: Uniform1qps
objectBundle:
- basename: test-deployment
objectTemplatePath: "deployment.yaml"
templateFillMap:
Replicas: 10 # <-- 레플리카 10개
# 파드가 Running이 될때까지 기다린 시간 모으기 (위에서 지정한 측정 완료시키기)
- name: Wait for pods to be running
measurements:
- Identifier: WaitForControlledPodsRunning
Method: WaitForControlledPodsRunning
Params:
action: gather
# 파드가 시작되기까지 기다린 시간 모으기 (위에서 지정한 측정 완료시키기)
- name: Measure pod startup latency
measurements:
- Identifier: PodStartupLatency
Method: PodStartupLatency
Params:
action: gather
EOF
그리고 kube-burner와 유사하게 여기서도 오브젝트 생성을 위한 템플릿도 필요합니다
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{.Name}}
labels:
group: test-deployment
spec:
replicas: {{.Replicas}}
selector:
matchLabels:
group: test-pod
template:
metadata:
labels:
group: test-pod
spec:
containers:
- image: registry.k8s.io/pause:3.9
name: {{.Name}}
EOF
위의 파일을 생성한다음 다음과 같이 실행하면 테스트를 진행할 수 있습니다.
kind로 진행하는 경우 apt가 아닌 직접 go버전을 1.24.1 이상으로 설치해야합니다.
# golang 설치 방법
wget https://go.dev/dl/go1.25.0.linux-arm64.tar.gz
rm -rf /usr/local/go && \
tar -C /usr/local -xzf go1.25.0.linux-arm64.tar.gz && \
rm go1.25.0.linux-arm64.tar.gz
export PATH=$PATH:/usr/local/go/bin
테스트를 실행할 때에는 kubeconfig 위치를 설정해주어야하는데 kind-control-plane 내부에서는 kubeconfig의 위치가 /etc/kubernetes/admin.conf로 설정되어있습니다.
# fork/exec /tmp/go-build2371393815/b001/exe/clusterloader: permission denied 에러 발생 해결
mkdir ~/tmp
export TMPDIR=~/tmp/
# cd perf-tests/clusterloader2
go run cmd/clusterloader.go \
--kubeconfig=/etc/kubernetes/admin.conf \
--testconfig=config.yaml --provider=kind
테스트가 진행되는 동안 이렇게 로그가 나오게 됩니다.
최종적으로 테스트 결과는 Junit Report로 나오게 됩니다.
파드가 러닝상태로 변경되기까지 14.02초가 걸렸으며 파드가 뜨는데 걸리는 시간은 0.013초로 나왔습니다.
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="ClusterLoaderV2" tests="0" failures="0" errors="0" time="30.293">
<testcase name="test overall (config.yaml)" classname="ClusterLoaderV2" time="30.283160452"></testcase>
<testcase name="test: [step: 01] Start measurements [00] - PodStartupLatency" classname="ClusterLoaderV2" time="0.109954463"></testcase>
<testcase name="test: [step: 01] Start measurements [01] - WaitForControlledPodsRunning" classname="ClusterLoaderV2" time="0.210576726"></testcase>
<testcase name="test: [step: 02] Create deployment" classname="ClusterLoaderV2" time="1.005080757"></testcase>
<testcase name="test: [step: 03] Wait for pods to be running [00] - WaitForControlledPodsRunning" classname="ClusterLoaderV2" time="14.01648241"></testcase>
<testcase name="test: [step: 04] Measure pod startup latency [00] - PodStartupLatency" classname="ClusterLoaderV2" time="0.012790753"></testcase>
</testsuite>root@myk8s-control-plane:/perf-tests/clusterloader2#
이렇게 직접 실행하는 방법도 있지만 perf-tests/clusterloader2 폴더에는 테스트를 위한 스크립트가 준비되어있어 바로 스크립트를 통해 테스트를 진행해볼 수도 있습니다.
이외에도 netperf나 perfdash같은 대시보드 ui도 존재하는데 이것은 나중에 이어서 정리해보겠습니다.
'K8S > 🔥 network study🔥' 카테고리의 다른 글
[cilium] cilium으로 grpc 보호하기 (0) | 2025.09.05 |
---|---|
로컬에서 쿠버네티스 api 서버에 List 호출 테스트 (1) | 2025.08.30 |
kube-burner로 쿠버네티스 성능테스트 해보기 (3) | 2025.08.29 |
[cilium] Mutual Authentication 테스트 해보기 (진행 중) (1) | 2025.08.22 |
[cilium] gateway API로 트래픽 분할하기 (0) | 2025.08.22 |