安装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>-xxx或rclone-<timestamp>-xxx的存储桶。 - 根据存储类中定义的回收策略删除存储桶。
- 如果设置了
reclaimPolicy: Delete,则在删除 PVC 时删除水桶。 - 如果设置了
reclaimPolicy: Retain,则即使删除了 PVC,也会保留水桶。
- 如果设置了
在控制台中启用“IBM Cloud Object Storage”插件
- 在 Red Hat OpenShift on IBM Cloud 集群仪表盘中,选择您要为其启用该附加组件的集群。
- 在 “附加组件”部分,找到 Cloud Object Storage 该扩展程序,然后点击 “安装”。
- 在“安装附加组件:Cloud Object Storage”面板中,从“版本”下拉菜单中选择一个版本。
- 可选:配置以下参数。
maxVolumesPerNode- 设置单个节点上可挂载的 IBM Cloud Object Storage 卷的最大数量。 默认值为
0,这意味着不设置任何限制。 restrictNodeServerScheduling- 将其设置为
true,以限制nodeserver Pod仅在标记为cos.csi.ibm.io/csi-node=true的节点上运行。 默认值为false,这意味着 nodeserver Pod 将被调度到所有节点上。
- 单击安装。 附加组件可能需要几分钟时间进行部署和准备以供使用。
- 验证安装。 在 “附加组件”部分,请确认该 Cloud Object Storage 该扩展程序显示为 “正常” 状态。
通过 CLI 启用 IBM Cloud Object Storage 附加组件
开始之前 访问你的Red Hat OpenShift集群。
- 将
container-service插件更新至最新版本。ibmcloud update && ibmcloud plugin update container-service - 列出附加组件并找到要安装的版本。
ibmcloud oc cluster addon versions - 查看附加选项。
ibmcloud oc cluster addon options --addon ibm-object-csi-driver [--version VERSION] - 安装插件。
ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION] - 验证安装。
ibmcloud oc cluster addon ls --cluster CLUSTEROK Name Version Health State Health Status ibm-object-csi-driver 1.0 normal Addon Ready. For more info: http://ibm.biz/addon-state (H1500) - 列出可用的存储类。 该驱动程序同时支持
s3fs和rclone挂载器的区域内和跨区域存储类。oc get sc | grep objectibm-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”,请按照以下步骤操作。
- 列出集群中的节点,并确定希望在哪些节点上运行 COS 驱动程序 Pod。
示例输出oc get nodesNAME 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 - 请检查所有节点上是否都有节点服务器 Pod 正在运行。
示例输出oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wideNAME 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> - 为希望调度 nodeserver Pod 的节点添加标签。
示例输出oc label nodes NODE-NAME-1 NODE-NAME-2 cos.csi.ibm.io/csi-node=truenode/10.241.0.11 labeled node/10.241.0.12 labeled - 通过更新 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 - 请确认节点服务器 Pod 仅被调度到带有标签的节点上。
示例输出oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wideNAME 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: "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: "0" (缺省值) |
每个节点可挂载的卷数量没有限制。 |
maxVolumesPerNode: "VALUE" |
将单个节点上可挂载的卷数量限制为指定值。 |
部署使用IBM Cloud Object Storage的应用程序
创建一个包含 COS 凭据的Kubernetes秘密。
-
将以下配置保存为名为
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=trueapiKey- 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-standard或us-geo-smart。 如果提供了该值,则它将覆盖存储类中设置的locationConstraint。 位置限制决定了存储桶的类别以及存储桶所在的区域。 objectPath- 可选。 请输入要作为纯文本挂载的存储桶内子目录的路径,例如
data。 使用此选项可让应用仅访问共享存储桶中的特定文件夹,而不是整个存储桶根目录。 resourceConfigApiKey- 当
quotaLimit设置为"true"时,此参数是必需的。 请输入与您在 IBM Cloud Object Storage 服务凭据中用于上述apiKey字段相同的 base64-encodedapikey值。 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=<value>设置为与您的Pod规范中securityContext字段中的runAsUser字段相匹配。 根据 PVC 使用的存储类别调整指定的选项。 要查看存储类的默认值,请运行oc describe storageclass <storageclass_name>或oc describe storageclass <storageclass_name>。 有关详细信息,请参阅 s3fs 中的挂载选项以及rclone中的挂载选项。
目前,该附加组件已启用,以支持固定的挂载选项集,并对每个挂载选项进行适当的验证。 如果要使用验证列表中没有的其他安装选项,请联系支持部门启用这些选项。
- 对于 IAM 凭据,请使用您 IBM Cloud Object Storage 服务实例中的
-
将所有秘密数据参数编码为 base64。
echo -n "<value>" | base64 -
用 base64 编码值更新
secret.yaml。 -
创建私钥。
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.
-
从前面的示例中选择一个,并根据自己的使用情况进行定制。 有关存储类的列表,请参阅 存储类参考。
-
创建 PVC。
oc apply -f pvc.yaml
创建部署
-
将以下配置保存到名为
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. -
创建部署。
oc apply -f dep.yaml
禁用IBM Cloud Object Storage附加组件
禁用插件或补丁更新不会删除现有的机密、PVC 和部署。 不会中断客户现有的工作负载。
- 运行以下命令以禁用该插件。
示例输出ibmcloud oc cluster addon disable ibm-object-csi-driver --cluster CLUSTERData 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 - 验证是否已删除附加组件。
ibmcloud oc cluster addon ls --cluster CLUSTER
从Helm插件迁移到群集插件
-
获取 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 -
描述 PVC 并获取水桶名称。
oc describe pvc <pvc_name> | grep ibm.io/bucket:示例输出
ibm.io/bucket: test-s3 -
重新创建包含水桶名称的秘密。
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 -
查找 PVC 中使用的存储类。
oc describe pvc <pvc_name> | grep StorageClass:名为
test-s3的 PVC 的命令示例。oc describe pvc test-s3 | grep StorageClass:示例输出
StorageClass: ibmc-s3fs-smart-perf-regional -
查看新的存储类别 that are available with the add-on and select a replacement class.
- 如果您使用的是
flex类,请选择一个新的smart类。 - 如果您使用的是
standard类,请选择一个新的standard类。 - 附加组件不再提供
cold和vault类,请选择smart或standard类。
- 如果您使用的是
-
查看 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> -
创建一个替代 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. -
确认 PVC 为
Bound。oc get pvc -
获取应用程序的详细信息。
oc get pods -
将应用程序的规模缩小到零。
kubectl scale deployment --replicas=0 my-app -
创建一个替换部署,引用上一步中创建的 PVC。
-
新部署运行后,可以删除旧部署。
-
对于每个需要迁移的 PVC,请重复上述步骤。
IBM Cloud Object Storage集群附加存储类
IBM Cloud Object Storage 群集附加组件为 s3fs 和 rclone 安装程序提供存储类。 选择符合您的数据访问需求的存储类。 存储类别决定了为工作负载创建的存储桶类别、回收策略和默认挂载行为。
- 标准
- 适用于频繁访问的“热数据”。 常见用例是 Web 或移动应用程序。
- 保险库
- 适用于访问频率较低的工作负载或冷数据,例如每月访问一次或更少。 常见用例是归档、短期数据保留、数字资产保留、磁带更换和灾难恢复。
- Cold
- 适用于很少被访问(每90天或更少)的冷数据,或非活跃数据。 常见用例是归档、长期备份、为合规性保留的历史数据或很少访问的工作负载和应用程序。
- 智能
- 适用于没有特定使用模式的工作负载和数据,或使用模式难以预测的情况。
决定用于存储区中所存储数据的弹性级别。 有关更多信息,请参阅区域和端点。
- 跨区域
- 您的数据存储在同一地理位置内的三个区域中,以确保最高可用性。 如果您具有跨区域分布的工作负载,那么会将请求路由到离您最近的区域端点。 地理位置的 IBM Cloud Object Storage 端点会根据您的集群所在的位置自动设置。 例如,如果您的集群位于
US South,那么您的存储类将配置为使用US GEO作为存储桶的端点。 选择名称中包含“cross-region”的存储类。 - 区域
- 您的数据会在同一区域内的多个可用区中进行复制。 如果您的工作负载位于同一区域中,那么会看到相比跨区域设置,等待时间更短,性能更好。 区域终点会根据您的集群所在的位置自动设置。 例如,如果您的集群位于
US South,则您的存储类已配置为使用US South作为存储桶的区域端点。 请选择名称中不包含“cross-region”的存储类。
| 名称 | 水桶类 | 弹性 | 安装机 | 回收策略 | 绑定方式 |
|---|---|---|---|---|---|
| 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>。
存储类参数
所有群集附加存储类都包括以下核心参数。
| 参数 | 描述 |
|---|---|
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 存储类使用以下默认挂载选项。
| 安装选项 | 描述 |
|---|---|
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 存储类使用以下默认挂载选项。
| 安装选项 | 描述 |
|---|---|
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 校验和计算。 在处理大型文件时,当校验和计算会带来显著开销的情况下,可提升性能。 |