为使用 IBM Cloud Object Storage 的应用程序设置容量配额

虚拟私有云 传统基础设施

通过 IBM Cloud Object Storage,您可以为在 Red Hat OpenShift on IBM Cloud 集群中运行的应用程序动态配置存储桶。 您还可以在供应期间对这些存储区动态设置容量配额。 配额可以帮助您管理工作负载所使用的资源,同时避免不必要的费用。

目标

在本教程中,您将 Object Storage 插件安装在集群中,并对使用该插件创建的任何持久卷声明 (PVC) 启用配额。

然后,创建 PVC,以动态方式在 Object Storage 实例中创建具有配额限制的存储区。

之后,将文件上载到存储区,并将简单应用程序部署到集群,以安装存储区并打印该文件的内容。

先决条件

在开始本教程之前,请确保您已创建或安装了以下资源和工具。

  • IBM Cloud 帐户。 有关更多信息,请参阅 创建帐户
  • CLI 工具包括 IBM Cloud CLI,Containers 服务 CLI 插件和 Helm CLI。 有关更多信息,请参阅 IBM Cloud CLI 入门
  • Red Hat OpenShift on IBM Cloud 集群。 如果您有一个 VPC 集群,请确保您的 VPC 已连接公共网关。 有关更多信息,请参阅 创建集群
  • 与集群位于同一区域中的 Object Storage 实例。 有关更多信息,请参阅 供应 Object Storage的实例

创建一套服务证书

  1. 执行以下步骤以创建一组 HMAC Object Storage 实例的服务凭证。 请注意,您创建的凭证必须具有 管理者 角色才能创建存储区。

  2. 创建一组 HMAC 服务凭证后,请查看凭证的详细信息,并记录 apikeyaccess_key_idsecret_access_key。 保存这些值以用于下一步。

创建用于存储证书的密文

  1. 使用服务凭证中的 apikeyaccess_key_idsecret_access_key 来创建私钥。
    oc create secret generic my-cos-secret --type=ibm/ibmc-s3fs --from-literal=access-key=ACCESS-KEY --from-literal=secret-key=SECRET-KEY --from-literal=res-conf-apikey=API-KEY
    
    示例输出
    secret/my-cos-secret created
    
  2. 验证秘密是否已创建。
    oc get secrets | grep my-cos
    
    示例输出
    my-cos-secret              ibm/ibmc-s3fs                         3      11m
    

安装插件

在集群中安装插件时,请确保指定 --set quotaLimit=true 选项。 指定此选项意味着使用 PVC 创建的任何存储区的配额限制等于 PVC 中的存储大小。

  1. 执行以下步骤以 安装插件并启用配额限制。 如果已在集群中安装该插件,那么可以跳过此步骤。 要查看是否已安装该插件,请执行下一步。

  2. 通过列出驱动程序 pod 来验证是否安装了该插件。

    oc get pods -n ibm-object-s3fs | grep object
    

    示例输出

    ibmcloud-object-storage-driver-k9x4l             1/1     Running   0          6m52s
    ibmcloud-object-storage-driver-kj9m6             1/1     Running   0          6m52s
    ibmcloud-object-storage-driver-l8gqk             1/1     Running   0          6m52s
    ibmcloud-object-storage-plugin-576fb8bd7-sxlkb   1/1     Running   0          6m52s
    

动态供应具有配额的存储区

您可以使用动态供应在创建 PVC 时自动创建 Object Storage 存储区。

  1. 复制以下 PVC 配置并将其保存到名为 pvc.yaml 的文件中。 此示例 PVC 会自动创建配额等于 20Gi 的存储区。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: my-cos-pvc
      namespace: default
      annotations:
        ibm.io/auto-create-bucket: "true"
        ibm.io/auto-delete-bucket: "true"
        ibm.io/secret-name: "my-cos-secret"
        ibm.io/quota-limit: "true"
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      storageClassName: ibmc-s3fs-standard-cross-region
    
  2. 在集群中创建 PVC。

    oc apply -f pvc.yaml
    

    示例输出

    persistentvolumeclaim/my-cos-pvc created
    
  3. 列出 PVC 并验证 my-cos-pvc 是否处于 Bound 状态。

    NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                      AGE
    my-cos-pvc   Bound    pvc-64a4e0c9-b5ec-40e3-8b7e-77ff47ae6c5e   20Gi       RWO            ibmc-s3fs-standard-cross-region   6s
    
  4. 浏览到控制台中的 Object Storage 实例,然后单击 存储区 选项卡。

  5. 查看自动创建的存储区的详细信息。 存储区名称的格式为 tmp-s3fs-XXXX

  6. 单击 tmp-s3fs-XXXX 存储区,然后单击 配置 选项卡。

  7. 在“配置”页面上,查找 配额实施 部分。 请注意,该存储区是使用等于您在 PVC 中指定的大小的配额自动创建的。 在此示例中,值为 20Gi

将文件上载到存储区

  1. 将以下 Pod 配置保存到名为 pod.yaml 的文件中。

    apiVersion: v1
    kind: Pod
    metadata:
      name: cat-test-file
    spec:
      containers:
        - name: app
          image: nginx
          volumeMounts:
          - name: my-vol
            mountPath: "/mnt"
          command: ["/bin/sh"]
          args: ["-c", "cat mnt/pod.yaml && sleep 5 && exit"]
      volumes:
        - name: my-vol
          persistentVolumeClaim:
            claimName: my-cos-pvc
    
  2. 浏览到控制台中的 Object Storage 实例,然后单击 存储区 选项卡。

  3. 单击 tmp-s3fs-XXXX 存储区,然后单击 上载

  4. 上载先前保存的 pod.yaml 文件。

创建安装存储区的应用程序

  1. 复制以下 Pod 配置,并将其保存到名为 pod.yaml 的文件中。 此示例 pod 安装由 my-cos-pvc PVC 创建的存储区,并打印先前上载的 pod.yaml 文件的内容。
    apiVersion: v1
    kind: Pod
    metadata:
      name: cat-test-file
    spec:
      containers:
        - name: app
          image: nginx
          volumeMounts:
          - name: my-vol
            mountPath: "/mnt"
          command: ["/bin/sh"]
          args: ["-c", "cat mnt/pod.yaml && sleep 5 && exit"]
      volumes:
        - name: my-vol
          persistentVolumeClaim:
            claimName: my-cos-pvc
    
  2. 在群集中创建 pod。
    oc apply -f pod.yaml
    
    示例输出
    pod/cat-test-file created
    
  3. 获取 cat-test-file pod 的日志。 在此示例中,日志包含先前上载的 pod.yaml 文件的打印内容。
    apiVersion: v1
    kind: Pod
    metadata:
      name: cat-test-file
    spec:
      containers:
        - name: app
          image: nginx
          volumeMounts:
          - name: my-vol
            mountPath: "/mnt"
          command: ["/bin/sh"]
          args: ["-c", "cat mnt/pod.yaml && sleep 5 && exit"]
      volumes:
        - name: my-vol
          persistentVolumeClaim:
            claimName: my-cos-pvc
    

复审

在本教程中,您在集群中安装了 Object Storage 插件,并为使用该插件创建的任何 PVC 启用了配额。 然后,您创建了 PVC,该 PVC 在 Object Storage 实例中动态创建了具有配额限制的存储区。 之后,您部署了一个简单应用程序,用于打印存储区中文件的内容。

后续步骤