kube-burner

개요


kube-burner는 쿠버네티스 클러스터의 성능을 테스트하는 도구로 불내는데(?) 유용하다.
쿠버네티스 Go 클라이언트 라이브러리인 client-go를 이용에 테스트에 용이하도록 기능을 만든 어플리케이션이다.

기본적으로 api 서버에 대한 여러 요청을 날릴 수 있고 프로메테우스 기반 모니터링, 측정, 알람 기능도 갖추고 있다.
테스트에 사용할 양식 파일을 먼저 만들고, 이후에 kube-burner에서 지원하는 커스텀 리소스 양식으로 이를 참조한 뒤에 사용한다.
그래서 원하는 테스트 상황을 마음대로 만들 수 있다는 장점이 있다.

사용법

사용할 커맨드가 많지 않다.

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 tarball 압축 파일에서 메트릭 불러오기
index        Index kube-burner metrics 메트릭 인덱싱(start, end 시간으로 범위 지정)
init         Launch benchmark 벤치마크 실행
measure      Take measurements for a given set of resources without running workload 워크로드 실행 없이 리소스만 테스트
version      Print the version number of kube-burner 

보다시피 init이 벤치마킹을 수행하는 명령어이다.
여기에 -c 옵션으로 설정 파일을 넣어서 실행한다.

벤치마킹의 반환 코드는 다음의 뜻을 가진다.

설정 파일 작성법

go-template 양식의 파일을 지원한다.

metricsEndpoints:
{{ if .OS_INDEXING }}
  - prometheusURL: http://localhost:9090
    indexer:
      type: opensearch
      esServers: ["{{ .ES_SERVER }}"]
      defaultIndex: {{ .ES_INDEX }}
{{ end }}
{{ if .LOCAL_INDEXING }}
  - prometheusURL: http://localhost:9090
    indexer:
      type: local
      metricsDirectory: {{ .METRICS_FOLDER }}
{{ end }}

이때 파일은 크게 몇 가지 대범주의 필드로 작성한다.

위 4가지 유형의 잡타입 말고, churn이란 동작을 하는 것도 가능하다.

jobs:
- name: cluster-density
  jobIterations: 100
  namespacedIterations: true
  namespace: churning
  churn: true
  churnPercent: 20
  churnDuration: 2h
  churnDelay: 0s
  objects:
  - objectTemplate: deployment.yml
    replicas: 10
  - objectTemplate: service.yml
    replicas: 10

churn은 이전 오브젝트를 지우고 재생성하는 동작이다.
잡 순회를 하며 이전 오브젝트를 일부 지우고 그대로 새로 리소스를 만드는 식으로 동작한다.
휘젓는 느낌이라 churn으로 부르는 모양이다.

오브젝트 파일

기본으로 오브젝트에 주입되는 변수는 다음과 같다.

설명은 생략하고 사용예시만 본다.

apiVersion: v1
kind: Service
metadata:
  name: sleep-app-{{.Iteration}}-{{.Replica}}
  labels:
    name: my-app-{{.Iteration}}-{{.Replica}}
spec:
  selector:
    app: sleep-app-{{.Iteration}}-{{.Replica}}
  ports:
  - name: serviceport
    protocol: TCP
    port: "{{.port}}"
    targetPort: "{{.targetPort}}"
  type: ClusterIP

여기에 여러 함수를 사용할 수 있는데, 기본 고랭 템플릿과 sprig 라이브러리[^1]의 함수들이 지원된다.

측정 지표

위의 measurements에서 설정할 수 있는 지표는 여러 가지가 있다.
기본적으로 지표를 넣으면 측정 수치가 나온다(아래는 podLatency 예시).

{
  "timestamp": "2020-11-15T20:28:59.598727718Z",
  "schedulingLatency": 4,
  "initializedLatency": 20,
  "containersReadyLatency": 2997,
  "podReadyLatency": 2997,
  "metricName": "podLatencyMeasurement",
  "uuid": "c40b4346-7af7-4c63-9ab4-aae7ccdd0616",
  "namespace": "kubelet-density",
  "podName": "kubelet-density-13",
  "nodeName": "worker-001",
  "jobName": "create-pods",
  "jobIteration": "2",
  "replica": "3",
}

이에 대한 메트릭 지표는 다음과 같은 방식으로 합쳐진다.

{
  "quantileName": "Ready",
  "uuid": "23c0b5fd-c17e-4326-a389-b3aebc774c82",
  "P99": 3774,
  "P95": 3510,
  "P50": 2897,
  "max": 3774,
  "avg": 2876.3,
  "timestamp": "2020-11-15T22:26:51.553221077+01:00",
  "metricName": "podLatencyQuantilesMeasurement",
},
{
  "quantileName": "PodScheduled",
  "uuid": "23c0b5fd-c17e-4326-a389-b3aebc774c82",
  "P99": 64,
  "P95": 8,
  "P50": 5,
  "max": 64,
  "avg": 5.38,
  "timestamp": "2020-11-15T22:26:51.553225151+01:00",
  "metricName": "podLatencyQuantilesMeasurement",
}

자세한 측정 지표들에 대한 정보는 문서를 확인한다.[^2]

하위 문서

이름 is-folder index noteType created
kubeadm - - knowledge 2024-08-05
crictl - - knowledge 2024-08-26
Helm - - knowledge 2024-10-17
false - knowledge 2024-12-28
K9s false - knowledge 2024-12-28
kubectl false - knowledge 2025-02-03
kubestr false - knowledge 2025-02-19
KIND false - knowledge 2025-04-06
Kubespray false 8 knowledge 2025-06-09
kube-burner false 9 knowledge 2025-08-31

관련 문서

EXPLAIN - 파생 문서

이름0related생성 일자

Dataview: No results to show for table query.

기타 문서

Z0-연관 knowledge, Z1-트러블슈팅 Z2-디자인,설계, Z3-임시, Z5-프로젝트,아카이브, Z8,9-미분류,미완
이름0코드타입생성 일자

Dataview: No results to show for table query.

참고