스터디/Cilium

[Cilium] K8s Performance with Kube-burner

안녕유지 2025. 8. 31. 03:39
Cloudnet Cilium 7주차 스터디를 진행하며 정리한 글입니다.

 

 

실습 환경 준비

kind 클러스터를 생성하고, kube-ops-view, metrics-server, kube-prometheus-stack을 설치합니다.

 

 

Kube-burner

kube-burner는 Go로 작성된 벤치마킹 툴로, 대규모 리소스 생성/삭제와 Prometheus 기반 메트릭 수집을 지원합니다.

 

https://github.com/kube-burner/kube-burner

 

GitHub - kube-burner/kube-burner: Kubernetes performance and scale test orchestration framework written in golang

Kubernetes performance and scale test orchestration framework written in golang - kube-burner/kube-burner

github.com

 

kube-burner 특징

  • 대규모 리소스 테스트 : Deployment, Pod 등을 원하는 만큼 생성/삭제 가능
  • Prometheus 연동 : 성능 메트릭 자동 수집 및 인덱싱
  • Measurements & Alerting : 특정 조건에 따른 성능 측정/알람
  • Golang 기반 : 공식 client-go 라이브러리 사용

 

먼저 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

> sudo cp kube-burner /usr/local/bin

> kube-burner -h                                                                    

Kube-burner 🔥

Tool aimed at stressing a kubernetes cluster by creating or deleting lots of objects.

Usage:
  kube-burner [command]

Available Commands:
  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

Flags:
  -h, --help               help for kube-burner
      --log-level string   Allowed values: debug, info, warn, error, fatal (default "info")

Use "kube-burner [command] --help" for more information about a command.

 

첫 번째 시나리오는 deployment 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 -c s1-config.yaml --log-level debug                           
time="2025-08-31 02:25:00" level=info msg="🔥 Starting kube-burner (1.17.3@917540ff45a89386bb25de45af9b96c9fc360e93) with UUID a93f7e08-4017-4e11-a094-453a8a683eac" file="job.go:91"
time="2025-08-31 02:25:00" level=warning msg="Measurement [none] is not supported" file="factory.go:101"
time="2025-08-31 02:25:00" level=debug msg="job.MaxWaitTimeout is zero in create-deployments, override by timeout: 4h0m0s" file="job.go:361"
time="2025-08-31 02:25:00" level=info msg="QPS: 1" file="job.go:371"
time="2025-08-31 02:25:00" level=info msg="Burst: 1" file="job.go:378"
time="2025-08-31 02:25:00" level=debug msg="Preparing create job: create-deployments" file="create.go:46"
time="2025-08-31 02:25:00" level=debug msg="Rendering template: s1-deployment.yaml" file="create.go:52"
time="2025-08-31 02:25:00" level=info msg="Job create-deployments: 1 iterations with 1 Deployment replicas" file="create.go:84"
time="2025-08-31 02:25:00" level=info msg="Pre-load: images from job create-deployments" file="pre_load.go:73"
time="2025-08-31 02:25:00" level=debug msg="Created namespace: preload-kube-burner" file="namespaces.go:55"
time="2025-08-31 02:25:00" 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 02:25:00" level=info msg="Pre-load: Sleeping for 30s" file="pre_load.go:86"
time="2025-08-31 02:25:30" level=info msg="Deleting 1 namespaces with label: kube-burner-preload=true" file="namespaces.go:67"
time="2025-08-31 02:25:30" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:25:31" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:25:32" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:25:33" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:25:34" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:25:35" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:25:36" level=info msg="Triggering job: create-deployments" file="job.go:122"
time="2025-08-31 02:25:36" level=info msg="0/1 iterations completed" file="create.go:119"
time="2025-08-31 02:25:36" level=debug msg="Creating object replicas from iteration 0" file="create.go:122"
time="2025-08-31 02:25:37" level=info msg="Namespace kube-burner-test-0 already exists" file="namespaces.go:44"
time="2025-08-31 02:25:38" level=error msg="Deployment/deployment-0-1 in namespace kube-burner-test-0 already exists" file="create.go:269"
time="2025-08-31 02:25:38" level=info msg="Waiting up to 4h0m0s for actions to be completed" file="create.go:169"
time="2025-08-31 02:25:39" level=info msg="Actions in namespace kube-burner-test-0 completed" file="waiters.go:74"
time="2025-08-31 02:25:39" level=info msg="Job create-deployments took 3s" file="job.go:191"
time="2025-08-31 02:25:39" level=info msg="Finished execution with UUID: a93f7e08-4017-4e11-a094-453a8a683eac" file="job.go:264"
time="2025-08-31 02:25:39" level=info msg="👋 Exiting kube-burner a93f7e08-4017-4e11-a094-453a8a683eac" file="kube-burner.go:90"

Every 2.0s: kubectl get ns,pod -A                                               
                                                                                                           
NAME                            STATUS   AGE
namespace/default               Active   12m
namespace/kube-node-lease       Active   12m
namespace/kube-public           Active   12m
namespace/kube-system           Active   12m
namespace/local-path-storage    Active   12m
namespace/monitoring            Active   9m18s
namespace/preload-kube-burner   Active   15s # 생성

NAMESPACE             NAME                                                            READY   STATUS    RESTARTS   AGE
kube-system           pod/coredns-674b8bbfcf-fxfgv                                    1/1     Running   0          12m
kube-system           pod/coredns-674b8bbfcf-wmfjl                                    1/1     Running   0          12m
kube-system           pod/etcd-myk8s-control-plane                                    1/1     Running   0          12m
kube-system           pod/kindnet-9xtnc                                               1/1     Running   0          12m
kube-system           pod/kube-apiserver-myk8s-control-plane                          1/1     Running   0          12m
kube-system           pod/kube-controller-manager-myk8s-control-plane                 1/1     Running   0          12m


> kubectl get deploy -A -l kube-burner-job=delete-me                     
NAMESPACE            NAME             READY   UP-TO-DATE   AVAILABLE   AGE
kube-burner-test-0   deployment-0-1   1/1     1            1           4m45s

> kubectl get pod -A -l kube-burner-job=delete-me                        
NAMESPACE            NAME                              READY   STATUS    RESTARTS   AGE
kube-burner-test-0   deployment-0-1-57c74b55f5-wf7kq   1/1     Running   0          5m13s

> kubectl get ns -l kube-burner-job=delete-me                             

NAME                 STATUS   AGE
kube-burner-test-0   Active   5m31s


# 삭제!
## 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                          

time="2025-08-31 02:30:44" level=info msg="🔥 Starting kube-burner (1.17.3@917540ff45a89386bb25de45af9b96c9fc360e93) with UUID f78e5ced-86fd-45a5-a313-1f33d8271bff" file="job.go:91"
time="2025-08-31 02:30:44" level=debug msg="job.MaxWaitTimeout is zero in delete-deployments-namespace, override by timeout: 4h0m0s" file="job.go:361"
time="2025-08-31 02:30:44" level=info msg="QPS: 500" file="job.go:371"
time="2025-08-31 02:30:44" level=info msg="Burst: 500" file="job.go:378"
time="2025-08-31 02:30:44" level=debug msg="Preparing delete job: delete-deployments-namespace" file="delete.go:33"
time="2025-08-31 02:30:44" level=debug msg="Job delete-deployments-namespace: delete Deployment with selector kube-burner-job=delete-me" file="delete.go:45"
time="2025-08-31 02:30:44" level=debug msg="Job delete-deployments-namespace: delete Namespace with selector kube-burner-job=delete-me" file="delete.go:45"
time="2025-08-31 02:30:44" level=info msg="Triggering job: delete-deployments-namespace" file="job.go:122"
time="2025-08-31 02:30:44" level=info msg="Found 1 deployments with selector kube-burner-job=delete-me; patching them" file="utils.go:207"
time="2025-08-31 02:30:44" level=debug msg="Removing Deployment/deployment-0-1 from namespace kube-burner-test-0" file="delete.go:55"
time="2025-08-31 02:30:44" level=info msg="Found 1 namespaces with selector kube-burner-job=delete-me; patching them" file="utils.go:207"
time="2025-08-31 02:30:44" level=debug msg="Removing Namespace/kube-burner-test-0" file="delete.go:58"
time="2025-08-31 02:30:44" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-job=delete-me to be deleted" file="delete.go:79"
time="2025-08-31 02:30:46" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-job=delete-me to be deleted" file="delete.go:79"
time="2025-08-31 02:30:48" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-job=delete-me to be deleted" file="delete.go:79"
time="2025-08-31 02:30:50" level=info msg="Job delete-deployments-namespace took 6s" file="job.go:191"
time="2025-08-31 02:30:50" level=info msg="Finished execution with UUID: f78e5ced-86fd-45a5-a313-1f33d8271bff" file="job.go:264"
time="2025-08-31 02:30:50" level=info msg="👋 Exiting kube-burner f78e5ced-86fd-45a5-a313-1f33d8271bff" file="kube-burner.go:90"

 

 

 

jobIterations, qps, burst 의미는 다음과 같습니다.

  • jobIterations: job 반복 횟수 (ex: 5 → Deployment 5개 생성)
  • qps: 초당 평균 요청 수 (쿼리 속도 제한)
  • burst: 순간적으로 처리 가능한 최대 요청 수 (버퍼)

 

이 값의 의미를 확인하기 위해 다음 3가지 상황을 테스트해보겠습니다.

 

1) jobIterations: 10, qps: 1, burst: 10 → 초당 1개씩, 순간 최대 10개 가능

> cat << EOF > s1-config.yaml
global:
  measurements:
    - name: none

jobs:
  - name: create-deployments
    jobType: create
    jobIterations: 10  # How many times to execute the job , 해당 job을 5번 반복 실행
    qps: 1            # Limit object creation queries per second , 	초당 최대 요청 수 (평균 속도 제한) - qps: 10이면 초당 10개 요청
    burst: 10          # 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

# watch로 모니터링 (기존)
Every 2.0s: kubectl get ns,pod -A                                                 
                                                                                                          
NAME                           STATUS   AGE
namespace/default              Active   27m
namespace/kube-node-lease      Active   27m
namespace/kube-public          Active   27m
namespace/kube-system          Active   27m
namespace/local-path-storage   Active   27m
namespace/monitoring           Active   24m

NAMESPACE            NAME                                                            READY   STATUS    RESTARTS   AGE
kube-system          pod/coredns-674b8bbfcf-fxfgv                                    1/1     Running   0          27m
kube-system          pod/coredns-674b8bbfcf-wmfjl                                    1/1     Running   0          27m
kube-system          pod/etcd-myk8s-control-plane                                    1/1     Running   0          27m
kube-system          pod/kindnet-9xtnc                                               1/1     Running   0          27m
kube-system          pod/kube-apiserver-myk8s-control-plane                          1/1     Running   0          27m
kube-system          pod/kube-controller-manager-myk8s-control-plane                 1/1     Running   0          27m
kube-system          pod/kube-ops-view-6658c477d4-849tw                              1/1     Running   0          26m


# watch로 모니터링 (테스트)
Every 2.0s: kubectl get ns,pod -A                                                 
                                                                                                         
NAME                           STATUS   AGE
namespace/default              Active   30m
namespace/kube-burner-test-0   Active   94s
namespace/kube-burner-test-1   Active   94s
namespace/kube-burner-test-2   Active   94s
namespace/kube-burner-test-3   Active   94s
namespace/kube-burner-test-4   Active   94s
namespace/kube-burner-test-5   Active   94s
namespace/kube-burner-test-6   Active   94s
namespace/kube-burner-test-7   Active   94s
namespace/kube-burner-test-8   Active   94s
namespace/kube-burner-test-9   Active   93s
namespace/kube-node-lease      Active   30m
namespace/kube-public          Active   30m
namespace/kube-system          Active   30m
namespace/local-path-storage   Active   30m
namespace/monitoring           Active   27m

NAMESPACE            NAME                                                            READY   STATUS    RESTARTS   AGE
kube-burner-test-0   pod/deployment-0-1-ff8bf794f-jw8bm                              1/1     Running   0          94s
kube-burner-test-1   pod/deployment-1-1-6595689b5-45bpg                              1/1     Running   0          94s
kube-burner-test-2   pod/deployment-2-1-5fcbd74777-hdd9m                             1/1     Running   0          94s
kube-burner-test-3   pod/deployment-3-1-5554575bc7-6l475                             1/1     Running   0          94s
kube-burner-test-4   pod/deployment-4-1-6459f575df-rdrrk                             1/1     Running   0          94s
kube-burner-test-5   pod/deployment-5-1-cd6b64cb5-nxm6n                              1/1     Running   0          94s
kube-burner-test-6   pod/deployment-6-1-5f98d556b5-qr2lh                             1/1     Running   0          94s
kube-burner-test-7   pod/deployment-7-1-7c474fb445-fx8x6                             1/1     Running   0          94s
kube-burner-test-8   pod/deployment-8-1-56f8998b57-dhvhn                             1/1     Running   0          94s
kube-burner-test-9   pod/deployment-9-1-5c66996f89-c5bcl                             1/1     Running   0          93s
kube-system          pod/coredns-674b8bbfcf-fxfgv                                    1/1     Running   0          30m
kube-system          pod/coredns-674b8bbfcf-wmfjl                                    1/1     Running   0          30m
kube-system          pod/etcd-myk8s-control-plane                                    1/1     Running   0          30m
kube-system          pod/kindnet-9xtnc                                               1/1     Running   0          30m
...


> kube-burner init -c s1-config.yaml --log-level debug                             

time="2025-08-31 02:39:46" level=info msg="🔥 Starting kube-burner (1.17.3@917540ff45a89386bb25de45af9b96c9fc360e93) with UUID 67951a2a-6c4b-4f83-8708-d3d0d5767816" file="job.go:91"
time="2025-08-31 02:39:46" level=warning msg="Measurement [none] is not supported" file="factory.go:101"
time="2025-08-31 02:39:46" level=debug msg="job.MaxWaitTimeout is zero in create-deployments, override by timeout: 4h0m0s" file="job.go:361"
time="2025-08-31 02:39:46" level=info msg="QPS: 1" file="job.go:371"
time="2025-08-31 02:39:46" level=info msg="Burst: 10" file="job.go:378"
time="2025-08-31 02:39:46" level=debug msg="Preparing create job: create-deployments" file="create.go:46"
time="2025-08-31 02:39:46" level=debug msg="Rendering template: s1-deployment.yaml" file="create.go:52"
time="2025-08-31 02:39:46" level=info msg="Job create-deployments: 10 iterations with 1 Deployment replicas" file="create.go:84"
time="2025-08-31 02:39:46" level=info msg="Pre-load: images from job create-deployments" file="pre_load.go:73"
time="2025-08-31 02:39:47" level=debug msg="Created namespace: preload-kube-burner" file="namespaces.go:55"
time="2025-08-31 02:39:47" 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 02:39:47" level=info msg="Pre-load: Sleeping for 30s" file="pre_load.go:86"
time="2025-08-31 02:40:17" level=info msg="Deleting 1 namespaces with label: kube-burner-preload=true" file="namespaces.go:67"
time="2025-08-31 02:40:17" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:40:18" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:40:19" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:40:20" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:40:21" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:40:22" level=debug msg="Waiting for 1 namespaces labeled with kube-burner-preload=true to be deleted" file="namespaces.go:90"
time="2025-08-31 02:40:23" level=info msg="Triggering job: create-deployments" file="job.go:122"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 0" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-0" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=info msg="1/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 1" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-1" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-0-1 in namespace kube-burner-test-0" file="create.go:288"
time="2025-08-31 02:40:23" level=info msg="2/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 2" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-1-1 in namespace kube-burner-test-1" file="create.go:288"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-2" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=info msg="3/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 3" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-3" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=info msg="4/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 4" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-2-1 in namespace kube-burner-test-2" file="create.go:288"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-4" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=info msg="5/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 5" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-3-1 in namespace kube-burner-test-3" file="create.go:288"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-4-1 in namespace kube-burner-test-4" file="create.go:288"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-5" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=info msg="6/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 6" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-6" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=info msg="7/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 7" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-5-1 in namespace kube-burner-test-5" file="create.go:288"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-7" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=info msg="8/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 8" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-6-1 in namespace kube-burner-test-6" file="create.go:288"
time="2025-08-31 02:40:23" level=debug msg="Created namespace: kube-burner-test-8" file="namespaces.go:55"
time="2025-08-31 02:40:23" level=info msg="9/10 iterations completed" file="create.go:119"
time="2025-08-31 02:40:23" level=debug msg="Creating object replicas from iteration 9" file="create.go:122"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-7-1 in namespace kube-burner-test-7" file="create.go:288"
time="2025-08-31 02:40:23" level=debug msg="Created Deployment/deployment-8-1 in namespace kube-burner-test-8" file="create.go:288"
time="2025-08-31 02:40:24" level=debug msg="Created namespace: kube-burner-test-9" file="namespaces.go:55"
time="2025-08-31 02:40:24" level=debug msg="Created Deployment/deployment-9-1 in namespace kube-burner-test-9" file="create.go:288"
time="2025-08-31 02:40:24" level=info msg="Waiting up to 4h0m0s for actions to be completed" file="create.go:169"
time="2025-08-31 02:40:24" level=debug msg="Waiting for replicas from Deployment in ns kube-burner-test-0 to be ready" file="waiters.go:152"
time="2025-08-31 02:40:25" level=info msg="Actions in namespace kube-burner-test-0 completed" file="waiters.go:74"
time="2025-08-31 02:40:26" level=info msg="Actions in namespace kube-burner-test-1 completed" file="waiters.go:74"
time="2025-08-31 02:40:27" level=info msg="Actions in namespace kube-burner-test-2 completed" file="waiters.go:74"
time="2025-08-31 02:40:28" level=info msg="Actions in namespace kube-burner-test-3 completed" file="waiters.go:74"
time="2025-08-31 02:40:29" level=info msg="Actions in namespace kube-burner-test-4 completed" file="waiters.go:74"
time="2025-08-31 02:40:30" level=info msg="Actions in namespace kube-burner-test-5 completed" file="waiters.go:74"
time="2025-08-31 02:40:31" level=info msg="Actions in namespace kube-burner-test-6 completed" file="waiters.go:74"
time="2025-08-31 02:40:32" level=info msg="Actions in namespace kube-burner-test-7 completed" file="waiters.go:74"
time="2025-08-31 02:40:33" level=info msg="Actions in namespace kube-burner-test-8 completed" file="waiters.go:74"
time="2025-08-31 02:40:34" level=info msg="Actions in namespace kube-burner-test-9 completed" file="waiters.go:74"
time="2025-08-31 02:40:34" level=info msg="Job create-deployments took 11s" file="job.go:191"
time="2025-08-31 02:40:34" level=info msg="Finished execution with UUID: 67951a2a-6c4b-4f83-8708-d3d0d5767816" file="job.go:264"
time="2025-08-31 02:40:34" level=info msg="👋 Exiting kube-burner 67951a2a-6c4b-4f83-8708-d3d0d5767816" file="kube-burner.go:90"

 

 

 

기존

 

테스트 jobIterations: 10, burst: 10

 

 

2) jobIterations: 100, qps: 1, burst: 100 → 초당 1개지만 burst로 인해 초반 몰림 현상 가능, 조금 느려짐

> cat << EOF > s1-config.yaml
global:
  measurements:
    - name: none

jobs:
  - name: create-deployments
    jobType: create
    jobIterations: 100  # How many times to execute the job , 해당 job을 5번 반복 실행
    qps: 1            # Limit object creation queries per second , 	초당 최대 요청 수 (평균 속도 제한) - qps: 10이면 초당 10개 요청
    burst: 100          # 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

# watch로 모니터링 (기존)
Every 2.0s: kubectl get ns,pod -A                                
                                   
                                                                                                           
NAME                            STATUS   AGE
namespace/default               Active   35m
namespace/kube-burner-test-0    Active   60s
namespace/kube-burner-test-1    Active   60s
namespace/kube-burner-test-10   Active   60s
namespace/kube-burner-test-11   Active   60s
namespace/kube-burner-test-12   Active   60s
namespace/kube-burner-test-13   Active   60s
namespace/kube-burner-test-14   Active   60s
namespace/kube-burner-test-15   Active   60s
namespace/kube-burner-test-16   Active   60s
namespace/kube-burner-test-17   Active   60s
namespace/kube-burner-test-18   Active   60s
namespace/kube-burner-test-19   Active   60s
namespace/kube-burner-test-2    Active   60s
namespace/kube-burner-test-20   Active   60s
namespace/kube-burner-test-21   Active   60s
namespace/kube-burner-test-22   Active   60s
namespace/kube-burner-test-23   Active   60s
namespace/kube-burner-test-24   Active   60s
namespace/kube-burner-test-25   Active   60s
namespace/kube-burner-test-26   Active   60s
namespace/kube-burner-test-27   Active   60s
namespace/kube-burner-test-28   Active   60s
namespace/kube-burner-test-29   Active   60s
..

기존

 

테스트 jobIterations: 100, burst: 100

 

3) jobIterations: 10, qps: 1, burst: 10, replicas:2→ 초당 1개 Deployment 생성은 동일, 각 Deployment마다 Pod 2개 동시 스케줄링

> cat << EOF > s1-config.yaml
global:
  measurements:
    - name: none

jobs:
  - name: create-deployments
    jobType: create
    jobIterations: 10  # How many times to execute the job , 해당 job을 5번 반복 실행
    qps: 1            # Limit object creation queries per second , 	초당 최대 요청 수 (평균 속도 제한) - qps: 10이면 초당 10개 요청
    burst: 10          # 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: 2
EOF


Every 2.0s: kubectl get ns,pod -A                                                 
                                                                                                           
NAME                           STATUS   AGE
namespace/default              Active   81m
namespace/kube-burner-test-0   Active   5s
namespace/kube-burner-test-1   Active   5s
namespace/kube-burner-test-2   Active   5s
namespace/kube-burner-test-3   Active   5s
namespace/kube-burner-test-4   Active   5s
namespace/kube-burner-test-5   Active   4s
namespace/kube-burner-test-6   Active   2s
namespace/kube-burner-test-7   Active   0s
namespace/kube-node-lease      Active   81m
namespace/kube-public          Active   81m
namespace/kube-system          Active   81m
namespace/local-path-storage   Active   81m
namespace/monitoring           Active   79m

NAMESPACE            NAME                                                            READY   STATUS              RESTART
S   AGE
kube-burner-test-0   pod/deployment-0-1-847b4c769f-d5mzf                             1/1     Running             0
    5s
kube-burner-test-0   pod/deployment-0-2-5d594cf9fc-n9sdm                             1/1     Running             0
    5s
kube-burner-test-1   pod/deployment-1-1-6f8cb5b47f-sxns7                             1/1     Running             0
    5s
kube-burner-test-1   pod/deployment-1-2-d4c9fd8df-s9dcg                              1/1     Running             0
    5s
kube-burner-test-2   pod/deployment-2-1-76645b9b7f-cvllp                             1/1     Running             0
    5s
kube-burner-test-2   pod/deployment-2-2-bdc4f8789-rm5pb                              1/1     Running             0
    5s
kube-burner-test-3   pod/deployment-3-1-66b4fdff59-vcdcv                             1/1     Running             0
    5s
kube-burner-test-3   pod/deployment-3-2-54c7cbc689-phw2z                             1/1     Running             0

기존
테스트 replicas: 2

 

 

4) jobIterations:10, qps:1, burst:20, replicas:1 -> 초당 1개씩 직렬 생성 단, 시작 시 짧은 burst 대기열이 생길 수 있음

> cat << EOF > s1-config.yaml
global:
  measurements:
    - name: none

jobs:
  - name: create-deployments
    jobType: create
    jobIterations: 10  # How many times to execute the job , 해당 job을 5번 반복 실행
    qps: 1            # Limit object creation queries per second , 	초당 최대 요청 수 (평균 속도 제한) - qps: 10이면 초당 10개 요청
    burst: 20          # 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

Every 2.0s: kubectl get ns,pod -A                                                

NAME                           STATUS   AGE
namespace/default              Active   85m
namespace/kube-burner-test-0   Active   3s
namespace/kube-burner-test-1   Active   3s
namespace/kube-burner-test-2   Active   3s
namespace/kube-burner-test-3   Active   3s
namespace/kube-burner-test-4   Active   3s
namespace/kube-burner-test-5   Active   2s
namespace/kube-node-lease      Active   85m
namespace/kube-public          Active   85m
namespace/kube-system          Active   85m
namespace/local-path-storage   Active   85m
namespace/monitoring           Active   82m

NAMESPACE            NAME                                                            READY   STATUS              RESTART
S   AGE
kube-burner-test-0   pod/deployment-0-1-6664d44df6-glfhr                             1/1     Running             0
    3s
kube-burner-test-0   pod/deployment-0-2-9d7fb5bf4-wb9ft                              1/1     Running             0
    3s
kube-burner-test-1   pod/deployment-1-1-6f9dbd4b4-tg6pl                              1/1     Running             0
    2s
kube-burner-test-1   pod/deployment-1-2-7484f79f66-k9n42                             1/1     Running             0
    2s
kube-burner-test-2   pod/deployment-2-1-768b6b6ff6-dc2td                             1/1     Running             0
    2s
kube-burner-test-2   pod/deployment-2-2-84978b45c8-bb8t7                             1/1     Running             0
    2s
kube-burner-test-3   pod/deployment-3-1-bc4f44f48-966pw                              1/1     Running             0
    2s
kube-burner-test-3   pod/deployment-3-2-5d895f78c4-jtkrd                             1/1     Running             0
    2s

 

 

기존
burst: 20

 

 

이를 통해 replicas는 Deployment 당 Pod 개수를 바꾸는 것이고, jobIterations, qps, burst 조합은 얼마나 빠르게 Deployment를 만들 것인가를 결정한다는 것을 알 수 있었습니다.

 

 

'스터디 > Cilium' 카테고리의 다른 글

[Cilium] Cilium Security  (0) 2025.09.07
[Cilium] Cilium Performance  (1) 2025.08.31
[Cilium] Gateway API  (2) 2025.08.24
[Cilium] Cilium Ingress  (4) 2025.08.23
[Cilium] Cluster Mesh  (2) 2025.08.17