poc0806x

Young-Kyoo Kim·2025년 8월 6일

안녕하세요. MinIO의 S3 호환성 및 성능 벤치마킹 도구인 WARP를 쿠버네티스 환경에서 WARP Operator를 사용하여 테스트하는 절차와 필요한 YAML 파일을 안내해 드리겠습니다.
WARP Operator를 사용하면 kubectl을 통해 선언적으로 벤치마크 테스트를 정의하고 실행할 수 있어 매우 편리합니다.
WARP Operator 테스트 전체 절차

  • 사전 준비: 쿠버네티스 클러스터 및 kubectl 준비, 테스트할 MinIO 서버 정보 확인
  • WARP Operator 설치: 쿠버네티스 클러스터에 WARP Operator를 배포합니다.
  • MinIO 접속 정보 Secret 생성: WARP가 MinIO 서버에 접속할 수 있도록 인증 정보를 쿠버네티스 Secret으로 생성합니다.
  • WARP 테스트 실행 (Custom Resource 생성): Warp 라는 Custom Resource(CR) YAML 파일을 작성하고 클러스터에 적용하여 테스트를 시작합니다.
  • 테스트 결과 확인: 실행된 WARP Pod의 로그를 통해 벤치마크 결과를 확인합니다.
  • 리소스 정리: 테스트 완료 후 관련 리소스를 삭제합니다.
  1. 사전 준비 사항
  • 실행 중인 쿠버네티스 클러스터: kubectl 명령어를 사용할 수 있도록 설정이 완료되어 있어야 합니다.
  • 테스트 대상 MinIO 서버: 성능을 측정할 MinIO 서버가 필요합니다. 해당 서버의 다음 정보를 준비해 주세요.
  1. WARP Operator 설치
    WARP Operator는 공식 GitHub 리포지토리에 있는 operator.yaml 파일을 적용하여 간단하게 설치할 수 있습니다. 이 파일에는 Operator 배포에 필요한 Deployment, ServiceAccount, Role, RoleBinding, 그리고 Warp 테스트를 정의하기 위한 CustomResourceDefinition (CRD)가 모두 포함되어 있습니다.
    아래 명령어를 터미널에서 실행하세요.
    kubectl apply -f https://raw.githubusercontent.com/minio/warp/master/operator/operator.yaml

설치가 완료되면, 다음 명령어로 warp-operator 파드가 정상적으로 실행 중인지 확인합니다.
kubectl get pods -n default -l app=warp-operator

  1. MinIO 접속 정보 Secret 생성
    WARP 테스트 Pod가 MinIO 서버에 안전하게 접속할 수 있도록, 접속 정보를 담은 쿠버네티스 Secret을 생성합니다.
    중요: Secret에 들어가는 값은 Base64로 인코딩되어야 합니다.
    01-minio-secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
    name: minio-credentials # Warp 테스트에서 참조할 Secret 이름
    type: Opaque
    data:

    아래 값을 Base64로 인코딩하여 입력해야 합니다.

    예: echo -n 'http://minio.minio.svc.cluster.local:9000' | base64

    예: echo -n 'minioadmin' | base64

    예: echo -n 'minioadmin' | base64

    endpoint: "aHR0cDovL21pbmlvLm1pbmlvLnN2Yy5jbHVzdGVyLmxvY2FsOjkwMDA=" # 여기에 YOUR_MINIO_ENDPOINT 를 Base64 인코딩하여 입력
    accessKey: "bWluaW9hZG1pbg==" # 여기에 YOUR_ACCESS_KEY 를 Base64 인코딩하여 입력
    secretKey: "bWluaW9hZG1pbg==" # 여기에 YOUR_SECRET_KEY 를 Base64 인코딩하여 입력

Base64 인코딩 명령어 예시:

Endpoint 인코딩

echo -n 'http://minio.minio.svc.cluster.local:9000' | base64

Access Key 인코딩

echo -n 'YOUR_ACCESS_KEY' | base64

Secret Key 인코딩

echo -n 'YOUR_SECRET_KEY' | base64

위 01-minio-secret.yaml 파일을 작성한 후, 클러스터에 적용합니다.
kubectl apply -f 01-minio-secret.yaml

  1. WARP 테스트 실행 (Custom Resource 생성)
    이제 실제 벤치마크 시나리오를 정의하는 Warp Custom Resource(CR) YAML 파일을 작성합니다. 이 파일에서 동시성, 테스트 시간, 테스트 종류(GET, PUT, 혼합) 등을 설정할 수 있습니다.
    아래는 읽기(GET)와 쓰기(PUT)를 혼합하여 5분간 16개의 동시 쓰레드로 테스트하는 예제입니다.
    02-warp-mixed-test.yaml
    apiVersion: minio.min.io/v1alpha1
    kind: Warp
    metadata:
    name: mixed-benchmark-test # 실행할 테스트의 고유 이름
    spec:

    위 3단계에서 생성한 Secret 이름을 지정합니다.

    server:
    secretName: minio-credentials

    동시에 실행할 WARP Pod(인스턴스)의 수입니다.

    concurrent: 16

    테스트 지속 시간 (예: 5m, 1h, 10s)

    duration: "5m"

    WARP 실행 시 사용할 옵션을 지정합니다.

    warp --help 명령어로 가능한 모든 옵션을 확인할 수 있습니다.

    warp:

    # --mixed: 혼합 모드 테스트를 활성화합니다.
    # --mixed.ratio=1:1 : 읽기(GET)와 쓰기(PUT) 비율을 1:1로 설정합니다.
    # --obj.size=64KiB : 테스트에 사용할 객체 크기를 지정합니다.
    # --host=warp-service-name:port (자동으로 설정되므로 명시할 필요 없음)
    # --bucket=warp-benchmark... (자동으로 생성되므로 명시할 필요 없음)
    args: "--mixed --mixed.ratio=1:1 --obj.size=64KiB"

위 02-warp-mixed-test.yaml 파일을 작성한 후, 클러스터에 적용하여 테스트를 시작합니다.
kubectl apply -f 02-warp-mixed-test.yaml

적용 즉시 WARP Operator는 spec에 정의된 내용에 따라 concurrent 수만큼의 WARP Pod를 생성하여 테스트를 시작합니다.
5. 테스트 결과 확인
테스트가 실행되는 동안 또는 완료된 후, WARP Pod의 로그를 통해 결과를 확인할 수 있습니다.

  • WARP Pod 목록 확인:
    app=warp 레이블을 사용하여 테스트를 위해 생성된 Pod들을 확인합니다.
    kubectl get pods -l app=warp

    mixed-benchmark-test-xxxx 와 같은 이름의 Pod들이 보일 것입니다.

  • 개별 Pod 로그 확인:
    Pod 중 하나의 이름을 선택하여 로그를 확인합니다. 테스트가 진행되면서 실시간으로 통계가 출력되며, 테스트가 완료되면 최종 요약 결과가 나타납니다.

    <WARP_POD_NAME>을 위에서 확인한 실제 Pod 이름으로 바꾸세요.

    kubectl logs -f <WARP_POD_NAME>

결과 예시 (로그 마지막 부분):
...
WARP Mix Summary:
Operation: DELETE, Concurrency: 16, Duration: 2m59.991s
Requests: 973, 5.41 req/s
Bandwidth: 354.38 KiB/s
Latency: avg: 2.92s, 50%: 2.91s, 90%: 3s, 99%: 3.25s
Errors: 0

   Operation: GET, Concurrency: 16, Duration: 2m59.991s
     Requests: 972, 5.40 req/s
   Bandwidth: 354.03 KiB/s
     Latency: avg: 2.92s, 50%: 2.91s, 90%: 3s, 99%: 3.25s
     Errors: 0

   Operation: PUT, Concurrency: 16, Duration: 2m59.991s
     Requests: 974, 5.41 req/s
   Bandwidth: 354.73 KiB/s
     Latency: avg: 2.92s, 50%: 2.91s, 90%: 3s, 99%: 3.25s
     Errors: 0

   Operation: STAT, Concurrency: 16, Duration: 2m59.991s
     Requests: 973, 5.41 req/s
   Bandwidth: 354.38 KiB/s
     Latency: avg: 2.92s, 50%: 2.91s, 90%: 3s, 99%: 3.25s
     Errors: 0

Mixed workload total:
Requests: 3892, 21.62 req/s
Bandwidth: 1.38 MiB/s

  1. 리소스 정리
    테스트가 모두 끝나면 아래 명령어로 관련 리소스를 모두 삭제하여 클러스터를 깨끗하게 유지할 수 있습니다.

WARP 테스트 리소스 삭제

kubectl delete -f 02-warp-mixed-test.yaml

MinIO 접속 정보 Secret 삭제

kubectl delete -f 01-minio-secret.yaml

WARP Operator 삭제

kubectl delete -f https://raw.githubusercontent.com/minio/warp/master/operator/operator.yaml

이 절차를 통해 쿠버네티스 환경에서 WARP Operator를 활용하여 체계적으로 MinIO 성능 벤치마크를 수행할 수 있습니다. 02-warp-mixed-test.yaml 파일의 spec.warp.args 부분을 수정하여 다양한 시나리오의 테스트를 진행해 보시기 바랍니다.

0개의 댓글