Block Storage for VPC 설정

Block Storage for VPC에서는 VPC 내에서 프로비저닝할 수 있는 가상 서버 인스턴스의 하이퍼바이저 마운트 고성능 데이터 스토리지를 제공합니다.

워크로드의 요구사항을 충족하는 GB 크기와 IOPS를 사용하여 사전정의된 스토리지 계층 중에서 선택할 수 있습니다. Block Storage for VPC가 적합한 스토리지 옵션인지 확인하려면 스토리지 솔루션 선택을 참조하십시오. 가격 책정 정보는 Block Storage for VPC을 참조하십시오.

  • Block Storage for VPC 클러스터 추가 기능은 VPC 클러스터에서 기본적으로 사용으로 설정됩니다.
  • 애드온을 Block Storage for VPC 비활성화하면 다시 활성화할 때까지 비활성화 상태로 유지됩니다. 클러스터 마스터를 새로 고치거나 업데이트할 때는 활성화되지 않습니다.

IBM Cloud Block Storage for VPC 의 빠른 시작

이 빠른 시작 가이드에서는 볼륨을 동적으로 프로비저닝하기 위해 PVC를 생성하여 클러스터에 10Gi 5IOPS 계층 Block Storage for VPC 볼륨을 생성합니다. 그런 다음 PVC를 마운트하는 앱 배치를 작성합니다.

이제 2세대 스토리지 클래스를 선택할 수 있습니다.

여러 포드가 동일한 노드에 스케줄링되는 한, 해당 Block Storage for VPC 볼륨을 마운트할 수 있습니다.

  1. PVC에 대한 파일을 작성하고 이름을 pvc.yaml로 지정하십시오. 1세대와 2세대 스토리지 클래스 중에서 선택하세요.

    ibmc-vpc-block-5iops-tier 스토리지 클래스를 사용한 1세대 예제입니다:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      storageClassName: ibmc-vpc-block-5iops-tier
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    

    ibmc-vpc-block-sdp 스토리지 클래스를 사용하는 2세대 예제입니다:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      storageClassName: ibmc-vpc-block-sdp
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  2. 클러스터에 PVC를 작성하십시오.

    kubectl apply -f pvc.yaml
    
  3. PVC가 바인드되면 PVC를 사용하는 앱 배치를 작성하십시오. 배치에 대한 파일을 작성하고 이름을 deployment.yaml로 지정하십시오.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: my-deployment
        labels:
          app: my-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - image: ngnix # Your containerized app image.
            name: my-container
            volumeMounts:
            - name: my-volume
              mountPath: /mount-path
          volumes:
          - name: my-volume
            persistentVolumeClaim:
              claimName: my-pvc
    
  4. 클러스터에 배치를 작성하십시오.

    kubectl apply -f deployment.yaml
    

자세한 정보는 다음 링크를 참조하십시오.

앱에 Block Storage for VPC 추가

Block Storage for VPC 프로파일을 선택하고 클러스터에 대해 동적으로 Block Storage for VPC를 프로비저닝하기 위한 지속적 볼륨 청구를 작성하십시오. 동적 프로비저닝은 일치하는 지속적 볼륨을 자동으로 작성하고 IBM Cloud 계정에서 실제 스토리지 디바이스를 주문합니다.

  1. 원하는 용량 및 성능 요구사항에 가장 적합한 Block Storage for VPC 프로파일을 판별하십시오.

  2. Block Storage for VPC 프로파일에 해당하는 스토리지 클래스를 선택하십시오.

    모든 IBM 사전 정의된 스토리지 클래스는 기본적으로 ext4 파일 시스템을 사용하여 Block Storage for VPC를 설정합니다. xfs 또는 ext3와 같은 다른 파일 시스템을 사용하려면 사용자 정의된 스토리지 클래스를 작성하십시오.

    • 10IOPS/GB: ibmc-vpc-block-10iops-tier 또는 ibmc-vpc-block-retain-10iops-tier
    • 5IOPS/GB: ibmc-vpc-block-5iops-tier 또는 ibmc-vpc-block-retain-5iops-tier
    • 3IOPS/GB: ibmc-vpc-block-general-purpose 또는 ibmc-vpc-block-retain-general-purpose
    • 사용자 정의: ibmc-vpc-block-custom 또는 ibmc-vpc-block-retain-custom
  3. Block Storage for VPC 구성을 결정하십시오.

    1. 스토리지의 크기를 선택하십시오. 선택한 Block Storage for VPC 프로파일에서 크기가 지원되는지 확인하십시오.
    2. 클러스터 또는 지속적 볼륨 청구(PVC)가 삭제된 후에 데이터를 보존하고자 하는지를 선택하십시오.
      • 데이터를 보존하려면 retain 스토리지 클래스를 선택하십시오. PVC를 삭제하면 PVC만 삭제됩니다. 지속적 볼륨(PV), IBM Cloud 계정의 실제 스토리지 디바이스 및 데이터는 여전히 존재합니다. 스토리지를 재확보하고 클러스터에서 이를 다시 사용하려면 PV를 제거한 후 기존 Block Storage for VPC 사용 단계를 수행해야 합니다.
      • PVC를 삭제할 때 PV, 데이터 및 실제 Block Storage for VPC 디바이스를 삭제하려면 retain 없이 스토리지 클래스를 선택하십시오.
  4. 지속적 볼륨 클레임을 정의하는 구성 파일을 작성하고 구성을 YAML 파일로 저장하십시오.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc_name> # Enter a name for your PVC.
    spec:
      accessModes:
      - <access-mode> # ReadWriteOnce or ReadWriteOncePod
      resources:
        requests:
          storage: 10Gi # Enter the size. Make sure that the size is supported in the profile that you chose.
      storageClassName: <storage_class> # Enter the storage class name that you selected earlier.
    
  5. 클러스터에 PVC를 작성하십시오.

    kubectl apply -f pvc.yaml
    
  6. PVC가 작성되고 PV에 바인딩되는지 확인하십시오. 이 프로세스에는 몇 분 정도 소요될 수 있습니다.

    kubectl describe pvc <pvc_name>
    

    출력 예

    Name:          mypvv
    Namespace:     default
    StorageClass:  ibmc-vpc-block-5iops-tier
    Status:        Bound
    Volume:        
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"csi-block-pvc-good","namespace":"default"},"spec":{...
                volume.beta.kubernetes.io/storage-provisioner: vpc.block.csi.ibm.io
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity: 10Gi   
    Access Modes:  
    VolumeMode:    Filesystem
    Events:
        Type       Reason                Age               From                         Message
        ----       ------                ----              ----                         -------
        Normal     ExternalProvisioning  9s (x3 over 18s)  persistentvolume-controller  waiting for a volume to be created, either by external provisioner "vpc.block.csi.ibm.io" or manually created by system administrator
    Mounted By:  <none>
    
  7. 앱의 배치 구성 파일을 작성하고 앱에 PVC를 마운트하십시오.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment_name>
      labels:
        app: <deployment_label>
    spec:
      selector:
        matchLabels:
          app: <app_name>
      template:
        metadata:
          labels:
            app: <app_name>
        spec:
          containers:
          - image: <image_name>
            name: <container_name>
            volumeMounts:
            - name: <volume_name>
              mountPath: /<file_path>
          volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>
    
    labels.app
    metadata 섹션에서, 배치의 레이블을 입력하십시오.
    matchLabels.applabels.app
    spec selector 및 template metadata 섹션에서, 앱의 레이블을 입력하십시오.
    image
    사용할 컨테이너 이미지의 이름을 지정하십시오. IBM Cloud Container Registry 계정에서 사용 가능한 이미지를 나열하려면 ibmcloud cr image-list를 실행하십시오.
    name
    팟(Pod)에 배치할 컨테이너의 이름을 지정하십시오.
    mountPath
    container volumeMounts 섹션에서, 컨테이너 내에서 PVC가 마운트되는 디렉토리의 절대 경로를 지정하십시오.
    name
    container volumeMounts 섹션에서, 팟(Pod)에 마운트할 볼륨의 이름을 입력하십시오. 원하는 이름을 입력할 수 있습니다.
    name
    volumes 섹션에서, 팟(Pod)에 마운트할 볼륨의 이름을 입력하십시오. 일반적으로 이 이름은 volumeMounts.name과 동일합니다.
    claimName
    volumes persistentVolumeClaim 섹션에서, 이전에 작성한 PVC의 이름을 입력하십시오.
  8. 클러스터에 배치를 작성하십시오.

    kubectl apply -f deployment.yaml
    
  9. PVC가 앱에 마운트되었는지 확인하십시오. 팟(Pod)이 실행 상태가 되려면 몇 분 정도 걸릴 수 있습니다.

    앱을 배치하는 중에 간헐적인 Unable to mount volumes 오류를 CLI 출력의 이벤트 섹션에서 볼 수 있습니다. Block Storage for VPC 클러스터 애드온은 자동으로 앱에 스토리지 마운트를 다시 시도합니다. 스토리지가 앱에 마운트될 때까지 몇 분 더 대기하십시오.

    kubectl describe deployment <deployment_name>
    

    출력 예

    ...
    Volumes:
    myvol:
        Type:    PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:    mypvc
        ReadOnly:    false
    

기존 Block Storage for VPC 인스턴스 사용

클러스터에서 사용하려는 기존의 실제 Block Storage for VPC 디바이스가 있는 경우에는 스토리지를 정적으로 프로비저닝하기 위한 PV 및 PVC를 수동으로 작성할 수 있습니다.

볼륨은 하나의 작업자 노드에만 연결할 수 있습니다. 연결이 성공하도록 하려면 해당 볼륨이 작업자 노드와 동일한 구역에 있는지 확인하십시오.

  1. VPC 클러스터의 작업자 노드에 연결할 볼륨을 결정하십시오. 볼륨 ID를 기록해 두십시오.

    ibmcloud is volumes
    
  2. 볼륨의 세부사항을 나열하십시오. 크기, 구역IOPS를 기록해 두십시오. 이러한 값은 PV를 작성하는 데 사용됩니다.

    ibmcloud is volume <volume_id>
    
  3. VPC 클러스터에 있는 작업자 노드의 목록을 검색하십시오. 스토리지 볼륨과 동일한 구역에 있는 작업자 노드의 구역을 기록해 두십시오.

    ibmcloud ks worker ls -c <cluster_name>
    
  4. 선택사항: retain 스토리지 클래스를 사용하여 실제 Block Storage for VPC 인스턴스를 프로비저닝한 경우, PVC를 제거해도 PV 및 물리적 스토리지는 제거되지 않습니다. 클러스터에서 실제 Block Storage for VPC 디바이스를 사용하려면 먼저 기존 PV를 제거해야 합니다.

    1. 클러스터의 PV를 나열하고 Block Storage for VPC 디바이스에 속하는 PV를 찾으십시오. PV는 released 상태입니다.

      kubectl get pv
      
    2. PV를 제거하십시오.

      kubectl delete pv <pv_name>
      
  5. PV에 대한 구성 파일을 작성하십시오. 이전에 검색한 ID, 크기, 구역IOPS를 포함시키십시오.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: <pv_name> # Example: my-persistent-volume
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: <vpc_block_storage_size> # Example: 20Gi
      csi:
        driver: vpc.block.csi.ibm.io
        fsType: ext4
        volumeAttributes:
          iops: "<vpc_block_storage_iops>" # Example: "3000"
          volumeId: <vpc_block_storage_ID> # Example: a1a11a1a-a111-1111-1a11-1111a11a1a11
          zone: "<vpc_block_zone>" # Example: "eu-de-3"
          region: "<vpc_block_region>"
        volumeHandle: <vpc_block_storage_ID>
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: failure-domain.beta.kubernetes.io/zone
              operator: In
              values:
              - <worker_node_zone> # Example: eu-de-3
            - key: failure-domain.beta.kubernetes.io/region
              operator: In
              values:
              - <worker_node_region> # Example: eu-de
            - key: kubernetes.io/hostname
              operator: In
              values:
              - <worker_node_primary_IP>
      persistentVolumeReclaimPolicy: Retain
      storageClassName: ""
      volumeMode: Filesystem
    
    name
    metadata 섹션에서 PV의 이름을 입력하십시오.
    storage
    spec capacity 섹션에서, 이전에 검색한 Block Storage for VPC 볼륨의 크기(기가바이트(Gi) 단위)를 입력하십시오. 예를 들어, 디바이스 크기가 100GB인 경우 100Gi를 입력하십시오.
    iops
    spec csi volumeAttributes 섹션에서, 이전에 검색한 Block Storage for VPC 볼륨의 최대 IOPS를 입력하십시오.
    zone
    spec csi volumeAttributes 섹션에서, 이전에 검색한 위치와 일치하는 VPC 블록 구역을 입력하십시오. 예를 들어, 위치가 Washington DC-1인 경우 us-east-1을 구역으로 사용하십시오. 사용 가능한 구역을 나열하려면 ibmcloud is zones를 실행하십시오. 사용 가능한 VPC 구역 및 위치의 개요를 찾으려면 다른 지역에 VPC 작성을 참조하십시오. "zone"이 지정된 경우 "region" 매개변수를 언급하십시오.
    region
    스토리지를 연결할 작업자 노드의 지역입니다.
    worker_node_primary_IP
    스토리지를 연결할 작업자 노드의 기본 IP입니다. ibmcloud ks worker ls를 실행하여 작업자 노드의 기본 IP를 찾을 수 있습니다.
    volumeIdspec.csi.volumeHandle
    spec csi volumeAttributes 섹션에서, 이전에 검색한 Block Storage for VPC 볼륨의 ID를 입력하십시오.
    storageClassName
    spec storageClassName에 대해, 비어 있는 문자열을 입력하십시오.
    matchExpressions
    spec nodeAffinity 섹션에서, 구역과 일치하는 노드 선택기 용어를 입력하십시오. 키에는 failure-domain.beta.kubernetes.io/zone을 입력하십시오. value에 대해서는 스토리지를 연결할 작업자 노드의 구역을 입력하십시오.
    matchExpressions
    spec nodeAffinity 섹션에서, 지역과 일치하는 노드 선택기 용어를 입력하십시오. 키에는 failure-domain.beta.kubernetes.io/region을 입력하십시오. value에 대해서는 스토리지를 연결할 작업자 노드의 지역을 입력하십시오.
  6. 클러스터에 PV를 작성하십시오.

    kubectl apply -f pv.yaml
    
  7. PV가 클러스터에 작성되었는지 확인하십시오.

    kubectl get pv
    
  8. PVC에 대한 다른 구성 파일을 작성하십시오. PVC가 이전에 작성한 PV와 일치시키려면 스토리지 크기 및 액세스 모드에 대해 동일한 값을 선택해야 합니다. 스토리지 클래스 필드에 PV와 일치하도록 빈 문자열 값을 입력하십시오. 이러한 필드 중 하나라도 PV와 일치하지 않는 것이 있으면 동적 프로비저닝을 통해 새 PV와 Block Storage for VPC 인스턴스가 자동으로 생성됩니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc_name>
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: <vpc_block_storage_size>
      storageClassName: ""
    
  9. PVC를 작성하십시오.

    kubectl apply -f pvc.yaml
    
  10. PVC가 작성되어 이전에 작성한 PV에 바인딩되었는지 확인하십시오. 이 프로세스에는 몇 분 정도 소요될 수 있습니다.

kubectl describe pvc <pvc_name>
  1. 자신의 PVC를 사용하는 배치 또는 팟(Pod)을 작성하십시오.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deployment_name>
  labels:
    app: <deployment_label>
spec:
  selector:
    matchLabels:
      app: <app_name>
  template:
    metadata:
      labels:
        app: <app_name>
    spec:
      containers:
      - image: <image_name>
        name: <container_name>
        volumeMounts:
        - name: <volume_name>
          mountPath: /<file_path>
      volumes:
      - name: <volume_name>
        persistentVolumeClaim:
          claimName: <pvc_name>
      nodeSelector:
        kubernetes.io/hostname: "<worker_node_primary_IP>"

Block Storage for VPC 클러스터 추가 기능 업데이트

클러스터 Block Storage for VPC 애드온을 명령어를 addon update 사용하여 업데이트할 수 있습니다.

추가 기능을 업데이트하기 전에 변경 로그를 검토하십시오.

이전 릴리스에서 ' 5.x 릴리즈로 업데이트하기 전에 ' failure ' 상태의 볼륨 스냅샷이 없어야 합니다. 자세한 내용은 '볼륨 Block Storage for VPC 스냅샷 리소스를 삭제할 수 없는 이유는 무엇인가요? '를 참조하십시오.

  1. 업데이트가 사용 가능한지 확인하십시오. 업데이트가 사용 가능한 경우에는 플러그인 버전이 별표로 플래그 지정되고 최신 버전이 표시됩니다. 최신 버전 값은 나중에 사용되므로 기록해 두십시오.

    ibmcloud ks cluster addons --cluster <cluster_name_or_ID>
    

    출력 예

    Name                   Version                 Health State   Health Status   
    vpc-block-csi-driver   1.0.0* (2.0.0 latest)   normal         Addon Ready
    
  2. 추가 기능을 업데이트하십시오. 업데이트 명령은 설치한 버전에 따라 다릅니다.

    5.0 이상 addon update 명령을 실행하십시오.

    ibmcloud ks cluster addon update vpc-block-csi-driver --cluster CLUSTER [-f] [-q] [--version VERSION] [-y]
    

    버전 5.0 추가 기능을 사용하지 않도록 설정하고 사용하도록 설정하십시오.

    ibmcloud ks cluster addon disable vpc-block-csi-driver --cluster CLUSTER [-f] [-q]
    
    ibmcloud ks cluster addon enable vpc-block-csi-driver --cluster CLUSTER [-f] [-q] [--version VERSION] [-y]
    
  3. 추가 기능이 Addon Ready 상태인지 확인하십시오. 추가 기능이 준비되려면 몇 분 정도 소요될 수 있습니다.

    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    

    출력 예

    Name                   Version   Health State   Health Status   
    vpc-block-csi-driver   2.0.0     normal         Addon Ready
    

    ibmc-vpc-block-10iops-tier 스토리지 클래스가 아닌 다른 기본 스토리지 클래스를 사용하는 경우 addon-vpc-block-csi-driver-configmap configmap에서 기본 스토리지 클래스 설정을 변경해야 합니다. 자세한 정보는 기본 스토리지 클래스 변경을 참조하십시오.

  4. 기본 Block Storage for VPC 스토리지 클래스를 기반으로 자체 스토리지 클래스를 생성한 경우 해당 스토리지 클래스를 다시 생성하여 매개변수를 업데이트해야 합니다. 자세한 내용은 버전으로 업데이트한 후 자체 스토리지 클래스 다시 만들기 4.2 을 참조하세요.

버전 4.2 로 업데이트한 후 사용자 고유의 스토리지 클래스 다시 작성

버전 4.2에서 스토리지 클래스의 기본 매개변수가 변경되었습니다. sizeRange 또는 iopsRange 매개변수는 더 이상 사용되지 않습니다. 이러한 매개 변수를 사용하는 자체 스토리지 클래스를 생성한 경우, 자체 스토리지 클래스를 편집하여 이러한 매개 변수를 제거해야 합니다. 자체 스토리지 클래스에서 매개변수를 변경하려면 해당 매개변수를 삭제하고 다시 만들어야 합니다. 이전에는 sizeRangeiopsRange가 각 스토리지 클래스에 참조 정보로 제공되었습니다. 버전 4.2에서는 이러한 참조가 제거되었습니다. 이제 블록 스토리지 프로파일, 크기 및 IOPS에 대한 정보는 블록 스토리지 프로파일 참조의 내용을 참조하십시오.

  1. 자신의 스토리지 클래스에 대한 세부 정보를 찾으려면 다음 명령을 실행하세요.

    kubectl describe sc STORAGECLASS
    
  2. 스토리지 클래스가 sizeRange 또는 iopsRange를 사용하는 경우 스토리지 클래스 YAML을 가져와 파일에 저장하십시오.

    kubectl get sc STORAGECLASS -o yaml
    
  3. 이전 명령의 출력에서 저장한 파일에서 sizeRange 또는 iopsRange 매개변수를 제거하십시오.

  4. 클러스터에서 스토리지 클래스를 삭제하십시오.

    kubectl delete sc STORAGECLASS
    
  5. 이전에 작성한 파일을 사용하여 클러스터에 스토리지 클래스를 다시 작성하십시오.

    kubectl apply -f custom-storage-class.yaml
    

Block Storage for VPC의 암호화 설정

IBM® Key Protect와 같은 키 관리 서비스(KMS) 제공자를 사용하여 Block Storage for VPC 인스턴스에서 스토리지에 기록되는 데이터를 암호화하는 데 사용하는 개인 루트 키를 작성하십시오. 비공개 루트 키를 만든 후 루트 키로 자체 스토리지 클래스 또는 Kubernetes 비밀을 생성한 다음 이 스토리지 클래스 또는 비밀을 사용하여 Block Storage for VPC 인스턴스를 프로비저닝합니다.

암호화를 활성화하면 성능에 약 Block Storage for VPC 20%의 영향을 미칩니다. 그러나 정확한 영향은 작업자 노드 및 스토리지 볼륨 구성에 따라 다릅니다. 암호화를 사용으로 설정할 때 성능에 미치는 영향을 고려하십시오.

  1. 사용하려는 KMS 제공업체의 인스턴스를 만듭니다.

  2. KMS 인스턴스에서 루트 키를 만듭니다.

  3. 서비스 인증에 서비스 설정. Block Storage for VPC에 액세스하도록 IBM® Key Protect에 권한을 부여하십시오. Block Storage for VPC에 최소 Reader 이상의 KMS 인스턴스 액세스 권한을 부여해야 합니다.

  4. 사용자 정의된 스토리지 클래스 또는 Kubernetes 시크릿에서 Key Protect 루트 키 CRN을 저장할지 여부를 결정하십시오. 그런 다음, 단계에 따라 사용자 정의된 스토리지 클래스 또는 Kubernetes 시크릿을 작성하십시오.

    사용자 정의된 스토리지 클래스 예제.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage_class_name> # Enter a name for your storage class.
    provisioner: vpc.block.csi.ibm.io
    parameters:
      profile: "5iops-tier"
      csi.storage.k8s.io/fstype: "ext4"
      billingType: "hourly"
      encrypted: "true"
      encryptionKey: "<encryption_key>"
      resourceGroup: ""
      zone: ""
      tags: ""
      generation: "gc"
      classVersion: "1"
    reclaimPolicy: "Delete"
    
    encrypted
    매개변수에 true 을 입력하여 Block Storage for VPC 볼륨에 대한 암호화를 설정하는 스토리지 클래스를 생성합니다. 이 옵션을 true 으로 설정하는 경우 parameters.encryptionKey 에서 사용하려는 Key Protect 서비스 인스턴스의 루트 키 CRN 을 제공해야 합니다.
    encryptionKey
    parameters 섹션에서, 이전에 검색한 루트 키 CRN을 입력하십시오.

    Kubernetes 시크릿 예제.

    apiVersion: v1
    kind: Secret
    type: vpc.block.csi.ibm.io
    metadata:
      name: <secret_name>
      namespace: <namespace_name>
    stringData:
      encrypted: <true_or_false>
    data
      encryptionKey: <encryption_key>
    
    name
    시크릿의 이름을 입력하십시오.
    namespace
    시크릿이 작성될 네임스페이스를 입력하십시오.
    encrypted
    매개변수에 true 을 입력하여 Block Storage for VPC 볼륨에 대한 암호화를 설정합니다.
    encryptionKey
    parameters 섹션에서, Key Protect 볼륨을 암호화하는 데 사용할 Block Storage for VPC 서비스 인스턴스의 루트 키 CRN을 입력하십시오. 시크릿에 있는 루트 키 CRN을 사용하려면 먼저 echo -n "<root_key_CRN>" | base64를 실행하여 이를 base64로 변환해야 합니다.
  5. 앱에 Block Storage for VPC 추가의 4 - 9단계를 수행하여 Block Storage for VPC 루트 키를 사용한 암호화를 위해 구성된 Key Protect를 프로비저닝하는 데 필요한, 사용자 정의된 스토리지 클래스로 PVC를 작성하십시오. 그 후 이 스토리지를 앱 팟(Pod)에 마운트하십시오.

    스토리지를 마운트하고 앱이 실행 상태가 되려면 몇 분 정도 소요될 수 있습니다.

  6. 데이터가 암호화되었는지 확인하십시오. Block Storage for VPC 볼륨을 나열하고 작성한 인스턴스의 ID를 기록해 두십시오. 스토리지 인스턴스 이름은 PVC를 작성할 때 자동으로 작성된 PV 이름과 같습니다.

    ibmcloud is vols
    

    출력 예

    ID                                     Name                                       Status      Capacity   IOPS   Profile           Attachment type   Created                     Zone         Resource group
    a395b603-74bf-4703-8fcb-b68e0b4d6960   pvc-479d590f-ca72-4df2-a30a-0941fceeca42   available   10         3000   5iops-tier        data              2019-08-17T12:29:18-05:00   us-south-1   a8a12accd63b437bbd6d58fb6a462ca7
    
  7. 볼륨 ID를 사용해 Block Storage for VPC 인스턴스의 세부사항을 나열하여 Key Protect 루트 키가 스토리지 인스턴스에 저장되어 있는지 확인하십시오. CLI 출력의 암호화 키 필드에서 루트 키를 찾을 수 있습니다.

    ibmcloud is vol <volume_ID>
    

    출력 예

    ID                                     a395b603-74bf-4703-8fcb-b68e0b4d6960   
    Name                                   pvc-479d590f-ca72-4df2-a30a-0941fceeca42   
    Status                                 available   
    Capacity                               10   
    IOPS                                   3000   
    Profile                                5iops-tier   
    Encryption key                         crn:v1:bluemix:public:kms:us-south:a/6ef045fd2b43266cfe8e6388dd2ec098:53369322-958b-421c-911a-c9ae8d5156d1:key:47a985d1-5f5e-4477-93fc-12ce9bae343f   
    Encryption                             user_managed   
    Resource group                         a8a12accd63b437bbd6d58fb6a462ca7
    Created                                2019-08-17T12:29:18-05:00
    Zone                                   us-south-1   
    Volume Attachment Instance Reference
    

기본 스토리지 설정 사용자 정의

사용자 정의된 스토리지 클래스 또는 Kubernetes 시크릿을 사용하여 사용자 정의된 설정으로 Block Storage for VPC를 작성함으로써 기본 PVC 설정 일부를 변경할 수 있습니다.

사용자 정의 스토리지 클래스에서 시크릿을 사용하고 매개 변수를 지정하면 어떤 이점이 있나요?
클러스터 관리자로서 클러스터 사용자가 작성하는 모든 PVC를 특정 구성으로 프로비저닝하려는 경우와 클러스터 사용자가 기본 설정을 대체하지 않도록 하려는 경우 사용자 정의된 스토리지 클래스를 작성합니다.
그러나 여러 구성이 필요하고 가능한 모든 PVC 구성에 대해 사용자 정의된 스토리지 클래스를 작성하지 않으려는 경우 기본 PVC 설정 및 일반 Kubernetes 시크릿에 대한 참조를 사용하여 하나의 사용자 정의된 스토리지 클래스를 작성할 수 있습니다. 클러스터 사용자가 사용자 정의된 스토리지 클래스의 기본 설정을 대체해야 하는 경우 사용자 정의 설정을 보유하고 있는 Kubernetes 시크릿을 작성하여 이를 수행할 수 있습니다.

Block Storage for VPC 인스턴스의 암호화를 설정하려 할 때 사용자 정의된 스토리지 클래스에서 직접 키를 제공하는 대신 Key Protect 루트 키 CRN을 Base64로 인코딩하려는 경우에는 Kubernetes 시크릿을 사용할 수도 있습니다.

기본 스토리지 클래스 변경

버전 에서 4.2 클러스터 Block Storage for VPC 애드온은 기본 스토리지 클래스를 ibmc-vpc-block-10iops-tier 클래스로 설정합니다. ibmc-vpc-block-10iops-tier 이외의 기본 스토리지 클래스가 있고 PVC에서 기본 스토리지 클래스를 사용하는 경우, 이로 인해 다중 기본 스토리지 클래스가 발생하여 PVC 작성에 실패할 수 있습니다. ibmc-vpc-block-10iops-tier 이외의 기본 스토리지 클래스를 사용하려면 IsStorageClassDefault를 false로 변경하도록 addon-vpc-block-csi-driver-configmap을 업데이트할 수 있습니다.

Block Storage for VPC 클러스터 추가 기능의 기본 스토리지 클래스는 ibmc-vpc-block-10iops-tier 스토리지 클래스입니다.

  1. addon-vpc-block-csi-driver-configmap을 편집하십시오.

    kubectl edit cm addon-vpc-block-csi-driver-configmap -n kube-system
    
  2. IsStorageClassDefault 설정을 false로 변경하십시오.

  3. 저장하고 종료하십시오.

  4. 15분 동안 기다린 후 ibmc-vpc-block-10iops-tier 스토리지 클래스의 세부사항을 가져와 변경되었는지 확인하십시오.

    kubectl get sc ibmc-vpc-block-10iops-tier -o yaml
    

사용자 고유의 스토리지 클래스 작성

Block Storage for VPC 인스턴스에 대해 원하는 설정으로 사용자 정의된 스토리지 클래스를 작성하십시오. SDP 프로필을 사용하여 용량과 최대 처리량 제한을 지정할 수 있습니다.

SSD 정의 성능 프로파일(SDP)은 달라스, 프랑크푸르트, 런던, 마드리드, 오사카 D.C, 상파울루, 시드니, 도쿄, 토론토 및 워싱턴에서 이용 가능합니다. SSD 정의 성능 프로파일용 스냅샷 생성은 달라스, 프랑크푸르트, 도쿄 및 워싱턴에서 이용 가능합니다. D.C

원하는 경우 자체 스토리지 클래스를 만들 수도 있습니다:

  • 사용자 정의 IOPS 값을 설정합니다.
  • ext4가 아닌 파일 시스템 유형으로 Block Storage for VPC를 설정합니다.
  • 암호화를 설정하십시오.
  • SSD 정의 성능을 설정합니다.

시작하기 전에

  • 스토리지 클래스 참조를 검토하여 스토리지 클래스에 사용할 profile을 결정하십시오.

  • Block Storage for VPC에 대해 사용자 정의 IOPS를 지정하려는 경우에는 사용자 정의 프로파일을 검토할 수도 있습니다.

  • SSD 정의 성능(SDP) 프로필을 사용하려면 용량 범위 및 IOP 세부 정보를 검토하세요. SSD 정의 성능을 사용하는 경우 볼륨의 용량은 사용자가 지정한 IOP 및 처리량에 따라 결정됩니다.

  • 기존 스토리지 클래스를 자신만의 클래스를 만들기 위한 출발점으로 사용할 수 있습니다. kubectl get sc <storageclass> -o yaml 명령을 사용하여 기존 스토리지 클래스의 세부 정보를 저장합니다.

  • 비용을 낮게 유지하려면 처음에 최소 3000 IOPS 및 1000 처리량(Mbps)의 ibmc-vpc-block-sdp 스토리지 클래스를 사용하여 낮은 용량, 최소 IOPS 및 최소 처리량으로 PVC를 프로비저닝할 수 있습니다. 프로비저닝 후에는 PVC에 액세스하여 필요에 따라 IOPS와 처리량을 조정할 수 있습니다.

사용자 지정 스토리지 클래스를 만들려면 다음과 같이 하세요:

  1. 다음 형식의 사용자 지정 스토리지 클래스 구성 파일을 만듭니다. 1세대와 2세대 스토리지 클래스 중에서 선택하세요.

    1세대 예시:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <storage_class_name>
    provisioner: vpc.block.csi.ibm.io
    parameters:
      profile: "<profile>" # general-purpose, sdp, 5iops-tier, 10iops-tier, or custom
      csi.storage.k8s.io/fstype: "<file_system_type>" # xfs, ext3, or ext4
      billingType: "hourly"
      encrypted: "<encrypted_true_false>"
      encryptionKey: "<encryption_key>"
      resourceGroup: ""
      zone: "<zone>"
      region: "<region>"
      tags: "<tags>"
      generation: "gc"
      throughput: "<throughput>" # Example: 2000
      classVersion: "1"
      iops: "<iops>" # Only specify this parameter if you are using a "custom" profile.
    allowVolumeExpansion: (true|false) # Select true or false. Only supported on version 3.0.1 and later
    volumeBindingMode: <volume_binding_mode>
      # csi.storage.k8s.io/provisioner-secret-name: # Uncomment and add secret parameters to enforce encryption.
      # csi.storage.k8s.io/provisioner-secret-namespace:
    reclaimPolicy: "<reclaim_policy>"
    
    name
    스토리지 클래스의 이름을 입력하십시오.
    profile
    이전 단계에서 선택한 프로필을 입력합니다. general-purpose, sdp, 5iops-tier, 10iops-tier 또는 사용자 지정 IOPs 값을 선택합니다. 특정 프로필에 지원되는 스토리지 크기를 찾으려면 계층형 IOPS 프로필을 참조하세요. 이 스토리지 클래스를 사용하는 PVC는 이 범위 내에서 크기 값을 지정해야 합니다.
    csi.storage.k8s.io/fstype
    매개변수에 Block Storage for VPC 인스턴스에 대한 파일 시스템을 입력하십시오. xfs, ext3 또는 ext4를 선택하십시오. 볼륨의 소유권 또는 권한을 수정하려면 자체 스토리지 클래스에 csi.storage.k8s.io/fstype 을 지정하고 PVC에 ReadWriteOnceaccessMode 로 지정해야 합니다. Block Storage for VPC 드라이버는 ReadWriteOnceWithFSType fsGroupPolicy. 자세한 내용은 CSI 드라이버 문서를 참조하세요.
    encrypted
    매개변수에 true 을 입력하여 Block Storage for VPC 볼륨에 대한 암호화를 설정하는 스토리지 클래스를 만듭니다. 이 옵션을 true 으로 설정하는 경우 parameterencryptionKey 에서 사용하려는 Key Protect 서비스 인스턴스의 루트 키 CRN 을 제공해야 합니다. 데이터 암호화에 대한 자세한 정보는 Block Storage for VPC의 암호화 설정을 참조하십시오.
    encryptionKey
    parameters.encryptedtrue 을 입력했다면 Key Protect 서비스 인스턴스의 루트 키 CRN을 입력하여 Block Storage for VPC 볼륨을 암호화하는 데 사용하세요. 데이터 암호화에 대한 자세한 정보는 Block Storage for VPC의 암호화 설정을 참조하십시오.
    zone
    parameters 섹션에서, Block Storage for VPC 인스턴스를 작성할 VPC 구역을 입력하십시오. 작업자 노드가 연결된 구역을 사용하는지 확인하십시오. 작업자 노드가 사용하는 VPC 영역을 나열하려면 ibmcloud ks cluster get --cluster <cluster_name_or_ID> 을 실행하고 CLI 출력에서 작업자 영역 필드를 확인합니다. 구역을 지정하지 않으면 작업자 노드 구역 중 하나가 Block Storage for VPC 인스턴스에 대해 자동으로 선택됩니다.
    region
    스토리지를 연결할 작업자 노드의 지역입니다.
    tags
    매개변수에서 Block Storage for VPC 인스턴스에 적용할 태그 목록을 공백으로 구분하여 입력합니다. 태그를 사용하면 인스턴스를 더 쉽게 찾거나 사용되는 앱 또는 환경과 같이 공통 특성을 기반으로 인스턴스를 그룹화할 수 있습니다.
    iops
    profilecustom 또는 sdp 을 입력한 경우 Block Storage for VPC 에 사용할 IOP 값을 입력합니다. 볼륨 크기별로 지원되는 IOPS 범위의 목록은 Block Storage for VPC 사용자 정의 IOPS 프로파일 표를 참조하십시오.
    throughput
    sdp 프로필을 사용하는 경우 이 값을 입력합니다. 자세한 내용은 SDP 프로필의 IOP 및 처리량 세부 정보를 참조하세요
    reclaimPolicy
    스토리지 클래스의 재확보 정책을 입력하십시오. PVC를 제거할 때, PV, 물리적 스토리지 디바이스 및 사용자 데이터를 보관하려는 경우 Retain을 입력하십시오. PVC를 제거할 때, PV, 물리적 스토리지 디바이스 및 사용자 데이터를 삭제하려는 경우 Delete를 입력하십시오.
    allowVolumeExpansion
    스토리지 클래스에 대한 볼륨 확장 정책을 입력하십시오. 볼륨 확장을 허용하려면 true를 입력하십시오. 볼륨 확장을 허용하지 않으려면 false를 입력하십시오.
    volumeBindingMode
    이 스토리지를 사용하는 첫 번째 팟(Pod)을 스케줄할 준비가 될 때까지 Block Storage for VPC 인스턴스 작성을 지연할 것인지 여부를 선택하십시오. 작성을 지연하려면 WaitForFirstConsumer를 입력하십시오. PVC를 작성할 때 인스턴스를 작성하려면 Immediate를 입력하십시오.

    2세대 예시:

    1세대 ibmc-vpc-block-5iops-tier 스토리지 클래스를 사용하여 9.6TB PVC를 프로비저닝하는 경우, 최대 IOPS는 48,000이고 최대 처리량은 6144Mbps입니다. 그러나 2세대 ibmc-vpc-block-sdp-max-bandwidth 스토리지 클래스의 경우 최대 IOPS는 64,000이고 최대 처리량은 8192Mbps입니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ibmc-vpc-block-sdp-max-bandwidth
    provisioner: vpc.block.csi.ibm.io
    parameters:
      profile: "sdp" # general-purpose, sdp, 5iops-tier, 10iops-tier, or custom
      csi.storage.k8s.io/fstype: "ext4" # xfs, ext3, or ext4
      billingType: "hourly"
      encrypted: "false"
      encryptionKey: ""
      resourceGroup: ""
      zone: "us-east"
      region: "tor01"
      tags: "tag"
      generation: "gc"
      throughput: "8192" # Example: 2000
      classVersion: "1"
      iops: "64000" # Only specify this parameter if you are using a "custom" profile.
    allowVolumeExpansion: true # Select true or false. Only supported on version 3.0.1 and later
    volumeBindingMode: Immediate
    reclaimPolicy: "Delete"
    
  2. 클러스터에 사용자 정의된 스토리지 클래스를 작성하십시오.

    kubectl apply -f custom-storageclass.yaml
    
  3. 클러스터에서 스토리지 클래스가 사용 가능한지 확인하십시오.

    kubectl get sc
    

    출력 예

    NAME                                    PROVISIONER            AGE
    <custom-storageclass>             vpc.block.csi.ibm.io   4m26s
    
  4. 앱에 Block Storage for VPC 추가에 있는 단계를 수행하여 Block Storage for VPC를 프로비저닝하는 사용자 정의된 스토리지 클래스가 있는 PVC를 작성하십시오. 그런 다음, 샘플 앱에 이 스토리지를 마운트하십시오.

  5. 선택사항: Block Storage for VPC 파일 시스템 유형을 확인하십시오.

Block Storage for VPC 파일 시스템 확인

xfs 또는 ext3과 같이 다른 파일 시스템으로 Block Storage for VPC를 프로비저닝하는 사용자 정의된 스토리지 클래스를 작성할 수 있습니다. 기본적으로 모든 Block Storage for VPC 인스턴스는 ext4 파일 시스템으로 프로비저닝됩니다.

  1. 다음 단계에 따라 사용할 파일 시스템으로 사용자 정의된 스토리지 클래스를 작성하십시오.

  2. 앱에 Block Storage for VPC 추가의 4 - 9단계를 수행하여 Block Storage for VPC를 다른 파일 시스템으로 프로비저닝하는 데 필요한, 사용자 정의된 스토리지 클래스로 PVC를 작성하십시오. 그 후 이 스토리지를 앱 팟(Pod)에 마운트하십시오.

    스토리지를 마운트하고 앱이 실행 상태가 되려면 몇 분 정도 소요될 수 있습니다.

  3. 스토리지가 올바른 파일 시스템으로 마운트되었는지 확인하십시오. 클러스터의 팟(Pod)을 나열하고 스토리지를 마운트하는 데 사용되는 팟(Pod)의 이름을 기록해 두십시오.

    kubectl get pods
    
  4. 팟(Pod)에 로그인하십시오.

    kubectl exec <pod_name> -it bash
    
  5. 팟(Pod) 내부의 마운트 경로를 나열하십시오.

    mount | grep /dev/xvdg
    

    xfs의 출력 예제.

    /dev/xvdg on /test type xfs (rw,relatime,attr2,inode64,noquota)
    
  6. 팟(Pod)을 종료하십시오.

    exit
    

업데이트 VolumeAttachLimit

Block Storage for VPC 클러스터 추가 기능의 버전 5.2 이상에서는 configmap을 편집하여 각 노드에 연결할 수 있는 최대 볼륨 수를 편집할 수 있습니다. 기본값은 12입니다.

이 기능을 사용하려면 계정이 승인되어야 합니다.

  1. 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

  2. configmap을 편집하십시오. VALUE 를 설정할 볼륨 연결 한계로 대체하십시오.

    kubectl patch configmap/addon-vpc-block-csi-driver-configmap \       
    -n kube-system \
    --type merge \
    -p '{"data":{"VolumeAttachmentLimit":"VALUE"}}'
    
  3. kube-system 네임스페이스의 ibm-vpc-block-csi-node 팟 (Pod) 이 다시 시작될 때까지 기다리십시오. 팟 (Pod) 이 다시 시작되었는지 확인하십시오.

    kubectl get pods -n kube-system -w| grep block-csi
    
  4. 이제 동적 프로비저닝을 사용하거나 수동으로 첨부 파일을 작성하여 작업자 노드에 볼륨을 첨부할 수 있습니다. 자세한 정보는 앱에 Block Storage for VPC 추가 또는 기존 Block Storage for VPC 인스턴스 사용 을 참조하십시오.

Kubernetes 시크릿에 사용자 정의 PVC 설정 저장

Kubernetes 시크릿에서 PVC 설정을 지정하고 사용자 정의된 스토리지 클래스에서 이 시크릿을 참조하십시오. 그런 다음, 사용자 정의된 스토리지 클래스를 사용하여 시크릿에 설정한 사용자 정의 매개변수로 PVC를 작성하십시오.

Kubernetes 비밀 번호를 사용하려면 어떤 옵션이 있나요?
클러스터 관리자로서 각 클러스터 사용자가 스토리지 클래스의 기본 설정을 대체할 수 있도록 할지 아니면 클러스터의 모든 사용자가 사용해야 하고 Key Protect 루트 키 CRN에 대한 base64 인코딩을 적용하는 하나의 시크릿을 작성할지를 선택할 수 있습니다.
모든 사용자가 기본 설정을 사용자 정의할 수 있음
이 시나리오에서 클러스터 관리자는 일반 Kubernetes 시크릿에 대한 참조 및 기본 PVC 설정으로 하나의 사용자 정의된 스토리지 클래스를 작성합니다. 클러스터 사용자는 원하는 PVC 설정으로 Kubernetes 시크릿을 작성하여 스토리지 클래스의 기본 설정을 대체할 수 있습니다. 시크릿에 있는 사용자 정의된 설정을 Block Storage for VPC 인스턴스에 적용하려면 Kubernetes 시크릿과 동일한 이름으로 PVC를 작성해야 합니다.
Key Protect 루트 키에 대해 base64 인코딩 적용
이 시나리오에서는 사용자 정의된 스토리지 클래스의 기본 설정을 개선하거나 오버라이드하는 정적 Kubernetes 시크릿에 대한 참조 및 기본 PVC 설정으로 하나의 사용자 정의된 스토리지 클래스를 작성합니다. 클러스터 사용자는 고유 Kubernetes 시크릿을 작성하여 기본 설정을 대체할 수 없습니다. 대신 클러스터 사용자는 사용자 정의된 스토리지 클래스 및 시크릿에서 선택하는 구성으로 Block Storage for VPC를 프로비저닝해야 합니다. 사용자 정의된 스토리지 클래스만 작성하는 경우와 비교했을 때 이 방법을 사용하는 경우의 장점은 Key Protect 인스턴스의 데이터를 암호화하려는 경우 Block Storage for VPC 서비스 인스턴스의 루트 키 CRN에 대해 Base64 인코딩을 강제할 수 있는 것입니다.
내 PVC 설정에 Kubernetes 비밀 번호를 사용하기 전에 주의해야 할 사항은 무엇인가요?
reclaimPolicy, fstype 또는 volumeBindingMode 와 같은 일부 PVC 설정은 Kubernetes 시크릿에서 설정할 수 없으며 스토리지 클래스에서 설정해야 합니다. 클러스터 관리자로서 클러스터 사용자가 기본 설정을 대체할 수 있도록 하려는 경우, 사용자가 다른 reclaimPolicy, fstypevolumeBindingMode 설정으로 Block Storage for VPC를 프로비저닝할 수 있도록 일반 Kubernetes 시크릿을 참조하는 충분히 사용자 정의된 스토리지 클래스를 설정해야 합니다.

모든 사용자가 기본 PVC 설정을 사용자 정의하도록 설정

  1. 클러스터 관리자는 다음 단계에 따라 사용자 정의된 스토리지 클래스를 작성하십시오. 사용자 정의된 스토리지 클래스 YAML 파일에서 다음과 같이 metadata.parameters 섹션의 Kubernetes 시크릿을 참조하십시오. 코드를 그대로 추가하고 변수 이름을 변경하지 않도록 해야 합니다.

    csi.storage.k8s.io/provisioner-secret-name: ${pvc.name}
    csi.storage.k8s.io/provisioner-secret-namespace: ${pvc.namespace}
    
  2. 클러스터 사용자는 스토리지 클래스의 기본 설정을 사용자 정의하는 Kubernetes 시크릿을 작성하십시오.

    apiVersion: v1
    kind: Secret
    type: vpc.block.csi.ibm.io
    metadata:
      name: <secret_name>
      namespace: <namespace_name>
    stringData:
      iops: "<IOPS_value>"
      zone: "<zone>"
      tags: "<tags>"
      encrypted: <true_or_false>
      resourceGroup: "<resource_group>"
    data
      encryptionKey: <encryption_key>
    
    name
    Kubernetes 시크릿의 이름을 입력하십시오.
    namespace
    시크릿이 작성될 네임스페이스를 입력하십시오. PVC에 있는 시크릿을 참조하려면 PVC는 동일한 네임스페이스에 작성되어야 합니다.
    iops
    stringData 섹션에서, Block Storage for VPC 인스턴스에 대해 허용할 IOPS 범위를 입력하십시오. 입력하는 범위는 사용하려는 Block Storage for VPC 티어와 일치해야 합니다.
    zone
    stringData 섹션에서, Block Storage for VPC 인스턴스를 작성할 VPC 구역을 입력하십시오. 작업자 노드가 연결된 구역을 사용하는지 확인하십시오. 작업자 노드가 사용하는 VPC 영역을 나열하려면 ibmcloud ks cluster get --cluster <cluster_name_or_ID> 을 실행하고 CLI 출력에서 작업자 영역 필드를 확인합니다. 구역을 지정하지 않으면 작업자 노드 구역 중 하나가 Block Storage for VPC 인스턴스에 대해 자동으로 선택됩니다.
    tags
    stringData 섹션에서, PVC를 작성할 때 사용할 쉼표로 구분된 태그 목록을 입력하십시오. 태그를 사용하면 스토리지 인스턴스가 생성된 후 이를 쉽게 찾을 수 있습니다.
    resourceGroup
    문자열 데이터 섹션에 Block Storage for VPC 인스턴스가 액세스 권한을 얻으려는 리소스 그룹 ID를 입력합니다. 리소스 그룹을 입력하지 않으면 인스턴스에는 클러스터가 속하는 리소스 그룹의 리소스에 액세스할 수 있는 권한이 자동으로 부여됩니다.
    encrypted
    문자열 데이터 섹션에 true 을 입력하여 Block Storage for VPC 볼륨에 대한 암호화를 설정하는 비밀번호를 만듭니다. 이 옵션을 true 으로 설정하는 경우 parameters.encryptionKey 에서 사용하려는 Key Protect 서비스 인스턴스의 루트 키 CRN 을 제공해야 합니다. 데이터 암호화에 대한 자세한 정보는 Block Storage for VPC의 암호화 설정을 참조하십시오.
    encryptionKey
    데이터 섹션에서 parameters.encryptedtrue 을 입력했다면 Key Protect 서비스 인스턴스의 루트 키 CRN을 입력하여 Block Storage for VPC 볼륨을 암호화하는 데 사용하려는 루트 키를 입력합니다. 시크릿에 있는 루트 키 CRN을 사용하려면 먼저 echo -n "<root_key_CRN>" | base64를 실행하여 이를 base64로 변환해야 합니다. 데이터 암호화에 대한 자세한 정보는 Block Storage for VPC의 암호화 설정을 참조하십시오.
  3. Kubernetes 시크릿을 작성하십시오.

    kubectl apply -f secret.yaml
    
  4. 앱에 Block Storage for VPC 추가의 단계를 수행하여 사용자 정의 설정이 있는 PVC를 작성하십시오. 클러스터 관리자가 작성한 사용자 정의된 스토리지 클래스로 PVC를 작성하고 시크릿에 사용한 PVC의 동일한 이름을 사용해야 합니다. 시크릿 및 PVC에 동일한 이름을 사용하면 PVC에서 시크릿의 설정을 적용하도록 스토리지 제공자가 트리거됩니다.

Key Protect 루트 키 CRN에 대해 base64 인코딩 적용

  1. 클러스터 관리자는 Key Protect 루트 키 CRN에 대해 base64 인코딩된 값을 포함하는 Kubernetes 시크릿을 작성하십시오. 루트 키 CRN을 검색하려면 Block Storage for VPC의 암호화 설정을 참조하십시오.

    apiVersion: v1
    kind: Secret
    type: vpc.block.csi.ibm.io
    metadata:
      name: <secret_name>
      namespace: <namespace_name>
    stringData:
      encrypted: <true_or_false>
      resourceGroup: "<resource_group>"
    data:
      encryptionKey: <encryption_key>
    
    name
    Kubernetes 시크릿의 이름을 입력하십시오.
    namespace
    시크릿이 작성될 네임스페이스를 입력하십시오. PVC에 있는 시크릿을 참조하려면 PVC는 동일한 네임스페이스에 작성되어야 합니다.
    encrypted
    문자열 데이터 섹션에 true 을 입력하여 Block Storage for VPC 볼륨에 대한 암호화를 설정하는 비밀번호를 만듭니다. 이 옵션을 true 으로 설정하는 경우 parameters.encryptionKey 에서 사용하려는 Key Protect 서비스 인스턴스의 루트 키 CRN 을 제공해야 합니다. 데이터 암호화에 대한 자세한 정보는 Block Storage for VPC의 암호화 설정을 참조하십시오.
    encryptionKey
    데이터 섹션에서 parameters.encryptedtrue 을 입력했다면 Key Protect 서비스 인스턴스의 루트 키 CRN을 입력하여 Block Storage for VPC 볼륨을 암호화하는 데 사용하려는 루트 키를 입력합니다. 시크릿에 있는 루트 키 CRN을 사용하려면 먼저 echo -n "<root_key_CRN>" | base64를 실행하여 이를 base64로 변환해야 합니다. 데이터 암호화에 대한 자세한 정보는 Block Storage for VPC의 암호화 설정을 참조하십시오.
  2. Kubernetes 시크릿을 작성하십시오.

    kubectl apply -f secret.yaml
    
  3. 다음 단계에 따라 사용자 정의된 스토리지 클래스를 작성하십시오. 사용자 정의된 스토리지 클래스 YAML 파일에서 다음과 같이 metadata.parameters 섹션의 Kubernetes 시크릿을 참조하십시오. 이전에 작성한 Kubernetes 시크릿의 이름과 시크릿을 작성한 네임스페이스를 입력해야 합니다.

    csi.storage.k8s.io/provisioner-secret-name: <secret_name>
    csi.storage.k8s.io/provisioner-secret-namespace: <secret_namespace>
    
  4. 클러스터 사용자로서 앱에 Block Storage for VPC 추가의 단계를 수행하여 사용자 정의된 스토리지 클래스에서 PVC를 작성하십시오.

볼륨 확장 설정

확장을 지원하는 볼륨을 프로비저닝하려면 allowVolumeExpansiontrue로 설정된 스토리지 클래스를 사용해야 합니다.

앱 팟(Pod)에 마운트된 볼륨만 확장할 수 있습니다.

계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

  1. 4.2 버전 이상의 애드온을 사용하지 않는 경우 클러스터에서 Block Storage for VPC 클러스터 애드온을 업데이트하세요.

  2. 볼륨 확장을 지원하는 스토리지 클래스를 사용하는 PVC를 작성하십시오 .

  3. PVC를 사용하는 앱을 배치하십시오. 앱을 작성할 때 지정하는 mountPath를 기록해 두십시오.

  4. PVC가 앱 팟(Pod)에서 마운트된 후 PVC의 spec.resources.requests.storage 필드 값을 편집하여 볼륨을 확장할 수 있습니다. 볼륨을 확장하려면 PVC를 편집하여 spec.resources.requests.storage 필드의 값을 늘리십시오.

    kubectl edit pvc <pvc-name>
    

    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  5. PVC를 저장한 후 닫으십시오.

  6. 선택사항: 볼륨이 확장되었는지 확인하십시오. PVC의 세부사항을 가져와 PV 이름을 기록해 두십시오.

    kubectl get pvc <pvc-name>
    
  7. PV의 세부사항을 표시하고 볼륨 ID를 기록해 두십시오.

    kubectl describe PV
    
  8. Block Storage for VPC 볼륨의 세부사항을 가져와 용량을 확인하십시오.

    ibmcloud is vol <volume-ID>
    

애드온 버전 이전에 수동으로 볼륨 확장하기 4.2

애드온 버전 4.2 이전에 생성된 기존 Block Storage for VPC 볼륨을 수동으로 확장하려면 다음 단계를 완료하세요.

앱 팟(Pod)에 마운트된 볼륨만 확장할 수 있습니다.

  1. 앱의 세부사항을 가져오고 PVC 이름 및 mountPath를 기록해 두십시오.

    kubectl get pod <pod-name> -n <pod-namespace> -o yaml
    
  2. PVC의 세부사항을 가져와 PV 이름을 기록해 두십시오.

    kubectl get pvc
    
  3. PV의 세부사항을 표시하고 volumeId를 가져오십시오.

    kubectl describe pv `pv-name` | grep volumeId
    

    r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1의 볼륨 ID에 대한 출력 예제.

    volumeId=r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1
    
  4. PATCH 요청을 사용하여 볼륨의 크기를 조정하십시오. 다음 예제는 볼륨 크기를 250 GiB로 조정합니다.

    curl -sS -X PATCH -H "Authorization: <iam_token>" "https://<region>.iaas.cloud.ibm.com/v1/volumes/<volumeId>?generation=2&version=2020-06-16" -d '{"capacity":250}'
    
    <iam_token>
    사용자의 IAM 토큰입니다. IAM 토큰을 검색하려면 ibmcloud iam oauth-tokens를 실행하십시오.
    <region>
    클러스터가 있는 지역입니다(예: us-south).
    <volumeId>
    이전에 검색한 볼륨 ID입니다. 예: r011-a1aaa1f1-3aaa-4a73-84aa-0aa32e11a1a1.
    <capacity>
    GiB,(예: 250)의 용량이 증가했습니다.
  5. 앱 팟(Pod)에 로그인하십시오.

    kubectl exec <pod-name> -it -- bash
    
  6. 다음 명령을 실행하여 호스트 2진을 사용하십시오.

    chroot /host
    
  7. 파일 시스템 세부사항을 가져오고 업데이트할 Filesystem 경로를 기록해 두십시오. 애플리케이션 팟(Pod)에 지정된 마운트 경로에 대해 grep을 사용할 수도 있습니다. df -h | grep <mount-path>

    df -h
    

    출력 예

    Filesystem      Size  Used Avail Use% Mounted on
    overlay          98G   64G   29G  70% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs            32G     0   32G   0% /sys/fs/cgroup
    shm              64M     0   64M   0% /dev/shm
    /dev/vda2        98G   64G   29G  70% /etc/hosts
    /dev/vdg        9.8G   37M  9.8G   1% /mount-path # Note the Filesystem path that corresponds to the mountPath that you specified in your app.
    tmpfs            32G   40K   32G   1% /run/secrets/kubernetes.io/serviceaccount
    tmpfs            32G     0   32G   0% /proc/acpi
    tmpfs            32G     0   32G   0% /proc/scsi
    tmpfs            32G     0   32G   0% /sys/firmware
    
  8. 파일 시스템의 크기를 조정하십시오.

    sudo resize2fs <filesystem-path>
    

    명령 예

    sudo resize2fs /dev/vdg
    
  9. 파일 시스템의 크기가 조정되었는지 확인하십시오.

    df -h
    

데이터 백업 및 복원

Block Storage for VPC에 있는 데이터는 지역 내의 중복 결함 구역에서 보호됩니다. 데이터를 수동으로 백업하려면 Kubernetes kubectl cp 명령을 사용하십시오.

kubectl cp 명령어를 사용하여 클러스터의 파드 또는 특정 컨테이너에 파일과 디렉터리를 복사할 수 있다

시작하기 전에: 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

데이터를 백업 또는 복원하려면 다음 옵션 중에서 선택하십시오.

로컬 시스템의 데이터를 클러스터의 팟(pod)에 복사하십시오.

kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>

클러스터의 팟(pod)에 있는 데이터를 로컬 시스템에 복사하십시오.

kubectl cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>

로컬 시스템의 데이터를 클러스터의 팟(pod)에서 실행하는 특정 컨테이너에 복사하십시오.

kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER

볼륨 요청 용량 이해

VPC 블록 CSI 드라이버는 다음 공식을 사용하여 볼륨 용량을 계산합니다.

  • 값이 Gi 로 제공된 경우: rBytes(requestedBytes) = X * 1024^3

  • 값이 G 로 제공된 경우: rBytes(requestedBytes) = X * 10^9

요청된 값은 (((rBytes+ GiB - 1) / GiB) * GiB) / GiB 과 (와) 같습니다.

예를 들어, 다음과 같습니다.

  • 위의 공식을 적용하여 20Gi 값이 제공되는 경우 작성되는 볼륨은 20GB 입니다.
  • 20G 값이 제공되면 작성되는 볼륨은 19GB 입니다.

작성되는 볼륨의 용량이 요청된 값보다 작은 경우가 있습니다. 청구는 요청된 볼륨이 아닌 작성된 볼륨에 적용됩니다.

차단 스토리지에 신뢰할 수 있는 프로필 할당하기

알려진 문제로 인해, 신뢰할 수 있는 프로필이 구현된 경우 VPC Block Storage 볼륨의 사용자 태그 업데이트가 표시되지 않을 수 있습니다. 이 문제는 신뢰할 수 있는 프로필을 사용하지 않는 클러스터에서는 나타나지 않습니다.

신뢰할 수 있는 프로필을 사용하여 스토리지 솔루션을 비롯한 계정의 리소스에 대한 액세스 권한을 다른 IBM Cloud ID에 부여할 수 있습니다. 신뢰할 수 있는 프로필은 액세스 제어를 중앙 집중화하고, 수명이 긴 API 키가 필요하지 않으며, 특정 작업에 필요한 최소한의 권한으로만 범위를 지정할 수 있습니다. 자세한 내용은 스토리지 구성 요소에 대한 신뢰할 수 있는 프로필 구성을 참조하세요.