Block Storage 스토리지 클래스 사용하기

스토리지 클래스 활용 Pod, Pvc 배포

매니페스트 파일(예시: bs-pod.yamlbs-pvc.yaml )을 작성하여 bs-ssd를 사용하는 Pod와 Pvc를 배포할 수 있습니다.

주의
  • 아래 매니페스트 파일은 예시입니다. 사용자의 환경에 맞춰 Image 등 주요 필드를 변경하여 사용하시기 바랍니다.

bs-ssd 스토리지 클래스를 활용한 Pod, Pvc를 생성하려면 다음 절차를 따르세요.

  1. Pvc 매니페스트 파일 bs-pvc.yaml 을 작성합니다.

    배경색 변경
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-bs-ssd
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: bs-ssd
      volumeMode: Filesystem
      resources:
        requests:
          storage: 8Gi
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-bs-ssd
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: bs-ssd
      volumeMode: Filesystem
      resources:
        requests:
          storage: 8Gi
    코드 블럭. Pvc 매니페스트 파일 bs-pvc.yaml 작성 예시

  2. Pod 매니페스트 파일 bs-pod.yaml 을 작성합니다.

    배경색 변경
    kind: Pod
    apiVersion: v1
    metadata:
      name: pod-bs-ssd
    spec:
      containers:
        - name: busybox
          image: busybox:latest
          command:
            - sleep
            - "3600"      
          volumeMounts:
          - mountPath: "/data"
            name: my-csi-volume
      volumes:
        - name: my-csi-volume
          persistentVolumeClaim:
            claimName: pvc-bs-ssd
    kind: Pod
    apiVersion: v1
    metadata:
      name: pod-bs-ssd
    spec:
      containers:
        - name: busybox
          image: busybox:latest
          command:
            - sleep
            - "3600"      
          volumeMounts:
          - mountPath: "/data"
            name: my-csi-volume
      volumes:
        - name: my-csi-volume
          persistentVolumeClaim:
            claimName: pvc-bs-ssd
    코드 블럭. Service 매니페스트 파일 bs-pod.yaml 작성 예시

  3. kubectl apply 명령어를 사용해 Pvc, Pod 매니페스트를 배포합니다.

    배경색 변경
    kubectl apply -f bs-pvc.yaml -f bs-pod.yaml
    kubectl apply -f bs-pvc.yaml -f bs-pod.yaml
    코드 블럭. kubectl apply 명령어로 매니페스트 배포

  4. kubectl get pod,pvc 명령어를 사용하여 배포 결과를 확인합니다.

    배경색 변경
    # kubectl get pod,pvc
    NAME                               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS
    persistentvolumeclaim/pvc-bs-ssd   Bound    pvc-5a085a06-164f-45e1-b4c6-d2bfa3b0012c   8Gi        RWO            bs-ssd      
    
    NAME             READY   STATUS    RESTARTS   AGE
    pod/pod-bs-ssd   1/1     Running   0          75s
    # kubectl get pod,pvc
    NAME                               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS
    persistentvolumeclaim/pvc-bs-ssd   Bound    pvc-5a085a06-164f-45e1-b4c6-d2bfa3b0012c   8Gi        RWO            bs-ssd      
    
    NAME             READY   STATUS    RESTARTS   AGE
    pod/pod-bs-ssd   1/1     Running   0          75s
    코드 블럭. kubectl get pod,pvc 명령어로 배포 결과 확인

특정 AZ에 Pod, Pvc 배포(allowedTopologies)

사용자가 allowedTopologies 설정을 포함한 별도의 스토리지 클래스를 생성하여, 특정 AZ에 Pod와 볼륨이 배포되도록 설정할 수 있습니다.

주의
  • 기본 배포된 bs-ssd 스토리지 클래스를 참고하여, 추가 스토리지 클래스 생성을 권장합니다.
  • matchLabelExpressions으로는 “topology.bs.csi.samsungsdscloud.com/zone” 사용을 권장합니다. (전체 노드의 Label 기적용)
  1. storageclass 매니페스트 파일 bs-az-a-sc.yaml 을 작성합니다.

    배경색 변경
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: bs-ssd-az-a
    provisioner: bs.csi.samsungsdscloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: SSD
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.bs.csi.samsungsdscloud.com/zone
        values:
        - kr-west1-a
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: bs-ssd-az-a
    provisioner: bs.csi.samsungsdscloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: SSD
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.bs.csi.samsungsdscloud.com/zone
        values:
        - kr-west1-a
    코드 블럭. Pvc 매니페스트 파일 bs-az-a-sc.yaml 작성 예시

  2. kubectl apply 명령어를 사용해 Storageclass, Pvc, Pod 매니페스트를 배포합니다.

    배경색 변경
    kubectl apply -f bs-az-a-sc.yaml -f bs-pvc.yaml -f bs-pod.yaml
    kubectl apply -f bs-az-a-sc.yaml -f bs-pvc.yaml -f bs-pod.yaml
    코드 블럭. kubectl apply 명령어로 매니페스트 배포

  3. kubectl get pod,pvc 명령어를 사용하여 배포 결과를 확인합니다.

    배경색 변경
    # kubectl get pod,pvc
    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS
    pvc-bs-ssd   Bound    pvc-42365cee-724c-446a-af35-e54d9b16ad51   8Gi        RWO            bs-ssd-az-a 
    
    NAME         READY   STATUS       RESTARTS   AGE   IP       	 NODE                
    pod-bs-ssd   1/1     Running	  0          46s   172.21.52.3   ske-aaa-lrwdj-vwww2 
    # kubectl get pod,pvc
    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS
    pvc-bs-ssd   Bound    pvc-42365cee-724c-446a-af35-e54d9b16ad51   8Gi        RWO            bs-ssd-az-a 
    
    NAME         READY   STATUS       RESTARTS   AGE   IP       	 NODE                
    pod-bs-ssd   1/1     Running	  0          46s   172.21.52.3   ske-aaa-lrwdj-vwww2 
    코드 블럭. kubectl get pod,pvc 명령어로 배포 결과 확인

ssd_provisioned 볼륨 타입을 사용한 Pod, Pvc 배포

사용자가 SSD_Provisioned 볼륨 타입을 사용하여 생성 볼륨의 max_iops, max_throughput을 지정할 수 있습니다. max_iops와 max_throughput은 생성 PVC Annotation(1순위) 스토리지클래스의 parameters(2순위)에서 지정할 수 있습니다. 아래 예시에서는 두 설정 모두를 반영한 예시를 보여드립니다. (모두 설정된 경우, PVC Annotation 값을 반영합니다.)

주의
  • 기본 배포된 bs-ssd 스토리지 클래스를 참고하여, 추가 스토리지 클래스 생성을 권장합니다.
  • max_iops, max_throughput가 미반영 된 경우, PVC 생성 요청이 실패하게 됩니다.
  1. storageclass 매니페스트 파일 bs-ssdprovisioned-sc.yaml 을 작성합니다.

    배경색 변경
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: bs-ssdprovisioned-sc
    provisioner: bs.csi.samsungsdscloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: SSD_Provisioned   # 볼륨 타입 변경 (SSD > SSD_Provisioned)
      max_iops: "17000"       # max_iops 설정 (5000-20000)    
      max_throughput: "250"   # max_throughput 설정 (250-1000)
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: bs-ssdprovisioned-sc
    provisioner: bs.csi.samsungsdscloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: SSD_Provisioned   # 볼륨 타입 변경 (SSD > SSD_Provisioned)
      max_iops: "17000"       # max_iops 설정 (5000-20000)    
      max_throughput: "250"   # max_throughput 설정 (250-1000)
    코드 블럭. Pvc 매니페스트 파일 bs-ssdprovisioned-sc.yaml 작성 예시

  2. Pvc 매니페스트 파일 bs-ssdprovisioned-pvc.yaml 을 작성합니다.

    배경색 변경
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-bs-ssdprovisioned
      annotations:
        "bs.csi.samsungsdscloud.com/max-iops": "5000"       # max_iops 설정
        "bs.csi.samsungsdscloud.com/max-throughput": "250"  # max_throughput 설정 
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: bs-ssdprovisioned-sc
      volumeMode: Filesystem
      resources:
        requests:
          storage: 8Gi
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-bs-ssdprovisioned
      annotations:
        "bs.csi.samsungsdscloud.com/max-iops": "5000"       # max_iops 설정
        "bs.csi.samsungsdscloud.com/max-throughput": "250"  # max_throughput 설정 
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: bs-ssdprovisioned-sc
      volumeMode: Filesystem
      resources:
        requests:
          storage: 8Gi
    코드 블럭. Pvc 매니페스트 파일 bs-ssdprovisioned-pvc.yaml 작성 예시

  3. kubectl apply 명령어를 사용해 Storageclass, Pvc, Pod 매니페스트를 배포합니다.

    배경색 변경
    kubectl apply -f bs-ssdprovisioned-sc.yaml -f bs-ssdprovisioned-pvc.yaml -f bs-pod.yaml
    kubectl apply -f bs-ssdprovisioned-sc.yaml -f bs-ssdprovisioned-pvc.yaml -f bs-pod.yaml
    코드 블럭. kubectl apply 명령어로 매니페스트 배포

  4. 생성된 볼륨의 max-iops, max-throughput 값은 콘솔의 Virtual Server > Block Storage에서 확인 할 수 있습니다.

아래는 max-iops, max-throughput PVC 어노테이션에 대한 설명입니다.

어노테이션필수기본값범위설명
bs.csi.samsungsdscloud.com/max-iopsOptional-5000-20000서비스 생성 시 설정한 IOPS값
bs.csi.samsungsdscloud.com/max-throughputOptional-250-1000서비스 생성 시 설정한 Throughput 속도(MB/s)
표. Kubernetes 어노테이션에서 Firewall 관련 설정
type LoadBalancer 서비스 사용하기
사용 시 고려사항