Hyperdisk로 스토리지 성능 확장


Compute Engine Persistent Disk CSI 드라이버는 Google Kubernetes Engine(GKE) 클러스터가 있는 Hyperdisk 스토리지에 액세스하기 위한 기본 방법입니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

요구사항

GKE에서 Hyperdisk 볼륨을 사용하려면 클러스터가 다음 요구사항을 충족해야 합니다.

  • GKE 버전 1.26 이상을 실행하는 Linux 클러스터를 사용하세요. 출시 채널을 사용하는 경우 채널에 이 드라이버에 필요한 최소 GKE 버전이나 그 이상의 버전이 있는지 확인해야 합니다.
  • Compute Engine Persistent Disk CSI 드라이버가 사용 설정되어 있는지 확인하세요. Compute Engine Persistent Disk 드라이버는 기본적으로 새로운 Autopilot 및 Standard 클러스터에서 사용 설정되며 Autopilot 사용 시 사용 중지하거나 수정할 수 없습니다. 클러스터에서 Compute Engine Persistent Disk CSI 드라이버를 사용 설정해야 하는 경우 기존 클러스터에서 Compute Engine Persistent Disk CSI 드라이버 사용 설정을 참조하세요.

GKE용 Hyperdisk 볼륨 만들기

이 섹션에서는 GKE에서 Compute Engine CSI 드라이버가 지원하는 Hyperdisk 볼륨을 만드는 방법을 간략하게 설명합니다.

StorageClass 만들기

다음 Persistent Disk 스토리지 Type 필드는 Compute Engine Persistent Disk CSI 드라이버에서 하이퍼디스크를 지원하기 위해 제공됩니다.

  • hyperdisk-balanced
  • hyperdisk-throughput
  • hyperdisk-extreme
  • hyperdisk-ml

원하는 처리량 또는 IOPS 수준으로 새 StorageClass를 만들려면 프로비저닝 도구 필드에 pd.csi.storage.gke.io를 사용하고 하이퍼디스크 스토리지 유형 중 하나를 지정합니다.

각 하이퍼디스크 유형에는 프로비저닝된 초기 디스크 크기로 결정된 성능을 위한 기본값이 포함됩니다. StorageClass를 만들 때는 하이퍼디스크 유형에 따라 다음 매개변수를 선택적으로 지정할 수 있습니다. 이러한 매개변수를 생략하면 대신 GKE가 디스크 유형 기본값에 따라 용량을 사용합니다. 처리량 또는 IOPS에 허용되는 값에 대한 안내는 하이퍼디스크 볼륨의 성능 수준 계획을 참조하세요.

매개변수 하이퍼디스크 유형 사용
provisioned-throughput-on-create 하이퍼디스크 균형*, 하이퍼디스크 처리량 "Mi" 한정자를 사용하여 처리량 값(MiBps)을 표현합니다. 예를 들어 필요한 처리량이 250MiBps이면 StorageClass를 만들 때 "250Mi"를 지정합니다.
provisioned-iops-on-create 하이퍼디스크 균형, 하이퍼디스크 IOPS IOPS 값은 한정자 없이 표현해야 합니다. 예를 들어 7,000 IOPS가 필요하면 StorageClass를 만들 때 "7000"를 지정합니다.
* 향상된 보안이 필요하고 기밀 Google Kubernetes Engine 노드를 사용할 계획이라면 하이퍼디스크 균형용 비밀 모드를 생성하고, 추가 하이퍼디스크 균형용 비밀 모드 제한사항을 검토하며, 기밀 Google Kubernetes Engine 노드 정보를 자세히 알아보세요.

다음 예시는 각 하이퍼디스크 유형에 대해 StorageClass를 만드는 방법을 보여줍니다.

하이퍼디스크 균형

  1. hdb-example-class.yaml이라는 파일에 매니페스트를 저장합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
    
  2. StorageClass를 만듭니다.

    kubectl create -f hdb-example-class.yaml
    

하이퍼디스크 처리량

  1. hdt-example-class.yaml이라는 파일에 매니페스트를 저장합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: throughput-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-throughput
      provisioned-throughput-on-create: "50Mi"
    
  2. StorageClass를 만듭니다.

    kubectl create -f hdt-example-class.yaml
    

하이퍼디스크 익스트림

  1. hdx-example-class.yaml이라는 파일에 매니페스트를 저장합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: extreme-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-extreme
      provisioned-iops-on-create: "50000"
    
  2. StorageClass를 만듭니다.

    kubectl create -f hdx-example-class.yaml
    

클러스터에서 사용할 수 있는 StorageClass의 이름을 찾으려면 다음 명령어를 실행합니다.

kubectl get sc

PersistentVolumeClaim 만들기

Compute Engine Persistent Disk CSI 드라이버의 StorageClass를 참조하는 PersistentVolumeClaim을 만들 수 있습니다.

하이퍼디스크 균형

이 예시에서는 하이퍼디스크 밸런스드 볼륨의 대상 스토리지 용량을 20GiB로 지정합니다.

  1. 다음 PersistentVolumeClaim 매니페스트를 pvc-example.yaml 파일에 저장합니다.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: balanced-storage
      resources:
        requests:
          storage: 20Gi
    
  2. 이전 예시에서 만든 StorageClass를 참조하는 PersistentVolumeClaim을 적용합니다.

    kubectl apply -f pvc-example.yaml
    

하이퍼디스크 처리량

이 예시에서는 Hyperdisk Throughput 볼륨의 대상 스토리지 용량을 2TiB로 지정합니다.

  1. 다음 PersistentVolumeClaim 매니페스트를 pvc-example.yaml 파일에 저장합니다.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: throughput-storage
      resources:
        requests:
          storage: 2Ti
    
  2. 이전 예시에서 만든 StorageClass를 참조하는 PersistentVolumeClaim을 적용합니다.

    kubectl apply -f pvc-example.yaml
    

하이퍼디스크 익스트림

이 예시에서는 Hyperdisk Extreme 볼륨의 최소 스토리지 용량을 64GiB로 지정합니다.

  1. 다음 PersistentVolumeClaim 매니페스트를 pvc-example.yaml 파일에 저장합니다.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: extreme-storage
      resources:
        requests:
          storage: 64Gi
    
  2. 이전 예시에서 만든 StorageClass를 참조하는 PersistentVolumeClaim을 적용합니다.

    kubectl apply -f pvc-example.yaml
    

Hyperdisk 볼륨을 사용하는 배포 만들기

PersistentVolume과 함께 포드를 사용하는 경우 Deployment 또는 StatefulSet 같은 워크로드 컨트롤러를 사용하는 것이 좋습니다.

  1. 다음 예시에서는 이전 섹션에서 만든 PersistentVolumeClaim을 사용하여 Nginx 웹 서버를 배포하기 위해 포드를 구성하는 매니페스트를 만듭니다. 다음 예시 매니페스트를 hyperdisk-example-deployment.yaml로 저장합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-deployment
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /var/lib/www/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: podpvc
              readOnly: false
    
  2. hyperdisk-example-deployment.yaml 매니페스트 파일을 기반으로 배포를 만들려면 다음 명령어를 실행합니다.

    kubectl apply -f hyperdisk-example-deployment.yaml
    
  3. 배포가 성공적으로 생성되었는지 확인합니다.

    kubectl get deployment
    

    Hyperdisk 인스턴스가 프로비저닝을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 배포에서 프로비저닝을 완료하면 READY 상태를 보고합니다.

  4. 다음 명령어를 실행하여 PersistentVolumeClaim 상태를 모니터링해 진행 상황을 확인할 수 있습니다.

    kubectl get pvc
    

스냅샷에서 Hyperdisk 볼륨 프로비저닝

기존 Persistent Disk 스냅샷에서 새 Hyperdisk 볼륨을 만들려면 Google Cloud 콘솔, Google Cloud CLI, Compute Engine API를 사용합니다. Persistent Disk 스냅샷을 만드는 방법은 볼륨 스냅샷 만들기 및 사용하기를 참조하세요.

콘솔

  1. Google Cloud 콘솔의 디스크 페이지로 이동합니다.

    디스크로 이동

  2. 디스크 만들기를 클릭합니다.

  3. 디스크 유형에서 디스크 유형으로 다음 중 하나를 선택합니다.

    • 하이퍼디스크 균형
    • 하이퍼디스크 익스트림
    • 하이퍼디스크 처리량
  4. 디스크 소스 유형에서 스냅샷을 클릭합니다.

  5. 복원할 스냅샷의 이름을 선택합니다.

  6. 새 디스크의 크기(GiB)를 선택합니다. 이 값은 스냅샷의 원래 소스 디스크보다 크거나 같아야 합니다.

  7. 디스크에 원하는 프로비저닝된 처리량 또는 프로비저닝된 IOPS를 설정합니다(기본값과 다른 경우).

  8. 만들기를 클릭하여 Hyperdisk 볼륨을 만듭니다.

gcloud

gcloud compute disks create 명령어를 실행하여 스냅샷에서 Hyperdisk 볼륨을 만듭니다.

하이퍼디스크 균형

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-balanced

다음을 바꿉니다.

  • DISK_NAME: 새 디스크의 이름입니다.
  • SIZE: 새 디스크의 크기로 기비바이트(GiB) 또는 테비바이트(TiB)입니다. 최신 용량 제한사항은 Compute Engine 문서를 참조하세요.
  • SNAPSHOT_NAME: 복원할 스냅샷의 이름
  • THROUGHPUT_LIMIT: (선택사항) 하이퍼디스크 밸런스드 디스크의 경우 디스크가 처리할 수 있는 처리량(MiBps)을 나타내는 정수입니다. 최신 제한사항은 Compute Engine 문서를 참조하세요.
  • IOPS_LIMIT: (선택사항) 하이퍼디스크 밸런스드 디스크의 경우 디스크가 처리할 수 있는 IOPS 수입니다. 최신 성능 제한사항은 Compute Engine 문서를 참조하세요.

하이퍼디스크 처리량

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --type=hyperdisk-throughput

다음을 바꿉니다.

  • DISK_NAME: 새 디스크의 이름입니다.
  • SIZE: 새 디스크의 크기로 기비바이트(GiB 또는 GB) 또는 테비바이트(TiB 또는 TB)입니다. 최신 용량 제한사항은 Compute Engine 문서를 참조하세요.
  • SNAPSHOT_NAME: 복원할 스냅샷의 이름
  • THROUGHPUT_LIMIT: 선택사항: 하이퍼디스크 처리량 디스크의 경우 디스크가 처리할 수 있는 처리량(MiBps)을 나타내는 정수입니다. 최신 성능 제한사항은 Compute Engine 문서를 참조하세요.

하이퍼디스크 익스트림

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-iops

다음을 바꿉니다.

  • DISK_NAME: 새 디스크의 이름입니다.
  • SIZE: 새 디스크의 크기로 기비바이트(GiB 또는 GB) 또는 테비바이트(TiB 또는 TB)입니다. 최신 용량 제한사항은 Compute Engine 문서를 참조하세요.
  • SNAPSHOT_NAME: 복원할 스냅샷의 이름
  • IOPS_LIMIT: 선택사항: 하이퍼디스크 익스트림 디스크의 경우 디스크가 처리할 수 있는 초당 I/O 작업 수입니다. 최신 성능 제한사항은 Compute Engine 문서를 참조하세요.

Hyperdisk 볼륨의 스냅샷 만들기

Hyperdisk 볼륨에서 스냅샷을 만들려면 Persistent Disk 볼륨에 대해 스냅샷을 만드는 것과 동일한 단계를 수행합니다.

기존 하이퍼디스크 볼륨의 프로비저닝된 처리량 또는 IOPS 업데이트

이 섹션에서는 하이퍼디스크 볼륨에 대해 프로비저닝된 성능을 수정하는 방법을 설명합니다.

처리량

프로비저닝된 처리량 업데이트는 하이퍼디스크 밸런스드 및 하이퍼디스크 처리량 볼륨에서만 지원됩니다.

하이퍼디스크 볼륨의 프로비저닝된 처리량 수준을 업데이트하려면 하이퍼디스크 볼륨에 대해 프로비저닝된 성능 변경의 Google Cloud 콘솔, gcloud CLI 또는 Compute Engine API 안내를 따르세요.

볼륨 생성 후 하이퍼디스크 볼륨의 프로비저닝된 처리량 수준을 변경(최대 4시간마다)할 수 있습니다. 새 처리량 수준이 적용되는 데 최대 15분이 걸릴 수 있습니다. 성능이 변경되는 동안에는 성능 SLA 및 SLO가 적용되지 않습니다. 디스크가 실행 중인 인스턴스에 연결되어 있는지와 관계없이 언제든지 기존 볼륨의 처리량 수준을 변경할 수 있습니다.

지정하는 새 처리량 수준은 하이퍼디스크 볼륨 지원 값을 준수해야 합니다.

IOPS

프로비저닝된 IOPS 업데이트는 하이퍼디스크 밸런스드 및 하이퍼디스크 익스트림 볼륨에서만 지원됩니다.

하이퍼디스크 볼륨의 프로비저닝된 IOPS 수준을 업데이트하려면 하이퍼디스크 볼륨에 대해 프로비저닝된 성능 변경에서 Google Cloud 콘솔, gcloud CLI 또는 Compute Engine API 안내를 따르세요.

볼륨 생성 후 Hyperdisk IOPS 볼륨에 대해 프로비저닝된 IOPS 수준(최대 4시간마다)을 변경할 수 있습니다. 새 IOPS 수준이 적용되는 데 최대 15분이 걸릴 수 있습니다. 성능이 변경되는 동안에는 성능 SLA 및 SLO가 적용되지 않습니다. 디스크가 실행 중인 인스턴스에 연결되어 있는지와 관계없이 언제든지 기존 볼륨의 IOPS 수준을 변경할 수 있습니다.

지정하는 새 IOPS 수준은 하이퍼디스크 볼륨 지원 값을 준수해야 합니다.

하이퍼디스크 볼륨에 대해 프로비저닝된 IOPS 수준을 업데이트하려면 PersistentVolumeClaim 및 PersistentVolume 리소스를 지원하는 Persistent Disk의 이름을 식별해야 합니다.

  1. Google Cloud 콘솔에서 객체 브라우저로 이동합니다.

    객체 브라우저로 이동

  2. PersistentVolumeClaim 객체의 항목을 찾습니다.

  3. 볼륨 링크를 클릭합니다.

  4. 연결된 PersistentVolume의 YAML 탭을 엽니다. 이 탭에서 CSI volumeHandle 값을 찾습니다.

  5. 이 핸들의 마지막 요소를 기록해 두세요(예: 'pvc-XXXXX'). PersistentVolumeClaim의 이름입니다. 프로젝트와 영역도 확인해야 합니다.

Hyperdisk 볼륨의 처리량 또는 IOPS 모니터링

Hyperdisk 볼륨의 프로비저닝된 성능을 모니터링하려면 Compute Engine 문서의 프로비저닝된 IOPS 및 처리량 분석을 참조하세요.

문제 해결

이 섹션에서는 GKE에서 Hyperdisk 볼륨의 문제를 해결하기 위한 문제 해결 안내를 제공합니다.

성능 또는 용량을 변경할 수 없음: 비율이 범위를 벗어남

프로비저닝된 성능 수준 또는 용량을 변경하려고 하는데 선택한 성능 수준 또는 용량이 볼륨에 허용되는 범위를 벗어나면 다음 오류가 발생합니다.

  • Requested provisioned throughput cannot be higher than <value>.
  • Requested provisioned throughput cannot be lower than <value>.
  • Requested provisioned throughput is too high for the requested disk size.
  • Requested provisioned throughput is too low for the requested disk size.
  • Requested disk size is too high for current provisioned throughput.

Hyperdisk Throughput 볼륨에 프로비저닝된 처리량은 다음 요구사항을 충족해야 합니다.

  • 용량(TiB)당 10MiBps 이상, 용량(TiB)당 90MiBps 이하
  • 볼륨당 최대 600MiBps

이 문제를 해결하려면 요청된 처리량 또는 용량을 허용 범위 내로 수정하고 명령어를 다시 실행합니다.

성능을 변경할 수 없음: 비율 제한

프로비저닝된 성능 수준을 변경하려고 시도했지만 지난 4시간 이내에 성능 수준이 이미 변경된 경우 다음 오류가 발생합니다.

Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.

Hyperdisk Throughput 및 IOPS 볼륨은 프로비저닝된 성능을 4시간마다 한 번씩 업데이트할 수 있습니다. 이 문제를 해결하려면 볼륨의 쿨다운 타이머가 경과할 때까지 기다린 후 명령어를 다시 실행합니다.

다음 단계