安裝IBM Cloud Object Storage叢集插件

您可以透過 IBM Cloud 控制台或命令列介面 (CLI) 啟用「IBM Cloud Object Storage」附加元件。

必要條件:

  • IBM Cloud Object Storage 附加元件至少需要 0.3 vCPU 和 360 MB 記憶體。
  • 該附加元件適用於 Red Hat CoreOS (RHCOS) 和 Ubuntu 工作者節點。 如果您的群集同時有 RHEL 和 RHCOS 節點,則只會在 RHCOS 節點上部署附加元件。
  • 建立 IBM Cloud Object Storage 實例。
  • 可選如果您打算使用儲存桶版本控制,您的服務憑證必須具有 Manager 或 Writer 權限,才能在儲存桶上啟用或停用儲存桶版本控制。 如需更多資訊,請參閱《 版本控制入門 》。

了解儲存桶的建立和刪除

  • 您可以透過在 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 ,以限制 nodeserver Pod 僅能在標記為 cos.csi.ibm.io/csi-node=true`` 的節點上執行。 預設值為 false,這表示 nodeserver Pod 會被排程至所有節點上。
  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. 請列出可用的儲存類別。 此驅動程式同時支援「s3fs」與「rclone」掛載器的區域性及跨區域儲存類別。
    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
    

限制節點伺服器 Pod 的調度

預設情況下,COS CSI 驅動程式節點伺服器 Pod 會被排程至叢集中的所有節點上。 您可以使用 restrictNodeServerScheduling 參數,將 nodeserver 的 Pod 調度限制在僅標有 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 驅動程式 Pod 在何處執行。
    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. 請確認所有節點上目前都有節點伺服器 Pod 正在執行。
    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. 請為您希望將 nodeserver Pod 排程至其中的節點加上標籤。
    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. 請確認 nodeserver Pod 僅會排程至帶有標籤的節點上。
    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 服務實例中的 apiKey 和 serviceId。
    • 對於 HMAC 憑證,請使用您 IBM Cloud Object Storage 服務實例中的 accessKey 和 secretKey。
    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 金鑰。 您可以在 apikey 下的「服務憑證」中找到 API 金鑰。 請提供「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 執行個體,開啟「金鑰」,點選根金鑰,並從金鑰詳細資訊中複製 CRN。 僅適用於新儲存桶;您無法對現有儲存桶啟用加密功能。
    iamEndpoint
    選用。 請以純文字形式輸入 IBM Cloud 的 IAM 憑證端點 URL。 預設情況下,此驅動程式會針對 VPC 叢集使用 https://private.iam.cloud.ibm.com,針對 Classic 叢集則使用 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 會保留儲存桶中每個物件的多個版本,以防止意外刪除或覆寫。 請注意,服務憑證必須具備「管理員」或「寫入者」權限,才能啟用或停用儲存桶版本控制功能。 如需更多資訊,請參閱《 版本控制入門 》。
    quotaLimit
    選用。 將設定值設為 "true" ,以對該儲存桶強制實施硬性儲存配額。 啟用此功能後,儲存桶配額將設定為與 PVC 中請求的 storage 大小相同。 若已達到配額上限,則對該儲存桶的寫入操作將失敗,直到刪除部分資料為止。 必須設定 resourceConfigApiKey 。 預設值為 "false"。 必須為字串值。
    mountOptions
    您可以在秘密中編輯 mountOptions,自訂 s3fs 或 rclone 的掛載選項。 若要以非 root 使用者身分執行,請取消註解並將 uid= 設定為與您的 pod 規格中 securityContext 欄位的 runAsUser 相符的值。 使您指定的選項與 PVC 使用的儲存類別一致。 若要檢視儲存類別的預設值,請執行 oc describe storageclass <storageclass_name> 或 oc describe storageclass <storageclass_name>。 如需更多資訊,請參閱 s3fs 中的掛載選項,以及 rclone 中的掛載選項。

    目前,附加元件已啟用,以支援固定的掛載選項集,並針對每個掛載選項進行適當的驗證。 如果您要使用驗證清單中沒有的其他掛載選項,請聯絡支援人員啟用這些選項。

  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 和 pods 均位於同一個命名空間中

將您的 PVC 賦予與您先前建立的秘密相同的名稱,以建立 1-to-1 秘密與 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.

使用註解指定秘密,將 1 個秘密用於多個 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 的詳細資訊並選擇一個進行遷移。

    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 類之一。
    • 此附加元件不再提供 cold 和 vault 類別;選擇 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. 將您的應用程式縮小到零。

    kubectl scale deployment --replicas=0 my-app
    
  12. 建立引用您在上一步中建立的 PVC 的替換部署。

  13. 新部署運行後,您可以刪除舊部署。

  14. 請針對您要遷移的每個 PVC 重複執行這些步驟。

IBM Cloud Object Storage叢集附加儲存類

IBM Cloud Object Storage 群集附加元件為 s3fs 和 rclone 存取器提供儲存類別。 選擇符合資料存取需求的儲存空間類別。 儲存類別決定為工作負載建立的儲存桶類別、回收政策和預設掛載行為。

標準
適用於頻繁存取的熱數據。 常見使用案例是 Web 或行動應用程式。
儲存庫
適用於存取頻率較低的工作負載或冷數據,例如每月一次或更少。 常見使用案例是保存檔、短期資料保留、數位資產保留、磁帶更換及災難回復。
冷
適用於極少被存取(每 90 天或更少)的冷數據,或閒置數據。 常見使用案例是保存檔、長期備份、您針對法規遵循所保留的歷程資料,或很少存取的工作負載及應用程式。
智慧型
用於不遵循特定使用模式的工作負載和資料,或使用模式難以預測時。

決定儲存區中所儲存資料的備援層次。 如需相關資訊,請參閱地區及端點。

跨區域
您的資料會儲存於同一地理位置內的三個區域中,以確保最高可用性。 如果您的工作負載分散在多個地區,則會將要求遞送至最近的地區端點。 地理位置的 IBM Cloud Object Storage 端點會根據您的叢集所在位置自動設定。 舉例來說,如果您的叢集位於 US South,那麼您的儲存類別便會設定為使用 US GEO 作為您的儲存桶的端點。 請選擇名稱中包含「cross-region」的儲存類別。
地區
您的資料會複製到同一區域內的多個區域中。 如果您的工作負載位在相同的地區,則您會看到比跨地區設定還要低的延遲及更佳的效能。 區域終點會根據您的叢集所在位置自動設定。 舉例來說,如果您的叢集位於 US South,那麼您的儲存類別便會設定為使用 US South 作為儲存桶的區域端點。 請選擇名稱中不含「cross-region」的儲存類別。
COS 集群附加儲存類別
名稱 水桶等級 備援 裝載機 收回原則 連結模式
ibm-object-storage-smart-cross-region-rclone 智慧型 跨區域 rclone 刪除 立即
ibm-object-storage-smart-cross-region-rclone-retain 智慧型 跨區域 rclone 保留 立即
ibm-object-storage-smart-cross-region-s3fs 智慧型 跨區域 s3fs 刪除 立即
ibm-object-storage-smart-cross-region-s3fs-retain 智慧型 跨區域 s3fs 保留 立即
ibm 物件儲存智慧 rclone 智慧型 地區 rclone 刪除 立即
ibm-物件儲存-智慧型-rclone-保留 智慧型 地區 rclone 保留 立即
ibm-object-storage-smart-s3fs 智慧型 地區 s3fs 刪除 立即
ibm-object-storage-smart-s3fs-retain 智慧型 地區 s3fs 保留 立即
ibm-object-storage-standard-跨區域-rclone 標準 跨區域 rclone 刪除 立即
ibm-object-storage-standard-跨區域-rclone-保留 標準 跨區域 rclone 保留 立即
ibm-object-storage-standard-cross-region-s3fs 標準 跨區域 s3fs 刪除 立即
ibm-object-storage-standard-cross-region-s3fs-retain 標準 跨區域 s3fs 保留 立即
ibm 物件儲存標準 rclone 標準 地區 rclone 刪除 立即
ibm 物件儲存-標準-rclone-保留 標準 地區 rclone 保留 立即
ibm-object-storage-standard-s3fs 標準 地區 s3fs 刪除 立即
ibm-object-storage-standard-s3fs-retain 標準 地區 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 的校驗和計算。 可提升處理大型檔案時的效能,尤其當校驗和計算會造成顯著開銷時。