Kube-burner는 Kubernetes 클러스터의 성능과 확장성을 테스트하기 위한 도구입니다. 대량의 리소스를 생성하여 클러스터의 한계를 테스트하고 성능 메트릭을 수집할 수 있습니다.
(⎈|HomeLab:N/A) root@k8s-ctr:~/kube-burner# curl -LO https://github.com/kube-burner/kube-burner/releases/download/v1.17.3/kube-burner-V1.17.3-darwin-arm64.tar.gz # mac M
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 16.4M 100 16.4M 0 0 8620k 0 0:00:01 0:00:01 --:--:-- 31.1M
(⎈|HomeLab:N/A) root@k8s-ctr:~/kube-burner#
(⎈|HomeLab:N/A) root@k8s-ctr:~/kube-burner# tar -xvf kube-burner-V1.17.3-darwin-arm64.tar.gz
LICENSE
kube-burner
(⎈|HomeLab:N/A) root@k8s-ctr:~/kube-burner# sudo cp kube-burner /usr/local/bin
root@k8s-ctr:~/kube-burner# kube-burner version
Version: 1.17.3
Git Commit: 917540ff45a89386bb25de45af9b96c9fc360e93
Build Date: 2025-08-19T14:42:17Z
Go Version: go1.23.12
OS/Arch: linux arm64
#
cat << EOF > s1-config.yaml
global:
measurements:
- name: none
jobs:
- name: create-deployments
jobType: create
jobIterations: 1 # How many times to execute the job , 해당 job을 5번 반복 실행
qps: 1 # Limit object creation queries per second , 초당 최대 요청 수 (평균 속도 제한) - qps: 10이면 초당 10개 요청
burst: 1 # Maximum burst for throttle , 순간적으로 처리 가능한 요청 최대치 (버퍼) - burst: 20이면 한순간에 최대 20개까지 처리 가능
namespace: kube-burner-test
namespaceLabels: {kube-burner-job: delete-me}
waitWhenFinished: true # false
verifyObjects: false
preLoadImages: true # false
preLoadPeriod: 30s # default 1m
objects:
- objectTemplate: s1-deployment.yaml
replicas: 1
EOF
#
cat << EOF > s1-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-{{ .Iteration}}-{{.Replica}}
labels:
app: test-{{ .Iteration }}-{{.Replica}}
kube-burner-job: delete-me
spec:
replicas: 1
selector:
matchLabels:
app: test-{{ .Iteration}}-{{.Replica}}
template:
metadata:
labels:
app: test-{{ .Iteration}}-{{.Replica}}
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
EOF
# 모니터링 : 터미널, kube-ops-view
watch -d kubectl get ns,pod -A
# 부하 발생 실행 Launch benchmark
kube-burner init -h
kube-burner init -c s1-config.yaml --log-level debug
...
#
kubectl get deploy -A -l kube-burner-job=delete-me
kubectl get pod -A -l kube-burner-job=delete-me
kubectl get ns -l kube-burner-job=delete-me
#
ls kube-burner-*.log
kube-burner-86508d5e-52dc-45de-88ab-d933f48ae0c8.log
cat kube-burner-*.log
# 삭제!
## deployment 는 s1-deployment.yaml 에 metadata.labels 에 추가한 labels 로 지정
## namespace 는 config.yaml 에 job.name 값을 labels 로 지정
cat << EOF > s1-config-delete.yaml
# global:
# measurements:
# - name: none
jobs:
- name: delete-deployments-namespace
qps: 500
burst: 500
namespace: kube-burner-test
jobType: delete
waitWhenFinished: true
objects:
- kind: Deployment
labelSelector: {kube-burner-job: delete-me}
apiVersion: apps/v1
- kind: Namespace
labelSelector: {kube-burner-job: delete-me}
EOF
#
kube-burner init -c s1-config-delete.yaml --log-level debug
Global 설정
measurements: none - 성능 측정 비활성화
Job 설정
jobType: create - 리소스 생성 작업
jobIterations: 1 - Job을 1번만 실행
qps: 1 - 초당 1개 요청으로 제한 (매우 느림)
burst: 1 - 순간 최대 1개 요청만 허용
namespace: kube-burner-test - 대상 네임스페이스
namespaceLabels: {kube-burner-job: delete-me} - 네임스페이스에 삭제용 라벨 추가
waitWhenFinished: true - 작업 완료까지 대기
verifyObjects: false - 객체 검증 비활성화
preLoadImages: true - 이미지 미리 로드
preLoadPeriod: 30s - 이미지 로드 대기시간
replicas: 1 - 템플릿당 1개 생성
템플릿 (s1-deployment.yaml)Deployment 리소스
이름: deployment-{{.Iteration}}-{{.Replica}}
라벨: app: test-{{.Iteration}}-{{.Replica}}
컨테이너: nginx:alpine 이미지
포트: 80번 오픈
레플리카: 1개
생성되는 리소스
root@k8s-ctr:~/kube-burner# kube-burner init -c s1-config.yaml --log-level debug
time="2025-08-31 08:59:26" level=info msg="🔥 Starting kube-burner (1.17.3@917540ff45a89386bb25de45af9b96c9fc360e93) with UUID 510c9899-42cb-48ca-a0b5-ac9da09ae127" file="job.go:91"
time="2025-08-31 08:59:26" level=warning msg="Measurement [none] is not supported" file="factory.go:101"
time="2025-08-31 08:59:26" level=debug msg="job.MaxWaitTimeout is zero in create-deployments, override by timeout: 4h0m0s" file="job.go:361"
time="2025-08-31 08:59:26" level=info msg="QPS: 1" file="job.go:371"
time="2025-08-31 08:59:26" level=info msg="Burst: 1" file="job.go:378"
time="2025-08-31 08:59:26" level=debug msg="Preparing create job: create-deployments" file="create.go:46"
time="2025-08-31 08:59:26" level=debug msg="Rendering template: s1-deployment.yaml" file="create.go:52"
time="2025-08-31 08:59:26" level=info msg="Job create-deployments: 1 iterations with 1 Deployment replicas" file="create.go:84"
time="2025-08-31 08:59:26" level=info msg="Pre-load: images from job create-deployments" file="pre_load.go:73"
time="2025-08-31 08:59:26" level=debug msg="Created namespace: preload-kube-burner" file="namespaces.go:55"
time="2025-08-31 08:59:26" level=info msg="Pre-load: Creating DaemonSet using images [nginx:alpine] in namespace preload-kube-burner" file="pre_load.go:195"
time="2025-08-31 08:59:26" level=info msg="Pre-load: Sleeping for 30s" file="pre_load.go:86"
time="2025-08-31 08:59:56" level=info msg="Deleting 1 namespaces with label: kube-burner-preload=true" file="namespaces.go:67"
time="2025-08-31 08:59:56" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 08:59:57" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 08:59:58" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 08:59:59" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 09:00:00" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 09:00:01" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 09:00:02" level=info msg="Triggering job: create-deployments" file="job.go:122"
time="2025-08-31 09:00:02" level=info msg="0/1 iterations completed" file="create.go:119"
time="2025-08-31 09:00:02" level=debug msg="Creating object replicas from iteration 0" file="create.go:122"
time="2025-08-31 09:00:03" level=debug msg="Created namespace: kube-burner-test-0" file="namespaces.go:55"
time="2025-08-31 09:00:03" level=debug msg="Created Deployment/deployment-0-1 in namespace kube-burner-test-0" file="create.go:288"
time="2025-08-31 09:00:03" level=info msg="Waiting up to 4h0m0s for actions to be completed" file="create.go:169"
time="2025-08-31 09:00:04" level=info msg="Actions in namespace kube-burner-test-0 completed" file="waiters.go:74"
time="2025-08-31 09:00:04" level=info msg="Job create-deployments took 2s" file="job.go:191"
time="2025-08-31 09:00:04" level=info msg="Finished execution with UUID: 510c9899-42cb-48ca-a0b5-ac9da09ae127" file="job.go:264"
time="2025-08-31 09:00:04" level=info msg="👋 Exiting kube-burner 510c9899-42cb-48ca-a0b5-ac9da09ae127" file="kube-burner.go:90"
root@k8s-ctr:~/kube-burner# kubens
cilium-secrets
default
kube-burner-test-0
kube-node-lease
kube-public
kube-system
local-path-storage