TheKoguryo's 기술 블로그

 Version 2024.05.05

Support for PVC block volume performance levels

Persistent Volume으로 Block Volume으로 사용할 때 Lower Cost, Balanced 또는 Higher Performance로 성능레벨을 지정할 수 있습니다.

Block Volume 성능 레벨

Block Volume의 성능은 volume performance units (VPUs)으로 표현되며, 가능한 옵션은 다음과 같습니다.

  • Ultra High Performance: 최고 성능을 요구하는, 가장 높은 I/O를 요구하는 워크로드에 권장합니다. 이 옵션을 사용시 매월 GB당 30 - 120 VPU을 구입할 수 있습니다. 볼륨 사이즈에 따른 처리량 및 IOPS 성능 수치는 다음 링크를 참조하세요.
  • Higher Performance: Ultra High Performance 성능까지는 아니지만, 높은 I/O를 요구하는 워크로드에 권장합니다. 이 옵션을 사용시 매월 GB당 20 VPU을 구입할 수 있습니다. 볼륨 사이즈에 따른 처리량 및 IOPS 성능 수치는 다음 링크를 참조하세요.
  • Balanced: Block Volume과 Boot Volume의 기본 성능 레벨입니다. 일반적인 워크로드에 성능, 비용을 고려하여 균형잡힌 선택을 제공합니다. 이 옵션을 사용시 매월 GB당 10 VPU을 구입할 수 있습니다. 볼륨 사이즈에 따른 처리량 및 IOPS 성능 수치는 다음 링크를 참조하세요.
  • Lower Cost: 스트리밍, 로그 처리, 데이타 웨어하우스 같은 순차처리 I/O을 가진 워크로드에 권장합니다. 스토리지 비용만 있으며, 추가적인 VPU 비용이 없습니다. 이 옵션은 Block Volume에만 가용한 옵션이며, Boot Volume에서는 선택할 수 없습니다.

Block Volume을 Persistent Volume으로 사용시 성능 레벨 지정하기

Block Volume CSI 볼륨 플러그인(provisioner: blockvolume.csi.oraclecloud.com)을 사용하는 경우 Storage Class에서 성능레벨을 추가적으로 설정할 수 있습니다.

  • Lower Cost 성능 레벨: vpusPerGB: 0
  • Balanced 성능 레벨: vpusPerGB: 10
  • Higher Performance: 성능 레벨: vpusPerGB: 20

기본 Storage Class 조회

  • OKE 클러스터를 생성하면, 기본으로 두개의 Storage Class가 만들어져 있습니다. oci-bv가 Block Volume CSI 볼륨 플러그인을 사용하고 있으면, vpusPerGB이 따로 설정되지 않아, 기본값인 vpusPerGB: 10에 해당합니다.
    $ kubectl get sc
    NAME            PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    oci (default)   oracle.com/oci                    Delete          Immediate              false                  4d
    oci-bv          blockvolume.csi.oraclecloud.com   Delete          WaitForFirstConsumer   true                   4d
    

VPU를 설정한 Persistent Volume 사용하기

  1. Storage Class를 생성합니다. 예) vpusPerGB: 20

    • csi-bvs-sc-higher-perf.yaml
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: oci-bv-higher-perf
    provisioner: blockvolume.csi.oraclecloud.com
    parameters:
      vpusPerGB: "20"
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    
  2. PVC를 생성합니다.

    • csi-bvs-pvc-higher-perf.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-bvs-pvc-higher-perf
    spec:
      storageClassName: "oci-bv-higher-perf"
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 50Gi
    
  3. 테스트를 위한 앱을 배포합니다.

    • nginx-deployment-bvs-pvc-higher-perf.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx-bvs-pvc-higher-perf
      name: nginx-bvs-pvc-higher-perf
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-bvs-pvc-higher-perf
      template:
        metadata:
          labels:
            app: nginx-bvs-pvc-higher-perf
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            volumeMounts:
            - name: data
              mountPath: /usr/share/nginx/html
          volumes:
          - name: data
            persistentVolumeClaim:
              claimName: csi-bvs-pvc-higher-perf
    
  4. 실행 예시

    winter@cloudshell:~ (ap-chuncheon-1)$kubectl apply -f csi-bvs-sc-higher-perf.yaml 
    storageclass.storage.k8s.io/oci-bv-higher-perf created
    winter@cloudshell:~ (ap-chuncheon-1)$kubectl apply -f csi-bvs-pvc-higher-perf.yaml 
    persistentvolumeclaim/csi-bvs-pvc-higher-perf created
    winter@cloudshell:~ (ap-chuncheon-1)$ kubectl apply -f nginx-deployment-bvs-pvc-higher-perf.yaml 
    deployment.apps/nginx-bvs-pvc-higher-perf created
    winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get sc
    NAME                 PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    oci (default)        oracle.com/oci                    Delete          Immediate              false                  4d1h
    oci-bv               blockvolume.csi.oraclecloud.com   Delete          WaitForFirstConsumer   true                   4d1h
    oci-bv-higher-perf   blockvolume.csi.oraclecloud.com   Delete          WaitForFirstConsumer   true                   35s
    winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get pvc
    NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    csi-bvs-pvc-higher-perf   Bound    csi-51c51276-6103-487e-a549-9039de4f8ae4   50Gi       RWO            oci-bv-higher-perf   29s
    winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get pod
    NAME                                         READY   STATUS    RESTARTS   AGE
    nginx-bvs-pvc-higher-perf-6495bcdf45-xzc2j   1/1     Running   0          5m23s
    spring-boot-hello-6865775b89-gzx4w           1/1     Running   0          3d3h
    
  5. 실행결과 생성된 Block Volume 확인

    실제 생성된 Block Volume을 오라클 클라우드 콘솔에서 확인해 보면, VPU: 20의 Higher Performance로 생성된 것을 볼 수 있습니다.

    image-20220417181249255

    image-20220417181528780

  6. vpusPerGB:0의 Lower Cost와 vpusPerGB:10인 기본 Storage Class인 oci-bv를 사용해도, 각각 관련 VPU의 Block Volume이 생성되는 것을 알 수 있습니다.

    winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get sc
    NAME                 PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    oci (default)        oracle.com/oci                    Delete          Immediate              false                  4d2h
    oci-bv               blockvolume.csi.oraclecloud.com   Delete          WaitForFirstConsumer   true                   4d2h
    oci-bv-higher-perf   blockvolume.csi.oraclecloud.com   Delete          WaitForFirstConsumer   true                   29m
    oci-bv-lower-cost    blockvolume.csi.oraclecloud.com   Delete          WaitForFirstConsumer   true                   15m
    winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get pvc
    NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    csi-bvs-pvc               Bound    csi-88a5df3c-2351-4554-9e27-57d7ef948025   50Gi       RWO            oci-bv               17m
    csi-bvs-pvc-higher-perf   Bound    csi-51c51276-6103-487e-a549-9039de4f8ae4   50Gi       RWO            oci-bv-higher-perf   29m
    csi-bvs-pvc-lower-cost    Bound    csi-219ba6c6-f3d5-4308-90a8-51431583dd23   50Gi       RWO            oci-bv-lower-cost    15m
    

    image-20220417182732797



이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.