安装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 实例
  • 可选如果您计划使用存储桶版本控制,则您的服务凭证必须具有管理员写入者权限才能在存储桶上启用或禁用存储桶版本控制。 如需了解更多信息,请参阅“版本控制入门”。

了解水桶的创建和移除

  • 您可以通过在 PVC 中指定水桶名称来使用现有的水桶。
  • 如果您提供了一个水桶名称,而该水桶并不存在,那么就会创建一个具有该名称的水桶。
  • 如果您未提供存储桶名称,系统将根据挂载器类型,创建一个遵循命名规范 s3fs-<timestamp>-xxxrclone-<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. 列出可用的存储类。 该驱动程序同时支持 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
    

限制节点服务器 Pod 的调度

默认情况下,COS CSI 驱动程序的 nodeserver 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. 请确认节点服务器 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 Pod 会被调度到所有节点上。
restrictNodeServerScheduling: "true" Nodeserver Pod 仅调度到标记为 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 密钥。 您可以在 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,对经典集群使用 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-standardus-geo-smart。 如果提供了该值,则它将覆盖存储类中设置的 locationConstraint。 位置限制决定了存储桶的类别以及存储桶所在的区域。
    objectPath
    可选。 请输入要作为纯文本挂载的存储桶内子目录的路径,例如 data。 使用此选项可让应用仅访问共享存储桶中的特定文件夹,而不是整个存储桶根目录。
    resourceConfigApiKey
    quotaLimit 设置为 "true" 时,此参数是必需的。 请输入与您在 IBM Cloud Object Storage 服务凭据中用于上述 apiKey 字段相同的 base64-encoded apikey 值。
    bucketName
    可选。 输入要使用的现有存储桶的名称,或要创建的新存储桶的名称。 如果您提供的存储桶名称不存在,驱动程序会创建该存储桶。 如果此字段留空,系统将根据挂载器类型,自动创建一个遵循命名规则 s3fs-<timestamp>-xxxrclone-<timestamp>-xxx 的存储桶。 该存储桶名称在 IBM Cloud Object Storage 中必须是全局唯一的。
    bucketVersioning
    可选。 控制铲斗的版本管理。 将该参数设置为 "true" 以启用版本控制,或设置为 "false" 以禁用已启用版本控制的存储桶上的版本控制。 必须是字符串值。 启用版本控制后,IBM Cloud Object Storage 会保留存储桶中每个对象的多个版本,以防止意外删除和覆盖。 请注意,服务凭据必须具备 “管理员”或 “写入者” 权限,才能启用或禁用存储桶版本控制功能。 如需了解更多信息,请参阅《 版本控制入门 》。
    quotaLimit
    可选。 将其设置为“"true"”,以对该存储桶强制实施硬配额。 启用后,存储桶配额将设置为与 PVC 中请求的 storage 大小相等。 如果配额已满,则对该存储桶的写入操作将失败,直到删除部分数据为止。 需要设置 resourceConfigApiKey。 默认值为 "false"。 必须是字符串值。
    mountOptions
    您可以通过编辑密文中的 mountOptions 来自定义 s3fsrclone 的挂载选项。 若要以非root用户身份运行,请取消注释并将 uid=<value> 设置为与您的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>"

请确保您的密钥、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.

通过使用注释指定密文,将 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. 查看新的存储类别 that are available with the add-on and select a replacement class.

    • 如果您使用的是 flex 类,请选择一个新的 smart 类。
    • 如果您使用的是 standard 类,请选择一个新的 standard 类。
    • 附加组件不再提供 coldvault 类,请选择 smartstandard 类。
  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 群集附加组件为 s3fsrclone 安装程序提供存储类。 选择符合您的数据访问需求的存储类。 存储类别决定了为工作负载创建的存储桶类别、回收策略和默认挂载行为。

标准
适用于频繁访问的“热数据”。 常见用例是 Web 或移动应用程序。
保险库
适用于访问频率较低的工作负载或冷数据,例如每月访问一次或更少。 常见用例是归档、短期数据保留、数字资产保留、磁带更换和灾难恢复。
Cold
适用于很少被访问(每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 删除(T) 立即
ibm-对象存储-智能跨区域-rclone-保留 智能 跨区域 rclone Retain 立即
ibm-object-storage-smart-cross-region-s3fs 智能 跨区域 s3fs 删除(T) 立即
ibm-object-storage-smart-cross-region-s3fs-retain 智能 跨区域 s3fs Retain 立即
ibm-object-storage-smart-rclone 智能 区域 rclone 删除(T) 立即
ibm-object-storage-smart-rclone-retain 智能 区域 rclone Retain 立即
ibm-object-storage-smart-s3fs 智能 区域 s3fs 删除(T) 立即
ibm-object-storage-smart-s3fs-retain 智能 区域 s3fs Retain 立即
ibm-object-storage-standard-跨区域-rclone 标准 跨区域 rclone 删除(T) 立即
ibm-object-storage-standard-跨区域-rclone-保留 标准 跨区域 rclone Retain 立即
ibm-object-storage-standard-cross-region-s3fs 标准 跨区域 s3fs 删除(T) 立即
ibm-object-storage-standard-cross-region-s3fs-retain 标准 跨区域 s3fs Retain 立即
ibm-object-storage-standard-rclone 标准 区域 rclone 删除(T) 立即
ibm-object-storage-standard-rclone-retain 标准 区域 rclone Retain 立即
ibm-object-storage-standard-s3fs 标准 区域 s3fs 删除(T) 立即
ibm-object-storage-standard-s3fs-retain 标准 区域 s3fs Retain 立即

要查看存储类的详细存储桶配置,请运行 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 的文件。 较小的文件只需一次请求即可上传。
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 校验和计算。 在处理大型文件时,当校验和计算会带来显著开销的情况下,可提升性能。