クラスタアドオンIBM Cloud Object Storageのインストール

「 IBM Cloud Object Storage 」アドオンは、 IBM Cloud コンソールまたはCLIから有効にできます。

前提条件:

  • 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
1つのノードにマウントできる 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. 利用可能なストレージクラスを列挙してください。 このドライバは、 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
    

ノードサーバーのポッドスケジューリングの制限

デフォルトでは、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. すべてのノードで、nodeserver ポッドが現在実行中であることを確認してください。
    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" 1つのノードにマウントできるボリュームの数を、指定された値に制限します。

以下を使用するアプリのデプロイ 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キーを入力してください。 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インスタンスに移動し、「 キー 」を開き、ルートキーをクリックして、キーの詳細から 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 」のエンドポイント をご覧ください。
    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 のマウントオプションをカスタマイズすることができます。 非rootユーザーとして実行するには、 uid=<value> のコメントを外し、pod specの 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ごとに1つのシークレットを使用することもできます。

この動作は、PVC yamlで以下のアノテーションを使用することで管理できる。 これらの注釈は、ドライバーがPVCを正しいシークレットにマッピングするのに役立つ。

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

secret、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. これまでの例から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. アプリをゼロまで縮小する。

    kubectl scale deployment --replicas=0 my-app
    
  12. 前の手順で作成した PVC を参照する置換配置を作成します。

  13. 新しい配置が実行されたら、古い配置を削除できます。

  14. 移行したい各PVCについて、これらの手順を繰り返してください。

IBM Cloud Object Storageクラスタ・アドオン・ストレージクラス

IBM Cloud Object Storage クラスタ・アドオンは、 s3fs および rclone マウンタ用のストレージ・クラスを提供します。 データ・アクセス要件に合ったストレージ・クラスを選択します。 ストレージクラスは、ワークロード用に作成されたバケットのバケットクラス、リクレイムポリシー、デフォルトのマウント動作を決定します。

Standard
頻繁にアクセスされる「ホットデータ」に使用します。 Web アプリやモバイル・アプリが一般的なユース・ケースです。
ボールト
月に1回以下など、アクセス頻度の低いワークロードや「クールデータ」に利用してください。 アーカイブ、短期データ保存、デジタル資産の保持、テープの交換、および災害復旧が一般的なユース・ケースです。
Cold
アクセス頻度が低い(90日に1回以下)データや、非アクティブなデータに使用します。 アーカイブ、長期バックアップ、コンプライアンスのために保持する履歴データ、またはめったにアクセスされないワークロードとアプリが一般的なユース・ケースです。
スマート
特定の使用パターンに従わないワークロードやデータ、あるいは使用パターンの予測が困難な場合に使用する。

バケットに格納されるデータの回復力のレベルを決定します。 詳細については、リージョンおよびエンドポイントを参照してください。

クロスリージョン
お客様のデータは、最高の可用性を確保するため、1つの地理的エリア内の3つのリージョンに分散して保存されます。 複数のリージョンに分散されたワークロードがある場合、要求は最も近いリージョンのエンドポイントにルーティングされます。 位置情報取得用の IBM Cloud Object Storage エンドポイントは、クラスターが置かれている場所に基づいて自動的に設定されます。 たとえば、クラスターが「 US South 」にある場合、ストレージクラスは、バケットに対して US GEO エンドポイントを使用するように設定されます。 名前に「 cross-region 」が含まれるストレージクラスを選択してください。
リージョン
お客様のデータは、1つのリージョン内の複数のゾーンに複製されます。 同じリージョンに複数のワークロードがある場合は、Cross-region のセットアップよりも待ち時間が低くなり、パフォーマンスが向上します。 リージョンのエンドポイントは、クラスターが配置されている場所に基づいて自動的に設定されます。 たとえば、クラスタが US South にある場合、ストレージクラスは、バケットのリージョンエンドポイントとして US South を使用するように設定されます。 名前に「 cross-region 」が含まれていないストレージクラスを選択してください。
COSクラスタ・アドオン・ストレージ・クラス
名前 バケット・クラス 回復力 マウンター 再利用ポリシー バインディング・モード
ibm-object-storage-smart-cross-region-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-object-storage-standard-cross-region-rclone Standard 地域横断的 rclone の削除 即時
ibm-オブジェクト・ストレージ・スタンダード・クロスリージョン・rclone・リテイン Standard 地域横断的 rclone 保持 即時
ibm-object-storage-standard-cross-region-s3fs Standard 地域横断的 s3fs の削除 即時
ibm-object-storage-standard-cross-region-s3fs-retain Standard 地域横断的 s3fs 保持 即時
IBM-オブジェクト-ストレージ-スタンダード-Rクローン Standard リージョン rclone の削除 即時
IBM-オブジェクト-ストレージ-スタンダード-Rclone-retain 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-smartau-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 より大きなファイルをアップロードします。 小さなファイルは1回のリクエストでアップロードされます。
chunk_size=16Mi マルチパートアップロードの各パートのサイズを設定します。
max_upload_parts=1000 マルチパートアップロードあたりの最大パート数を設定し、設定された chunk_size で間接的にサポートされる最大ファイルサイズの上限を設定します。 chunk_size=16Mi の場合、最大ファイルサイズは 16 GiB
upload_concurrency=8 マルチパートアップロード中に並行してアップロードされるパートの数を設定します。
multi_thread_streams=8 マルチスレッドダウンロードを使用する場合、1つのオブジェクトのダウンロードに使用するスレッド数を設定します。
disable_checksum=true アップロード時の MD5 チェックサムの計算を無効にします。 チェックサムの計算によって大きなオーバーヘッドが生じる大容量ファイルの処理性能が向上します。