IBM Cloud Object Storage 클러스터 애드온 설치하기

IBM Cloud 콘솔이나 CLI에서 ‘ IBM Cloud Object Storage ’ 애드온을 활성화할 수 있습니다.

전제조건:

  • IBM Cloud Object Storage 애드온에는 최소 0.3 vCPU 및 360MB의 메모리가 필요합니다.
  • 이 애드온은 Red Hat CoreOS (RHCOS) 및 Ubuntu 작업자 노드에서 사용할 수 있습니다. 클러스터에 RHEL 및 RHCOS 노드가 모두 있는 경우 애드온은 RHCOS 노드에만 배포됩니다.
  • IBM Cloud Object Storage 인스턴스를 설정합니다.
  • 선택 사항 버킷 버전 관리를 사용하려는 경우 버킷에서 버킷 버전 관리를 사용하거나 사용하지 않으려면 서비스 자격 증명에 관리자 또는 작성자 권한이 있어야 합니다. 자세한 내용은 ‘버전 관리 시작하기’를 참조하십시오.

버킷 생성 및 제거에 대한 이해

  • PVC에 버킷 이름을 지정하여 기존 버킷을 사용할 수 있습니다.
  • 버킷 이름을 입력했는데 해당 버킷이 존재하지 않으면 해당 이름의 버킷이 만들어집니다.
  • 버킷 이름을 지정하지 않으면, 마운터 유형에 따라 s3fs-<timestamp>-xxx 또는 rclone-<timestamp>-xxx 형식의 버킷이 생성됩니다.
  • 버킷은 스토리지 클래스에 정의된 회수 정책에 따라 삭제됩니다.
    • reclaimPolicy: Delete 설정하면 PVC가 삭제될 때 버킷이 삭제됩니다.
    • reclaimPolicy: Retain 설정하면 PVC가 삭제된 후에도 버킷이 유지됩니다.

콘솔에서 ‘ IBM Cloud Object Storage ’ 애드온 활성화하기

  1. Red Hat OpenShift on IBM Cloud 클러스터 대시보드 에서 애드온을 활성화할 클러스터를 선택합니다.
  2. ‘추가 기능 ’ 섹션에서 Cloud Object Storage 애드온을 찾아 ‘설치’를 클릭하십시오.
  3. 애드온 설치: Cloud Object Storage ” 패널에서 “버전” 드롭다운 메뉴에서 버전을 선택하십시오.
  4. 선택 사항: 다음 매개변수를 구성하십시오.
maxVolumesPerNode
단일 노드에 마운트할 수 있는 IBM Cloud Object Storage 볼륨의 최대 개수를 설정합니다. 기본값은 0``이며, 이는 제한이 적용되지 않음을 의미합니다.
restrictNodeServerScheduling
true 로 설정하면, 노드 서버 포드가 cos.csi.ibm.io/csi-node=true 레이블이 지정된 노드에서만 실행되도록 제한할 수 있습니다. 기본값은 false``이며, 이는 노드 서버 파드가 모든 노드에 스케줄링된다는 것을 의미합니다.
  1. 설치를 클릭하십시오. 추가 기능을 배치하여 사용할 준비가 될 때까지 몇 분 정도 소요될 수 있습니다.
  2. 설치를 확인하십시오. ‘추가 기능 ’ 섹션에서 Cloud Object Storage 애드온의 건강 상태가 ‘정상’으로 표시되는지 확인하십시오.

CLI에서 IBM Cloud Object Storage 애드온 활성화하기

시작하기 전에: Red Hat OpenShift 클러스터에 액세스하십시오.

  1. container-service 플러그인을 최신 버전으로 업데이트하십시오.
    ibmcloud update && ibmcloud plugin update container-service
    
  2. 애드온을 나열하고 설치할 버전을 찾습니다.
    ibmcloud oc cluster addon versions
    
  3. 추가 기능 옵션을 검토하십시오.
    ibmcloud oc cluster addon options --addon ibm-object-csi-driver [--version VERSION]
    
  4. 애드온을 설치합니다.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION]
    
  5. 설치를 확인하십시오.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    
    OK
    Name                    Version   Health State   Health Status
    ibm-object-csi-driver   1.0       normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)
    
  6. 사용 가능한 스토리지 클래스를 나열하십시오. 이 드라이버는 s3fsrclone 마운터에 대해 지역 내 및 지역 간 스토리지 클래스를 모두 지원합니다.
    oc get sc | grep object
    
    ibm-object-storage-smart-cross-region-rclone             cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-smart-cross-region-rclone-retain      cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-smart-cross-region-s3fs               cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-smart-cross-region-s3fs-retain        cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-smart-rclone                          cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-smart-rclone-retain                   cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-smart-s3fs                            cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-smart-s3fs-retain                     cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-standard-cross-region-rclone          cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-standard-cross-region-rclone-retain   cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-standard-cross-region-s3fs            cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-standard-cross-region-s3fs-retain     cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-standard-rclone                       cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-standard-rclone-retain                cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-standard-s3fs                         cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-standard-s3fs-retain                  cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    

노드 서버 포드 스케줄링 제한

기본적으로 COS CSI 드라이버 노드 서버 파드는 클러스터 내의 모든 노드에 스케줄링됩니다. restrictNodeServerScheduling 매개변수를 사용하면 노드 서버 포드의 스케줄링을 cos.csi.ibm.io/csi-node=true 레이블이 지정된 노드로만 제한할 수 있습니다.

restrictNodeServerScheduling 는 애드온을 활성화할 때 구성할 수 있으며, 나중에 ConfigMap 파일을 수정하여 업데이트할 수도 있습니다.

  • 애드온을 활성화할 때 restrictNodeServerScheduling 를 설정하려면, 활성화 명령어에 --param 플래그를 포함시키십시오.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "restrictNodeServerScheduling=true"
    
  • 애드온이 이미 활성화된 상태에서 restrictNodeServerScheduling 을 업데이트하려면 다음 단계를 따르세요.
  1. 클러스터에 있는 노드를 나열하고, COS 드라이버 포드를 실행할 위치를 결정하십시오.
    oc get nodes
    
    출력 예
    NAME            STATUS   ROLES    AGE    VERSION
    10.241.0.11     Ready    <none>   5d2h   v1.35.5+IKS
    10.241.0.12     Ready    <none>   5d2h   v1.35.5+IKS
    10.241.0.13     Ready    <none>   5d2h   v1.35.5+IKS
    10.241.128.10   Ready    <none>   5d2h   v1.35.5+IKS
    10.241.128.11   Ready    <none>   5d2h   v1.35.5+IKS
    10.241.128.9    Ready    <none>   5d2h   v1.35.5+IKS
    10.241.65.12    Ready    <none>   5d2h   v1.35.5+IKS
    10.241.65.13    Ready    <none>   5d2h   v1.35.5+IKS
    10.241.65.14    Ready    <none>   5d2h   v1.35.5+IKS
    
  2. 모든 노드에서 노드 서버 포드가 현재 실행 중인지 확인하십시오.
    oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wide
    
    출력 예
    NAME                        READY   STATUS    RESTARTS   AGE    IP              NODE            NOMINATED NODE   READINESS GATES
    ibm-object-csi-node-2pj2j   3/3     Running   0          145m   172.17.14.10    10.241.0.12     <none>           <none>
    ibm-object-csi-node-7bhwh   3/3     Running   0          145m   172.17.1.72     10.241.65.12    <none>           <none>
    ibm-object-csi-node-7l9hc   3/3     Running   0          145m   172.17.17.6     10.241.128.9    <none>           <none>
    ibm-object-csi-node-cxzt7   3/3     Running   0          145m   172.17.39.72    10.241.0.11     <none>           <none>
    ibm-object-csi-node-dw6qs   3/3     Running   0          145m   172.17.46.77    10.241.128.10   <none>           <none>
    ibm-object-csi-node-rpcvr   3/3     Running   0          145m   172.17.32.198   10.241.65.13    <none>           <none>
    ibm-object-csi-node-swqtg   3/3     Running   0          145m   172.17.16.69    10.241.0.13     <none>           <none>
    ibm-object-csi-node-sxbbs   3/3     Running   0          145m   172.17.26.7     10.241.65.14    <none>           <none>
    ibm-object-csi-node-xm8bt   3/3     Running   0          145m   172.17.20.200   10.241.128.11   <none>           <none>
    
  3. 노드서버 파드가 스케줄링되기를 원하는 노드에 레이블을 지정하세요.
    oc label nodes NODE-NAME-1 NODE-NAME-2 cos.csi.ibm.io/csi-node=true
    
    출력 예
    node/10.241.0.11 labeled
    node/10.241.0.12 labeled
    
  4. ConfigMap 를 업데이트하여 제한 기능을 활성화하십시오.
    oc patch cm managed-addon-ibm-object-csi-driver -n kube-system \
      --type merge -p '{"data":{"restrictNodeServerScheduling":"true"}}'
    
    출력 예
    configmap/managed-addon-ibm-object-csi-driver patched
    
  5. 노드 서버 파드가 라벨이 지정된 노드에만 스케줄링되는지 확인하십시오.
    oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wide
    
    출력 예
    NAME                        READY   STATUS    RESTARTS   AGE    IP             NODE           NOMINATED NODE   READINESS GATES
    ibm-object-csi-node-cxzt7   3/3     Running   0          145m   172.17.39.72   10.241.0.11    <none>           <none>
    ibm-object-csi-node-7bhwh   3/3     Running   0          145m   172.17.1.72    10.241.65.12   <none>           <none>
    
restrictNodeServerScheduling 옵션
설정 동작
restrictNodeServerScheduling: "false"(기본값) Nodeserver 파드는 모든 노드에 스케줄링됩니다.
restrictNodeServerScheduling: "true" Nodeserver 파드는 ‘ cos.csi.ibm.io/csi-node=true ’ 레이블이 지정된 노드에만 스케줄링됩니다.

노드별 최대 볼륨 수 설정

기본적으로 COS CSI 드라이버는 단일 노드에 마운트할 수 있는 볼륨의 수를 제한하지 않습니다. maxVolumesPerNode 매개변수를 사용하여 노드당 볼륨의 최대 개수를 설정할 수 있습니다.

maxVolumesPerNode 는 애드온을 활성화할 때 구성할 수 있으며, 나중에 ConfigMap 파일을 수정하여 업데이트할 수도 있습니다.

  • 애드온을 활성화할 때 maxVolumesPerNode 를 설정하려면, 활성화 명령어에 --param 플래그를 포함시키십시오.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "maxVolumesPerNode=VALUE"
    
  • 애드온이 이미 활성화된 상태에서 maxVolumesPerNode 을 업데이트하려면, 관리형 애드온 ConfigMap 에 패치를 적용하십시오.
    oc patch cm managed-addon-ibm-object-csi-driver -n kube-system --type merge -p '{"data":{"maxVolumesPerNode":"VALUE"}}'
    
    출력 예
    configmap/managed-addon-ibm-object-csi-driver patched
    
maxVolumesPerNode 옵션
설정 동작
maxVolumesPerNode: "0"(기본값) 노드당 마운트할 수 있는 볼륨 수에는 제한이 없습니다.
maxVolumesPerNode: "VALUE" 단일 노드에 마운트할 수 있는 볼륨 수를 지정된 값으로 제한합니다.

다음 기능을 사용하는 앱을 배포하려면 IBM Cloud Object Storage

COS 자격 증명이 포함된 ‘ Kubernetes ’ 시크릿을 생성합니다.

  1. Red Hat OpenShift 클러스터에 액세스하십시오.

  2. 다음 구성을 secret.yaml 파일로 저장합니다. IAM 자격 증명 또는 HMAC 자격 증명 중 하나만 제공하십시오. 둘 다 제공해서는 안 됩니다.

    • IAM 자격 증명에 대해서는 IBM Cloud Object Storage 서비스 인스턴스의 apiKeyserviceId 을 사용하십시오.
    • HMAC 자격 증명의 경우, IBM Cloud Object Storage 서비스 인스턴스에서 accessKeysecretKey 을 사용하십시오.
    apiVersion: v1
    kind: Secret
    type: cos-s3-csi-driver
    metadata:
        name: cos-secret-1 # Name your secret. This same name is used for the PVC in the following steps.
        namespace: <namespace> # Specify the namespace where you want to create the secret.
    data:
        # --- IAM credentials (provide apiKey + serviceId) ---
        apiKey: <base64-encoded-COS-Service-Instance-apikey>
        serviceId: <base64-encoded-COS-resource_instance_id>
        # --- HMAC credentials ---
        accessKey: <base64-encoded-HMAC-access_key_id>
        secretKey: <base64-encoded-HMAC-secret_access_key>
        # --- Optional credential fields (base64-encoded) ---
        kpRootKeyCRN: <base64-encoded-Key-Protect-root-key-CRN>
        resourceConfigApiKey: <base64-encoded-apikey> # Required only when quotaLimit is "true".
    stringData:
        # --- Optional config fields (plain text) ---
        cosEndpoint: "https://<cos_s3_service_endpoint>" # Overrides the cosEndpoint from the storage class.
        locationConstraint: "<region>-standard" # Overrides the locationConstraint from the storage class.
        iamEndpoint: "<iam-endpoint-url>" # Overrides the default iam endpoint set in COS CSI Driver
        objectPath: "<subdirectory>" # Optional. Subdirectory within the bucket to mount, for example "data".
        bucketName: <bucket-name> # Optional. If you don't provide a bucket name, a bucket with the naming convention s3fs-<timestamp>-xxx or rclone-<timestamp>-xxx is created.
        bucketVersioning: "false" # Set to "true" to enable bucket versioning. Set to "false" to disable versioning. Must be a string value.
        quotaLimit: "false" # Set to "true" to enforce a hard quota on the bucket equal to the PVC storage size. Requires resourceConfigApiKey.
        mountOptions: |
            # uid=3000  # Optional: Run as non-root user. Must match runAsUser in SecurityContext of pod spec.
            # Review or update the following default s3fs mount options
            #multipart_size=52
            #multireq_max=20
            #max_dirty_data=5120
            #parallel_count=20
            #max_stat_cache_size=100000
            #retries=5
            #kernel_cache
            #max_background=1000
            # Review or update the following default rclone mount options
            #acl=private
            #bucket_acl=private
            #upload_cutoff=100Mi
            #chunk_size=16Mi
            #max_upload_parts=1000
            #upload_concurrency=8
            #multi_thread_streams=8
            #disable_checksum=true
    
    apiKey
    IAM 인증에 필요합니다. IBM Cloud Object Storage 서비스 인스턴스에 대한 base64-encoded IBM Cloud IAM API 키를 입력하세요. API 키는 apikey 페이지의 서비스 자격 증명에서 확인할 수 있습니다. apiKey + serviceId 또는 accessKey + secretKey 중 하나만 입력하고, 둘 다 입력하지 마십시오.
    serviceId
    IAM 인증에 필요합니다. IBM Cloud Object Storage 서비스 인스턴스에 해당하는 ‘ base64-encoded ’ 리소스 인스턴스 ID를 입력하십시오. 이 값은 resource_instance_id 경로의 서비스 자격 증명에서 확인할 수 있습니다.
    accessKey
    HMAC 인증에 필요합니다. base64-encoded 의 HMAC 액세스 키 ID를 입력하십시오. 이 값은 cos_hmac_keys.access_key_id 경로의 서비스 자격 증명에서 확인할 수 있습니다. accessKey + secretKey 또는 apiKey + serviceId 중 하나만 입력하고, 둘 다 입력하지 마십시오.
    secretKey
    HMAC 인증에 필요합니다. base64-encoded 의 HMAC 비밀 액세스 키를 입력하세요. 이 값은 cos_hmac_keys.secret_access_key 경로의 서비스 자격 증명에서 확인할 수 있습니다.
    kpRootKeyCRN
    선택사항입니다. Key Protect 인스턴스의 ‘ base64-encoded ’ 루트 키 CRN을 입력하십시오. CRN을 확인하려면 IBM Cloud 콘솔에서 해당 KMS 인스턴스로 이동한 다음, [ Keys]를 열고 루트 키를 클릭한 후 키 세부 정보에서 CRN을 복사하십시오. 이 기능은 새 버킷에만 적용되며, 기존 버킷에는 암호화 기능을 추가할 수 없습니다.
    iamEndpoint
    선택사항입니다. IBM Cloud 의 IAM 토큰 엔드포인트 URL 를 일반 텍스트로 입력하세요. 기본적으로 이 드라이버는 VPC 클러스터의 경우 https://private.iam.cloud.ibm.com 을, 클래식 클러스터의 경우 https://iam.cloud.ibm.com 을 사용합니다. 다른 IAM 엔드포인트를 사용해야 하는 경우에만 이 값을 재정의하십시오.
    cosEndpoint
    선택사항입니다. IBM Cloud Object Storage 엔드포인트 URL 를 일반 텍스트로 입력하십시오(예: https://s3.us.cloud-object-storage.appdomain.cloud). 이 값이 지정되면, 스토리지 클래스에서 설정된 cosEndpoint 값보다 우선 적용됩니다. 버킷이 다른 리전에 있거나 직접 엔드포인트 또는 비공개 엔드포인트를 사용하는 경우 이 필드를 사용하십시오. 사용 가능한 엔드포인트 목록은 IBM Cloud Object Storage endpoints를 참조하십시오.
    locationConstraint
    선택사항입니다. 위치 제약 조건 문자열을 일반 텍스트로 입력하십시오(예: us-standard 또는 us-geo-smart). 이 값이 지정되면, 스토리지 클래스에서 설정된 locationConstraint 값보다 이 값이 우선 적용됩니다. 위치 제약 조건에 따라 버킷 클래스와 버킷이 저장될 리전이 결정됩니다.
    objectPath
    선택사항입니다. 마운트할 버킷 내 하위 디렉터리의 경로를 일반 텍스트로 입력하십시오(예: data). 이 옵션을 사용하면 앱이 공유 버킷의 전체 루트 디렉터리가 아닌, 특정 폴더에만 접근할 수 있도록 할 수 있습니다.
    resourceConfigApiKey
    quotaLimit 가 ‘ "true" ’로 설정된 경우 필수입니다. 위의 ‘ apiKey ’ 필드에 사용했던 IBM Cloud Object Storage 서비스 자격 증명에서 ‘ base64-encoded ’과 ‘ apikey ’ 값을 동일하게 입력하십시오.
    bucketName
    선택사항입니다. 사용할 기존 버킷의 이름을 입력하거나, 새로 만들 버킷의 이름을 입력하세요. 지정한 버킷 이름이 존재하지 않으면 드라이버가 해당 버킷을 생성합니다. 이 필드를 비워두면, 마운터 유형에 따라 s3fs-<timestamp>-xxx 또는 rclone-<timestamp>-xxx 형식의 버킷이 자동으로 생성됩니다. 버킷 이름은 IBM Cloud Object Storage 내에서 전역적으로 고유해야 합니다.
    bucketVersioning
    선택사항입니다. 버킷 버전 관리를 제어합니다. 버전 관리를 활성화하려면 "true" 로 설정하고, 이미 버전 관리가 활성화된 버킷에서 버전 관리를 비활성화하려면 "false" 로 설정하세요. 반드시 문자열 값이어야 합니다. 버전 관리 기능이 활성화되면, IBM Cloud Object Storage 는 버킷 내 모든 객체의 여러 버전을 보관하여 실수로 인한 삭제나 덮어쓰기를 방지합니다. 버킷 버전 관리를 활성화하거나 비활성화하려면 서비스 자격 증명에 ‘관리자(Manager )’ 또는 ‘작성자(Writer) ’ 권한이 있어야 합니다. 자세한 내용은 ‘버전 관리 시작하기’를 참조하십시오.
    quotaLimit
    선택사항입니다. 버킷에 엄격한 저장 용량 할당량을 적용하려면 "true" 로 설정하십시오. 이 기능이 활성화되면 버킷 할당량은 PVC에서 요청된 ‘ storage ’ 크기와 동일하게 설정됩니다. 할당량이 초과되면, 데이터가 삭제될 때까지 버킷에 대한 쓰기 작업이 실패합니다. resourceConfigApiKey 가 설정되어 있어야 합니다. 기본값은 "false" 입니다. 반드시 문자열 값이어야 합니다.
    mountOptions
    비밀 번호에서 mountOptions 을 편집하여 s3fs 또는 rclone 에 대한 마운트 옵션을 사용자 지정할 수 있습니다. 루트 사용자가 아닌 계정으로 실행하려면, 주석 처리를 해제하고 uid= 을 포드 사양(pod spec)의 securityContext 필드에 있는 runAsUser 값과 일치하도록 설정하십시오. 지정하는 옵션을 PVC에서 사용하는 스토리지 클래스에 맞게 조정합니다. 스토리지 클래스의 기본값을 확인하려면 oc describe storageclass <storageclass_name> 또는 oc describe storageclass <storageclass_name>``을 실행하십시오. 자세한 내용은 [s3fs 마운트 옵션과](https://github.com/IBM/ibm-object-csi-driver/blob/main/cos-csi-mounter/server/s3fs.go){: external} [rclone 마운트 옵션을](https://github.com/IBM/ibm-object-csi-driver/blob/main/cos-csi-mounter/server/rclone.go){: external} 참조하십시오.

    현재 이 애드온은 각 마운트 옵션에 대한 적절한 유효성 검사를 통해 고정된 마운트 옵션 집합을 지원하도록 설정되어 있습니다. 유효성 검사 목록에 없는 다른 마운트 옵션을 사용하려면 지원팀에 문의하여 해당 옵션을 사용하도록 설정하세요.

  3. 모든 비밀 데이터 매개변수를 base64 으로 인코딩합니다.

    echo -n "<value>" | base64
    
  4. base64 인코딩된 값으로 secret.yaml 을 업데이트합니다.

  5. 시크릿을 작성하십시오.

    oc apply -f secret.yaml
    

PVC 만들기

여러 PVC에 걸쳐 하나의 비밀번호를 사용하거나 PVC당 하나의 비밀번호를 사용할 수 있습니다.

PVC yaml에서 다음 어노테이션을 사용하여 이 동작을 관리할 수 있습니다. 이러한 주석은 드라이버가 PVC를 올바른 비밀 번호에 매핑하는 데 도움이 됩니다.

cos.csi.driver/secret: "<custom-secret>"

secret, PVC 및 pod가 모두 동일한 네임스페이스에 있는지 확인하십시오.

예: 1-to-1 비밀을 PVC에 매핑하기 위해 앞서 만든 비밀과 같은 이름을 PVC에 지정하여 PVC를 비밀에 매핑합니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cos-secret-1 # Give your PVC the same name as the secret you created in the previous step.
  namespace: <namespace> # The namespace where you want to create the PVC.
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: <storage_class_name> # The storage class you want to use.

어노테이션을 사용하여 시크릿을 지정하여 많은 PVC에 하나의 시크릿을 사용하는 PVC 예시입니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cos-csi-pvc1
  namespace: <namespace> # The namespace where you want to create the PVC.
  annotations:
    cos.csi.driver/secret: "<custom-secret>"
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 256Mi
  storageClassName: <storage_class_name> # The storage class you want to use.
  1. 앞의 예시 중 하나를 선택하여 사용 사례에 맞게 사용자 지정하세요. 스토리지 클래스 목록은 스토리지 클래스 참조를 참조하세요.

  2. PVC를 작성하십시오.

    oc apply -f pvc.yaml
    

배치를 작성합니다.

  1. 다음 구성을 ‘ dep.yaml ’라는 파일로 저장하십시오.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <name>
      labels:
        app: <name>
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: <name>
      template:
        metadata:
          labels:
        app: <name>
        spec:
          containers:
          - name: app-frontend
            image: <image> # Enter your app image.
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - mountPath: <path_you_want_to_mount_the_volume_on> # For example `/dev`
              name: cos-csi-volume
          volumes:
          - name: cos-csi-volume
            persistentVolumeClaim:
              claimName: <pvc_name> # Enter the name of the PVC you created earlier.
    
  2. 배치를 작성하십시오.

    oc apply -f dep.yaml
    

IBM Cloud Object Storage 애드온 비활성화하기

기존 비밀, PVC 및 배포는 애드온을 비활성화하거나 패치를 업데이트해도 삭제되지 않습니다. 기존 고객 워크로드에는 중단이 없습니다.

  1. 다음 명령을 실행하여 애드온을 비활성화하십시오.
     ibmcloud oc cluster addon disable ibm-object-csi-driver --cluster CLUSTER
    
    출력 예
    Data and resources that you created for the add-on might be deleted when the add-on is disabled. Continue? [y/N]> y
    Disabling add-on ibm-object-csi-driver for cluster XXX...
    OK
    
  2. 애드온이 제거되었는지 확인하십시오.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    

Helm 플러그인에서 클러스터 애드온으로 마이그레이션하기

  1. Red Hat OpenShift 클러스터에 액세스하십시오.

  2. PVC의 세부 정보를 확인하고 마이그레이션할 PVC를 선택합니다.

    oc get pvc --all-namespaces -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name' | tail -n +2 | while read namespace pvc; do kubectl describe pvc "$pvc" -n "$namespace" | grep 'volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs' > /dev/null ; if [ $? -eq 0 ]; then echo "PVC: $pvc in Namespace: $namespace uses ibm.io/ibmc-s3fs storage provisioner"; fi; done
    

    출력 예

    PVC: pvc-test in Namespace: default uses ibm.io/ibmc-s3fs storage provisioner
    
  3. PVC를 설명하고 버킷 이름을 가져옵니다.

    oc describe pvc <pvc_name> | grep ibm.io/bucket:
    

    출력 예

    ibm.io/bucket: test-s3
    
  4. 버킷 이름을 포함하여 비밀을 다시 생성하세요.

    apiVersion: v1
    kind: Secret
    type: cos-s3-csi-driver
    metadata:
        name: cos-secret-1 # Name your secret.
        namespace: <namespace> # Specify the namespace where you want to create the secret.
    data:
        accessKey: <base64-encoded-HMAC-access-key>
        secretKey: <base64-encoded-HMAC-secret-key>
    stringData:
        bucketName: <bucket-name>
        mountOptions: |
            # uid=3000  # Optional: Run as non-root user. Must match runAsUser in SecurityContext of pod spec.
            key1=value1
            key2=value2
    
  5. PVC에 사용된 스토리지 클래스를 찾습니다.

    oc describe pvc <pvc_name> | grep StorageClass:
    

    test-s3 PVC에 대한 명령 예제입니다.

    oc describe pvc test-s3 | grep StorageClass:
    

    출력 예

    StorageClass:  ibmc-s3fs-smart-perf-regional
    
  6. 추가 기능에서 사용할 수 있는 새로운 스토리지 클래스를 검토하고 대체 클래스를 선택합니다.

    • flex 클래스를 사용했다면 새로운 smart 클래스 중 하나를 선택하세요.
    • standard 클래스를 사용했다면 새로운 standard 클래스 중 하나를 선택하세요.
    • 추가 기능에서는 coldvault 클래스를 더 이상 사용할 수 없으므로 대신 smart 또는 standard 클래스를 선택하세요.
  7. PVC의 세부 정보를 검토합니다.

    oc describe pvc test-s3
    

    출력 예

    Name:          pvc-test
    Namespace:     default
    StorageClass:  ibmc-s3fs-smart-perf-regional
    Status:        Bound
    Volume:        pvc-c625474d-31f0-4929-bc3e-feace1fb42fb
    Labels:        <none>
    Annotations:   ibm.io/auto-create-bucket: true
                ibm.io/auto-delete-bucket: true
                ibm.io/bucket: bha-test-s23
                ibm.io/secret-name: satstoragesecret
                pv.kubernetes.io/bind-completed: yes
                pv.kubernetes.io/bound-by-controller: yes
                volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      3Gi
    Access Modes:  RWO
    VolumeMode:    Filesystem
    Used By:       test-pod
    Events:        <none>
    
  8. 새 스토리지 클래스를 사용하고 이전에 만든 비밀을 참조하는 대체 PVC를 만듭니다.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: cos-csi-pvc1
    namespace: <namespace> # The namespace where you want to create the PVC.
    annotations:
        cos.csi.driver/secret: "cos-secret-1"  # Secret created in step 4
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
        requests:
        storage: 256Mi
    storageClassName: <storage_class_name> # The storage class you picked based on old storage class mapping.
    
  9. PVC가 Bound 확인합니다.

    oc get pvc
    
  10. 앱에 대한 자세한 정보를 확인하세요.

    oc get pods
    
  11. 앱 규모를 0으로 축소합니다.

    kubectl scale deployment --replicas=0 my-app
    
  12. 이전 단계에서 만든 PVC를 참조하는 대체 배포를 만듭니다.

  13. 새 배포가 실행되고 나면 이전 배포를 삭제할 수 있습니다.

  14. 마이그레이션하려는 각 PVC에 대해 이 단계를 반복하십시오.

IBM Cloud Object Storage 클러스터 애드온 스토리지 클래스

IBM Cloud Object Storage 클러스터 애드온은 s3fsrclone 마운터를 위한 스토리지 클래스를 제공합니다. 데이터 액세스 요구사항에 맞는 스토리지 클래스를 선택하십시오. 스토리지 클래스는 워크로드에 대해 생성된 버킷의 버킷 클래스, 회수 정책 및 기본 마운트 동작을 결정합니다.

Standard
자주 액세스되는 핫 데이터에 사용하십시오. 공통 유스 케이스는 웹 또는 모바일 앱입니다.
Vault
한 달에 한 번 이하로 접근하는 등, 사용 빈도가 낮은 워크로드나 중요도가 낮은 데이터에 사용하십시오. 공통 유스 케이스는 아카이브, 단기 데이터 보관, 디지털 자산 보존, 테이프 교체 및 재해 복구입니다.
Cold
접근 빈도가 매우 낮은(90일에 한 번 이하) 콜드 데이터나 비활성 데이터에 사용하십시오. 공통 유스 케이스는 아카이브, 장기 백업, 준수용으로 보관되는 히스토리 데이터 또는 거의 액세스되지 않는 워크로드와 앱입니다.
스마트
특정 사용 패턴을 따르지 않거나 사용 패턴을 예측하기 어려운 워크로드 및 데이터에 사용합니다.

버킷에 저장된 데이터의 복원성 레벨을 결정하십시오. 자세한 정보는 지역 및 엔드포인트를 참조하십시오.

교차 지역
최고의 가용성을 보장하기 위해 귀하의 데이터는 특정 지리적 위치 내 세 개의 리전에 걸쳐 저장됩니다. 지역 간에 분산된 워크로드가 있으면 최인접 지역 엔드포인트로 요청이 라우트됩니다. 지리적 위치에 대한 IBM Cloud Object Storage 엔드포인트는 클러스터가 위치한 곳을 기준으로 자동으로 설정됩니다. 예를 들어, 클러스터가 US South 에 있는 경우, 스토리지 클래스는 버킷에 대해 US GEO 엔드포인트를 사용하도록 구성됩니다. 이름에 ‘ cross-region ’가 포함된 스토리지 클래스를 선택하십시오.
지역
귀하의 데이터는 하나의 리전 내 여러 존에 걸쳐 복제됩니다. 동일한 지역에 있는 워크로드가 있는 경우에는 교차 지역 설정보다 낮은 대기 시간과 더 높은 성능이 나타납니다. 지역별 종단점은 클러스터가 위치한 위치를 기준으로 자동으로 설정됩니다. 예를 들어, 클러스터가 US South 에 있는 경우, 스토리지 클래스는 버킷의 지역 엔드포인트로 US South 을 사용하도록 구성됩니다. 이름에 ‘ cross-region ’가 포함되지 않은 스토리지 클래스를 선택하십시오.
COS 클러스터 애드온 스토리지 클래스
이름 버킷 클래스 복원성 마운트 재확보 정책 바인딩 모드
ibm-객체-스토리지-스마트-크로스-리전-rclone 스마트 지역 간 rclone 삭제 즉시
ibm-객체-스토리지-스마트-크로스-리전-rclone-리테인 스마트 지역 간 rclone 유지 즉시
ibm-object-storage-smart-cross-region-s3fs 스마트 지역 간 s3fs 삭제 즉시
ibm-object-storage-smart-cross-region-s3fs-retain 스마트 지역 간 s3fs 유지 즉시
iBM-객체-스토리지-스마트-r클론 스마트 지역 rclone 삭제 즉시
iBM-객체-스토리지-스마트-r클론-유지 스마트 지역 rclone 유지 즉시
ibm-object-storage-smart-s3fs 스마트 지역 s3fs 삭제 즉시
ibm-object-storage-smart-s3fs-retain 스마트 지역 s3fs 유지 즉시
ibm-객체-스토리지-표준-크로스-리전-rclone Standard 지역 간 rclone 삭제 즉시
ibm-객체-스토리지-표준-크로스-리전-rclone-retain Standard 지역 간 rclone 유지 즉시
ibm-object-storage-standard-cross-region-s3fs Standard 지역 간 s3fs 삭제 즉시
ibm-object-storage-standard-cross-region-s3fs-retain Standard 지역 간 s3fs 유지 즉시
iBM-객체-스토리지-표준-클론 Standard 지역 rclone 삭제 즉시
iBM-객체-스토리지-표준-클론-유지 Standard 지역 rclone 유지 즉시
ibm-object-storage-standard-s3fs Standard 지역 s3fs 삭제 즉시
ibm-object-storage-standard-s3fs-retain Standard 지역 s3fs 유지 즉시

스토리지 클래스에 대한 자세한 버킷 구성을 검토하려면 oc describe storageclass <storageclass_name> 또는 oc describe storageclass <storageclass_name> 을 실행하세요.

스토리지 클래스 매개변수

모든 클러스터 애드온 스토리지 클래스에는 다음과 같은 핵심 매개변수가 포함되어 있습니다.

COS 클러스터 애드온 스토리지 클래스의 핵심 매개변수
매개변수 설명
client 드라이버가 사용하는 클라이언트 유형을 식별합니다. 애드온 스토리지 클래스는 awss3 를 사용합니다.
cosEndpoint 버킷 영역에 대한 IBM Cloud Object Storage 엔드포인트를 정의합니다.
csi.storage.k8s.io/node-publish-secret-name IBM Cloud Object Storage 자격 증명이 포함된 비밀의 이름을 참조합니다.
csi.storage.k8s.io/node-publish-secret-namespace IBM Cloud Object Storage 자격 증명이 포함된 비밀의 네임스페이스를 참조합니다.
locationConstraint au-syd-smart 또는 au-syd-standard 과 같은 버킷 클래스 및 지역을 정의합니다.
mounter 스토리지 클래스가 s3fs 또는 rclone 마운터를 사용할지 여부를 지정합니다.

기본 s3fs 스토리지 클래스 마운트 옵션

s3fs 스토리지 클래스는 다음과 같은 기본 마운트 옵션을 사용합니다.

COS 애드온 ‘ s3fs ’ 스토리지 클래스의 기본 마운트 옵션
마운트 옵션 설명
multipart_size=52 각 멀티파트 요청에 대한 파트 크기를 MB 단위로 설정합니다.
multireq_max=20 리스팅 객체에 대한 최대 병렬 요청 수를 설정합니다.
max_dirty_data=5120 지정된 수의 MB가 쓰여진 후 더티 데이터를 S3 로 플러시합니다. 지원되는 최소 값은 50 입니다. -1 값은 이 동작을 비활성화합니다.
parallel_count=20 대용량 오브젝트를 업로드하기 위한 병렬 요청 수를 설정합니다. s3fs 멀티파트 요청을 사용하여 대용량 오브젝트를 업로드하고 요청을 병렬로 보냅니다.
max_stat_cache_size=100000 통계 캐시 및 심볼릭 링크 캐시의 최대 항목 수를 설정합니다.
retries=5 실패한 S3 트랜잭션을 다시 시도할 횟수를 설정합니다.
kernel_cache 볼륨 마운트 지점에 대해 커널 버퍼 캐시를 활성화합니다. IBM Cloud Object Storage 에서 읽은 데이터는 더 빠른 읽기 액세스를 제공하기 위해 커널 캐시에 저장됩니다. 커널 캐시는 표준 및 스마트 s3fs 스토리지 클래스에 대해 활성화됩니다.
max_background=1000 커널이 새로운 요청을 차단하기 전에 대기열에 넣을 수 있는 백그라운드 FUSE 요청의 최대 개수를 설정합니다. 이 값을 늘리면 동시 실행 빈도가 높은 워크로드의 처리량이 향상됩니다.

기본 rclone 스토리지 클래스 마운트 옵션

rclone 스토리지 클래스는 다음과 같은 기본 마운트 옵션을 사용합니다.

COS 애드온 rclone 스토리지 클래스의 기본 마운트 옵션
마운트 옵션 설명
acl=private 업로드된 개체가 공개적으로 액세스되지 않도록 합니다.
bucket_acl=private rclone 이 만드는 버킷의 기본 ACL을 private 으로 설정합니다.
upload_cutoff=100Mi 멀티파트 업로드를 사용하여 100 MiB 보다 큰 파일을 업로드합니다. 작은 파일은 한 번의 요청으로 업로드됩니다.
chunk_size=16Mi 멀티파트 업로드에서 각 파트의 크기를 설정합니다.
max_upload_parts=1000 멀티파트 업로드당 최대 파트 수를 설정하고 구성된 chunk_size 으로 지원되는 최대 파일 크기를 간접적으로 제한합니다. chunk_size=16Mi 의 경우 최대 파일 크기는 16 GiB 입니다.
upload_concurrency=8 멀티파트 업로드 중에 병렬로 업로드되는 파트의 수를 설정합니다.
multi_thread_streams=8 멀티 스레드 다운로드 방식을 사용할 때, 단일 객체를 다운로드하는 데 사용되는 스레드 수를 설정합니다.
disable_checksum=true 업로드 시 ‘ MD5 ’ 체크섬 계산을 비활성화합니다. 체크섬 계산으로 인해 상당한 오버헤드가 발생하는 대용량 파일의 성능을 향상시킵니다.