본문 바로가기
DevOps/cilium

[Cilium Study] kube-burner

by 서어켜엉 2025. 8. 30.

 

kuber-burner 란?

Kubernetes 클러스터의 성능/부하 테스트와 벤치마크를 위해 만들어진 도구이다.

Red Hat에서 개발했으며, 주로 Openshift 및 Kubernetes 환경의 규모 확장성(Scalability) 검증에 사용된다.

 

주요 기능

  • 워크로드 생성 (Workload Generation)
    사전에 정의된 YAML 매니페스트(예- Deployment, DaemonSet, ConfigMap 등)를 원하는 개수만큼 대량으로 생성하여 클러스터에 부하를 준다.
  • 메트릭 수집 (Metric Collection)
    • Prometheus, Openshift Monitoring 스택에서 메트릭을 수집 가능
    • 노드/파드 리소스 사용량, API 응답 속도, 스케줄링 지연, Pod 생성/삭제 지연 등을 측정
  • 프로파일링 및 보고서
    테스트 종료 후 수집된 메트릭을 분석하여 성능 지표(예- 초당 요청 수, 지연시간, 자원 사용량)를 보고
  • 자동화 지원
    커스텀 CRD를 활용하여 클러스터 내부에서 컨트롤러처럼 동작하거나, CLI로 외부에서 실행할 수도 있음.
  • 스케일 테스트(Scalability Tests)
    • 수천 개 이상의 Pod, Service, ConfigMap 등을 배포해도 안정적으로 동작하는지 확인
    • 특정 버전 업그레이드나 커스터마이징 후 클러스터 성능 검증 가능

 

Kube-burner 설치

#
git clone https://github.com/kube-burner/kube-burner.git
cd kube-burner

# 바이너리 설치(추천) : mac M1
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
tar -xvf kube-burner-V1.17.3-darwin-arm64.tar.gz

curl -LO https://github.com/kube-burner/kube-burner/releases/download/v1.17.3/kube-burner-V1.17.3-linux-x86_64.tar.gz # Windows
tar -xvf kube-burner-V1.17.3-linux-x86_64.tar.gz

sudo cp kube-burner /usr/local/bin

kube-burner -h
#  check-alerts Evaluate alerts for the given time range
#  completion   Generates completion scripts for bash shell
#  destroy      Destroy old namespaces labeled with the given UUID.
#  health-check Check for Health Status of the cluster
#  help         Help about any command
#  import       Import metrics tarball
#  index        Index kube-burner metrics
#  init         Launch benchmark
#  measure      Take measurements for a given set of resources without running workload
#  version      Print the version number of kube-burner

# 버전 확인 : 혹은 go run cmd/kube-burner/kube-burner.go -h
kube-burner version
Version: 1.17.3

 

Deployment 1개 (파드 1개) 생성 -> 삭제, jobIterations qps burst 의미 확인

#
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

 

jobIterations 는 몇번 반복할것인가? 의 의미이다.

jobIterations: 10으로 변경해서 실행했더니 kube-burner-test pod 가 10개가 생성됐다

 

그외 다른 옵션의미

qps 는 API 서버에 요청을 보낼 때 초당 몇개의 요청을 허용할 것인가? 의 의미이다.

burst는 qps를 넘었을 경우에 짧은 시간동안 허용할 수 있는 최대 동시 요청량(버스트 트래픽)이다.

 

종합 동작 예시

jobIterations: 500
qps: 20
burst: 40

 

  • Deployment 500개를 생성하는 테스트 실행
  • API 요청은 초당 평균 20개
  • 순간적으로 최대 40개까지 요청 가능
  • 따라서 "점진적" 또는 "폭발적" 부하 패턴을 제어 가능

 

'DevOps > cilium' 카테고리의 다른 글

[Cilium Study] Cilium Security  (0) 2025.09.07
[Cilium Study] Cilium Performance  (0) 2025.08.31
[Cilium Study] Mutual Authentication  (0) 2025.08.23
[Cilium Study] Cilium Service Mesh 3  (0) 2025.08.20
[Cilium Study] Cilium Service Mesh 2  (1) 2025.08.20