管理混合和多云资源

Red Hat OpenShift Container Storage 4.8

集群和存储管理员的混合和多云资源管理

摘要

本文档解释了如何在混合云或多云环境中管理存储资源。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。如需了解更多详细信息,请参阅 CTO Chris Wright 信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请告诉我们如何让它更好。提供反馈:

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要提交更复杂的反馈,请创建一个 Bugzilla ticket:

    1. 进入 Bugzilla 网站。
    2. 在 Component 中选择 Documentation
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 1 章 关于 Multicloud 对象网关

Multicloud 对象网关 (MCG) 是 OpenShift 的轻量级对象存储服务,允许用户启动小规模,然后根据需要在多个集群中、多个集群中和云原生存储中进行扩展。

第 2 章 使用应用程序访问多云对象网关

您可以使用任何以 AWS S3 或使用 AWS S3 软件开发套件 (SDK) 的代码为目标的应用程序访问对象服务。应用需要指定 MCG 端点、访问密钥和 secret 访问密钥。您可以使用您的终端或 MCG CLI 来检索此信息。

有关访问 RADOS 对象网关 S3 端点的信息,请参阅 第 12 章 访问 RADOS 对象网关 S3 端点

先决条件

  • 正在运行的 OpenShift Container Storage Platform
  • 下载 MCG 命令行界面以简化管理:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,

    • 对于 IBM Power 系统,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-ppc64le-rpms
    • 对于 IBM Z 基础架构,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms
  • 另外,您可以使用 OpenShift Container Storage RPM(下载 RedHat OpenShift Container Storage)安装 mcg 软件包。

    注意

    根据您的架构选择正确的产品变体。

您可以通过两种方式访问相关的端点、访问密钥和 secret 访问密钥:

重要

确保您有一个 DNS 条目,以便使用虚拟主机样式将客户端应用程序指向 MCG 存储桶。

2.1. 从终端访问 Multicloud 对象网关

流程

运行 describe 命令以查看有关 MCG 端点的信息,包括其访问密钥(AWS_ACCESS_KEY_ID 值)和 secret 访问密钥(AWS_SECRET_ACCESS_KEY 值):

# oc describe noobaa -n openshift-storage

输出结果类似如下:

Name:         noobaa
Namespace:    openshift-storage
Labels:       <none>
Annotations:  <none>
API Version:  noobaa.io/v1alpha1
Kind:         NooBaa
Metadata:
  Creation Timestamp:  2019-07-29T16:22:06Z
  Generation:          1
  Resource Version:    6718822
  Self Link:           /apis/noobaa.io/v1alpha1/namespaces/openshift-storage/noobaas/noobaa
  UID:                 019cfb4a-b21d-11e9-9a02-06c8de012f9e
Spec:
Status:
  Accounts:
    Admin:
      Secret Ref:
        Name:           noobaa-admin
        Namespace:      openshift-storage
  Actual Image:         noobaa/noobaa-core:4.0
  Observed Generation:  1
  Phase:                Ready
  Readme:

  Welcome to NooBaa!
  -----------------

  Welcome to NooBaa!
    -----------------
    NooBaa Core Version:
    NooBaa Operator Version:

    Lets get started:

    1. Connect to Management console:

      Read your mgmt console login information (email & password) from secret: "noobaa-admin".

        kubectl get secret noobaa-admin -n openshift-storage -o json | jq '.data|map_values(@base64d)'

      Open the management console service - take External IP/DNS or Node Port or use port forwarding:

        kubectl port-forward -n openshift-storage service/noobaa-mgmt 11443:443 &
        open https://localhost:11443

    2. Test S3 client:

      kubectl port-forward -n openshift-storage service/s3 10443:443 &
1
      NOOBAA_ACCESS_KEY=$(kubectl get secret noobaa-admin -n openshift-storage -o json | jq -r '.data.AWS_ACCESS_KEY_ID|@base64d')
2
      NOOBAA_SECRET_KEY=$(kubectl get secret noobaa-admin -n openshift-storage -o json | jq -r '.data.AWS_SECRET_ACCESS_KEY|@base64d')
      alias s3='AWS_ACCESS_KEY_ID=$NOOBAA_ACCESS_KEY AWS_SECRET_ACCESS_KEY=$NOOBAA_SECRET_KEY aws --endpoint https://localhost:10443 --no-verify-ssl s3'
      s3 ls


    Services:
      Service Mgmt:
        External DNS:
          https://noobaa-mgmt-openshift-storage.apps.mycluster-cluster.qe.rh-ocs.com
          https://a3406079515be11eaa3b70683061451e-1194613580.us-east-2.elb.amazonaws.com:443
        Internal DNS:
          https://noobaa-mgmt.openshift-storage.svc:443
        Internal IP:
          https://172.30.235.12:443
        Node Ports:
          https://10.0.142.103:31385
        Pod Ports:
          https://10.131.0.19:8443
      serviceS3:
        External DNS: 3
          https://s3-openshift-storage.apps.mycluster-cluster.qe.rh-ocs.com
          https://a340f4e1315be11eaa3b70683061451e-943168195.us-east-2.elb.amazonaws.com:443
        Internal DNS:
          https://s3.openshift-storage.svc:443
        Internal IP:
          https://172.30.86.41:443
        Node Ports:
          https://10.0.142.103:31011
        Pod Ports:
          https://10.131.0.19:6443
1
访问密钥(AWS_ACCESS_KEY_ID 值)
2
Secret access key(AWS_SECRET_ACCESS_KEY 值)
3
MCG 端点
注意

oc describe nooba 命令的输出列出了可用的内部和外部 DNS 名称。使用内部 DNS 时,流量是空闲的。外部 DNS 使用 Load Balancing 来处理流量,因此会有一个每小时的成本。

2.2. 使用 MCG 命令行界面访问 Multicloud 对象网关

先决条件

  • 下载 MCG 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,

    • 对于 IBM Power 系统,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-ppc64le-rpms
    • 对于 IBM Z 基础架构,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms

流程

运行 status 命令访问端点、访问密钥和 secret 访问密钥:

noobaa status -n openshift-storage

输出结果类似如下:

INFO[0000] Namespace: openshift-storage
INFO[0000]
INFO[0000] CRD Status:
INFO[0003] ✅ Exists: CustomResourceDefinition "noobaas.noobaa.io"
INFO[0003] ✅ Exists: CustomResourceDefinition "backingstores.noobaa.io"
INFO[0003] ✅ Exists: CustomResourceDefinition "bucketclasses.noobaa.io"
INFO[0004] ✅ Exists: CustomResourceDefinition "objectbucketclaims.objectbucket.io"
INFO[0004] ✅ Exists: CustomResourceDefinition "objectbuckets.objectbucket.io"
INFO[0004]
INFO[0004] Operator Status:
INFO[0004] ✅ Exists: Namespace "openshift-storage"
INFO[0004] ✅ Exists: ServiceAccount "noobaa"
INFO[0005] ✅ Exists: Role "ocs-operator.v0.0.271-6g45f"
INFO[0005] ✅ Exists: RoleBinding "ocs-operator.v0.0.271-6g45f-noobaa-f9vpj"
INFO[0006] ✅ Exists: ClusterRole "ocs-operator.v0.0.271-fjhgh"
INFO[0006] ✅ Exists: ClusterRoleBinding "ocs-operator.v0.0.271-fjhgh-noobaa-pdxn5"
INFO[0006] ✅ Exists: Deployment "noobaa-operator"
INFO[0006]
INFO[0006] System Status:
INFO[0007] ✅ Exists: NooBaa "noobaa"
INFO[0007] ✅ Exists: StatefulSet "noobaa-core"
INFO[0007] ✅ Exists: Service "noobaa-mgmt"
INFO[0008] ✅ Exists: Service "s3"
INFO[0008] ✅ Exists: Secret "noobaa-server"
INFO[0008] ✅ Exists: Secret "noobaa-operator"
INFO[0008] ✅ Exists: Secret "noobaa-admin"
INFO[0009] ✅ Exists: StorageClass "openshift-storage.noobaa.io"
INFO[0009] ✅ Exists: BucketClass "noobaa-default-bucket-class"
INFO[0009] ✅ (Optional) Exists: BackingStore "noobaa-default-backing-store"
INFO[0010] ✅ (Optional) Exists: CredentialsRequest "noobaa-cloud-creds"
INFO[0010] ✅ (Optional) Exists: PrometheusRule "noobaa-prometheus-rules"
INFO[0010] ✅ (Optional) Exists: ServiceMonitor "noobaa-service-monitor"
INFO[0011] ✅ (Optional) Exists: Route "noobaa-mgmt"
INFO[0011] ✅ (Optional) Exists: Route "s3"
INFO[0011] ✅ Exists: PersistentVolumeClaim "db-noobaa-core-0"
INFO[0011] ✅ System Phase is "Ready"
INFO[0011] ✅ Exists:  "noobaa-admin"

#------------------#
#- Mgmt Addresses -#
#------------------#

ExternalDNS : [https://noobaa-mgmt-openshift-storage.apps.mycluster-cluster.qe.rh-ocs.com https://a3406079515be11eaa3b70683061451e-1194613580.us-east-2.elb.amazonaws.com:443]
ExternalIP  : []
NodePorts   : [https://10.0.142.103:31385]
InternalDNS : [https://noobaa-mgmt.openshift-storage.svc:443]
InternalIP  : [https://172.30.235.12:443]
PodPorts    : [https://10.131.0.19:8443]

#--------------------#
#- Mgmt Credentials -#
#--------------------#

email    : admin@noobaa.io
password : HKLbH1rSuVU0I/souIkSiA==

#----------------#
#- S3 Addresses -#
#----------------#

1
ExternalDNS : [https://s3-openshift-storage.apps.mycluster-cluster.qe.rh-ocs.com https://a340f4e1315be11eaa3b70683061451e-943168195.us-east-2.elb.amazonaws.com:443]
ExternalIP  : []
NodePorts   : [https://10.0.142.103:31011]
InternalDNS : [https://s3.openshift-storage.svc:443]
InternalIP  : [https://172.30.86.41:443]
PodPorts    : [https://10.131.0.19:6443]

#------------------#
#- S3 Credentials -#
#------------------#

2
AWS_ACCESS_KEY_ID     : jVmAsu9FsvRHYmfjTiHV
3
AWS_SECRET_ACCESS_KEY : E//420VNedJfATvVSmDz6FMtsSAzuBv6z180PT5c

#------------------#
#- Backing Stores -#
#------------------#

NAME                           TYPE     TARGET-BUCKET                                               PHASE   AGE
noobaa-default-backing-store   aws-s3   noobaa-backing-store-15dc896d-7fe0-4bed-9349-5942211b93c9   Ready   141h35m32s

#------------------#
#- Bucket Classes -#
#------------------#

NAME                          PLACEMENT                                                             PHASE   AGE
noobaa-default-bucket-class   {Tiers:[{Placement: BackingStores:[noobaa-default-backing-store]}]}   Ready   141h35m33s

#-----------------#
#- Bucket Claims -#
#-----------------#

No OBC's found.
1
endpoint
2
access key
3
secret access key

现在,您有相关的端点、访问密钥和 secret 访问密钥来连接到您的应用。

例 2.2. 示例

如果 AWS S3 CLI 是应用程序,以下命令会列出 OpenShift Container Storage 中的存储桶:

AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
aws --endpoint <ENDPOINT> --no-verify-ssl s3 ls

第 3 章 允许用户访问多云对象网关控制台

要允许用户访问 Multicloud 对象网关控制台,请确保用户满足以下条件:

  • 用户位于 cluster-admins 组中。
  • 用户位于 system:cluster-admins 虚拟组中.

先决条件

  • 正在运行的 OpenShift 容器平台。

流程

  1. 启用访问 Multicloud 对象网关控制台。

    在集群中执行以下步骤:

    1. 创建 cluster-admins 组。

      # oc adm groups new cluster-admins
    2. 将组绑定到 cluster-admin 角色。

      # oc adm policy add-cluster-role-to-group cluster-admin cluster-admins
  2. cluster-admins 组添加或删除用户,以控制对多云对象网关控制台的访问。

    • 将一组用户添加到 cluster-admins 组:

      # oc adm groups add-users cluster-admins <user-name> <user-name> <user-name>...

      其中 <user-name> 是要添加的用户的名称。

      注意

      如果要将一组用户添加到 cluster-admins 组,则不需要将新添加的用户绑定到 cluster-admin 角色,以允许访问 OpenShift Container Storage 仪表板。

    • cluster-admins 组中删除一组用户:

      # oc adm groups remove-users cluster-admins <user-name> <user-name> <user-name>...

      其中 <user-name> 是要删除的用户的名称。

验证步骤

  1. 在 OpenShift Web 控制台中,以有权访问多云对象网关控制台的用户身份登录。
  2. 导航到 StorageOverviewObject 选项卡 → 选择 Multicloud Object Gateway 链接。
  3. 在 Multicloud 对象网关控制台中,以具有访问权限的同一用户身份登录。
  4. 点击 Allow selected permissions

第 4 章 为混合或多云添加存储资源

4.1. 创建新的后备存储

使用这个流程在 OpenShift Container Storage 中创建新的后备存储。

先决条件

  • 管理员对 OpenShift 的访问权限.

流程

  1. 点击 OpenShift Web 控制台左侧窗格中的 Operators Installed Operators 来查看安装的 Operator。
  2. OpenShift Container Storage Operator。
  3. 在 OpenShift Container Storage Operator 页面中,向右滚动并点击 Backing Store 选项卡。
  4. 单击 Create Backing Store

    图 4.1. 创建后端存储页面

    创建新后备存储页面的屏幕截图。
  5. 在 Create New Backing Store 页面中执行以下操作:

    1. 输入后端存储名称
    2. 选择 Provider
    3. 选择 Region
    4. 输入 端点.这是可选的。
    5. 从下拉列表中选择一个 Secret,或创建自己的 secret。另外,您也可以切换到 Credentials 视图来填写所需的 secret。

      有关创建 OCP secret 的更多信息,请参阅 Openshift Container Platform 文档中的创建 secret 部分。

      每个后备存储都需要不同的机密。有关为特定后备存储创建 secret 的更多信息,请参阅 第 4.2 节 “使用 MCG 命令行界面为混合或多云添加存储资源” 并按照使用 YAML 添加存储资源的步骤进行操作。

      注意

      此菜单与 Google Cloud 和本地 PVC 以外的所有供应商相关。

    6. 输入 Target bucket。目标 bucket 是托管在远程云服务的容器存储。它允许您创建一个连接,告诉 MCG 它可以将此存储桶用于系统。
  6. 单击 Create Backing Store

验证步骤

  1. OperatorsInstalled Operators
  2. OpenShift Container Storage Operator。
  3. 搜索新的后备存储,或者单击 Backing Store 选项卡来查看所有后备存储。

4.2. 使用 MCG 命令行界面为混合或多云添加存储资源

多云对象网关 (MCG) 简化了跨云供应商和集群的数据生成过程。

您必须添加 MCG 可以使用的后备存储。

根据部署类型,您可以选择以下步骤之一来创建后备存储:

对于 VMware 部署,请跳至 第 4.3 节 “创建兼容 s3 的多云对象网关后备存储” 以获得进一步说明。

4.2.1. 创建 AWS 支持的后备存储

先决条件

  • 下载 Multicloud 对象网关 (MCG) 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,如果是 IBM Z 基础架构,请使用以下命令:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms
  • 另外,您可以通过 OpenShift Container Storage RPMs(https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/packages)安装 mcg 软件包

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 在 MCG 命令行界面中运行以下命令:

    noobaa backingstore create aws-s3 <backingstore_name> --access-key=<AWS ACCESS KEY> --secret-key=<AWS SECRET ACCESS KEY> --target-bucket <bucket-name> -n openshift-storage
  1. <backingstore_name> 替换为后备存储的名称。
  2. <AWS ACCESS KEY><AWS SECRET ACCESS KEY> 替换为您为此创建的 AWS 访问密钥 ID 和 secret 访问密钥。
  3. <bucket-name> 替换为现有的 AWS 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。

    输出结果类似如下:

    INFO[0001] ✅ Exists: NooBaa "noobaa"
    INFO[0002] ✅ Created: BackingStore "aws-resource"
    INFO[0002] ✅ Created: Secret "backing-store-secret-aws-resource"

您还可以使用 YAML 添加存储资源:

  1. 使用凭证创建 secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <backingstore-secret-name>
      namespace: openshift-storage
    type: Opaque
    data:
      AWS_ACCESS_KEY_ID: <AWS ACCESS KEY ID ENCODED IN BASE64>
      AWS_SECRET_ACCESS_KEY: <AWS SECRET ACCESS KEY ENCODED IN BASE64>
    1. 您必须使用 Base64 提供并编码您自己的 AWS 访问密钥 ID 和 secret 访问密钥,并使用结果代替 <AWS ACCESS KEY ID ENCODED IN BASE64><AWS SECRET ACCESS KEY ENCODED IN BASE64>
    2. <backingstore-secret-name> 替换为唯一名称。
  2. 为特定的后备存储应用以下 YAML:

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      awsS3:
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        targetBucket: <bucket-name>
      type: aws-s3
    1. <bucket-name> 替换为现有的 AWS 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。
    2. <backingstore-secret-name> 替换为上一步中创建的 secret 的名称。

4.2.2. 创建 IBM COS 支持的后备存储

先决条件

  • 下载 Multicloud 对象网关 (MCG) 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,

    • 对于 IBM Power 系统,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-ppc64le-rpms
    • 对于 IBM Z 基础架构,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms
  • 另外,您可以通过 OpenShift Container Storage RPMs(https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/packages)安装 mcg 软件包

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 在 MCG 命令行界面中运行以下命令:

    noobaa backingstore create ibm-cos <backingstore_name> --access-key=<IBM ACCESS KEY> --secret-key=<IBM SECRET ACCESS KEY> --endpoint=<IBM COS ENDPOINT> --target-bucket <bucket-name> -n openshift-storage
    1. <backingstore_name> 替换为后备存储的名称。
    2. <IBM ACCESS KEY>、<IBM SECRET ACCESS KEY><IBM COS ENDPOINT> 替换为 IBM 访问密钥 ID、机密访问密钥和对应于现有 IBM 存储桶位置的适当区域端点。

      要在 IBM 云中生成上述密钥,您必须在为您的目标存储桶创建服务凭证时包含 HMAC 凭证。

    3. <bucket-name> 替换为现有的 IBM 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。

      输出结果类似如下:

      INFO[0001] ✅ Exists: NooBaa "noobaa"
      INFO[0002] ✅ Created: BackingStore "ibm-resource"
      INFO[0002] ✅ Created: Secret "backing-store-secret-ibm-resource"

您还可以使用 YAML 添加存储资源:

  1. 使用凭证创建 secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <backingstore-secret-name>
    type: Opaque
    data:
      IBM_COS_ACCESS_KEY_ID: <IBM COS ACCESS KEY ID ENCODED IN BASE64>
      IBM_COS_SECRET_ACCESS_KEY: <IBM COS SECRET ACCESS KEY ENCODED IN BASE64>
    1. 您必须使用 Base64 提供和编码您自己的 IBM COS 访问密钥 ID 和 secret 访问密钥,并使用结果代替 <IBM COS ACCESS KEY ID ENCODED IN BASE64><IBM COS SECRET ACCESS KEY ENCODED IN BASE64>
    2. <backingstore-secret-name> 替换为唯一名称。
  2. 为特定的后备存储应用以下 YAML:

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      ibmCos:
        endpoint: <endpoint>
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        targetBucket: <bucket-name>
      type: ibm-cos
    1. <bucket-name> 替换为现有的 IBM COS 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。
    2. <endpoint> 替换为与现有 IBM 存储桶名称位置对应的区域端点。这个参数告诉 Multicloud Object Gateway 使用哪个端点进行后备存储,然后再将哪一端点用于数据存储和管理。
    3. <backingstore-secret-name> 替换为上一步中创建的 secret 的名称。

4.2.3. 创建 Azure 支持的后备存储

先决条件

  • 下载 Multicloud 对象网关 (MCG) 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,如果是 IBM Z 基础架构,请使用以下命令:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms
  • 另外,您可以通过 OpenShift Container Storage RPMs(https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/packages)安装 mcg 软件包

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 在 MCG 命令行界面中运行以下命令:

    noobaa backingstore create azure-blob <backingstore_name> --account-key=<AZURE ACCOUNT KEY> --account-name=<AZURE ACCOUNT NAME> --target-blob-container <blob container name>
    1. <backingstore_name> 替换为后备存储的名称。
    2. <AZURE ACCOUNT KEY><AZURE ACCOUNT NAME> 替换为您为此创建的 AZURE 帐户密钥和帐户名称。
    3. <blob container name> 替换为现有的 Azure blob 容器名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。

      输出结果类似如下:

      INFO[0001] ✅ Exists: NooBaa "noobaa"
      INFO[0002] ✅ Created: BackingStore "azure-resource"
      INFO[0002] ✅ Created: Secret "backing-store-secret-azure-resource"

您还可以使用 YAML 添加存储资源:

  1. 使用凭证创建 secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <backingstore-secret-name>
    type: Opaque
    data:
      AccountName: <AZURE ACCOUNT NAME ENCODED IN BASE64>
      AccountKey: <AZURE ACCOUNT KEY ENCODED IN BASE64>
    1. 您必须使用 Base64 提供和编码您自己的 Azure 帐户名称和帐户密钥,并使用结果代替 <AZURE ACCOUNT NAME ENCODED IN BASE64><AZURE ACCOUNT KEY ENCODED IN BASE64>
    2. <backingstore-secret-name> 替换为唯一名称。
  2. 为特定的后备存储应用以下 YAML:

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      azureBlob:
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        targetBlobContainer: <blob-container-name>
      type: azure-blob
    1. <blob-container-name> 替换为现有的 Azure blob 容器名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。
    2. <backingstore-secret-name> 替换为上一步中创建的 secret 的名称。

4.2.4. 创建由 GCP 支持的后备存储

先决条件

  • 下载 Multicloud 对象网关 (MCG) 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,如果是 IBM Z 基础架构,请使用以下命令:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms
  • 另外,您可以通过 OpenShift Container Storage RPMs(https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/packages)安装 mcg 软件包

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 在 MCG 命令行界面中运行以下命令:

    noobaa backingstore create google-cloud-storage <backingstore_name> --private-key-json-file=<PATH TO GCP PRIVATE KEY JSON FILE> --target-bucket <GCP bucket name>
    1. <backingstore_name> 替换为后备存储的名称。
    2. <PATH TO GCP PRIVATE KEY JSON FILE> 替换为为此创建的 GCP 私钥的路径。
    3. <GCP bucket name> 替换为现有的 GCP 对象存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。

      输出结果类似如下:

      INFO[0001] ✅ Exists: NooBaa "noobaa"
      INFO[0002] ✅ Created: BackingStore "google-gcp"
      INFO[0002] ✅ Created: Secret "backing-store-google-cloud-storage-gcp"

您还可以使用 YAML 添加存储资源:

  1. 使用凭证创建 secret:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <backingstore-secret-name>
    type: Opaque
    data:
      GoogleServiceAccountPrivateKeyJson: <GCP PRIVATE KEY ENCODED IN BASE64>
    1. 您必须使用 Base64 提供并编码您自己的 GCP 服务帐户私钥,并使用结果代替 <GCP PRIVATE KEY ENCODED IN BASE64>
    2. 将 <backingstore-secret-name> 替换为唯一名称。
  2. 为特定的后备存储应用以下 YAML:

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      googleCloudStorage:
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        targetBucket: <target bucket>
      type: google-cloud-storage
    1. <target bucket> 替换为现有的 Google 存储桶。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。
    2. <backingstore-secret-name> 替换为上一步中创建的 secret 的名称。

4.2.5. 创建由本地持久性卷支持的后备存储

先决条件

  • 下载 Multicloud 对象网关 (MCG) 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,如果是 IBM Z 基础架构,请使用以下命令:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms
  • 另外,您可以通过 OpenShift Container Storage RPMs(https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/packages)安装 mcg 软件包

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 在 MCG 命令行界面中运行以下命令:

    noobaa backingstore create  pv-pool <backingstore_name> --num-volumes=<NUMBER OF VOLUMES>  --pv-size-gb=<VOLUME SIZE> --storage-class=<LOCAL STORAGE CLASS>
    1. <backingstore_name> 替换为后备存储的名称。
    2. <NUMBER OF VOLUMES> 替换为您要创建的卷数。请注意,增加卷数量可向上扩展存储。
    3. <VOLUME SIZE> 替换为每个卷所需的大小(以 GB 为单位)
    4. <LOCAL STORAGE CLASS> 替换为本地存储类,建议使用 ocs-storagecluster-ceph-rbd

      输出结果类似如下:

      INFO[0001] ✅ Exists: NooBaa "noobaa"
      INFO[0002] ✅ Exists: BackingStore "local-mcg-storage"

您还可以使用 YAML 添加存储资源:

  1. 为特定的后备存储应用以下 YAML:

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: <backingstore_name>
      namespace: openshift-storage
    spec:
       pvPool:
        numVolumes: <NUMBER OF VOLUMES>
        resources:
          requests:
            storage: <VOLUME SIZE>
        storageClass: <LOCAL STORAGE CLASS>
      type: pv-pool
    1. <backingstore_name> 替换为后备存储的名称。
    2. <NUMBER OF VOLUMES> 替换为您要创建的卷数。请注意,增加卷数量可向上扩展存储。
    3. <VOLUME SIZE> 替换为每个卷所需的大小(以 GB 为单位)。请注意,字母 G 应保留
    4. <LOCAL STORAGE CLASS> 替换为本地存储类,建议使用 ocs-storagecluster-ceph-rbd

4.3. 创建兼容 s3 的多云对象网关后备存储

多云对象网关可以使用任何 S3 兼容对象存储作为后备存储,例如,Red Hat Ceph Storage’s RADOS Gateway (RGW)。下列步骤演示了如何为 Red Hat Ceph Storage 的 RADOS Gateway 创建 S3 兼容多云对象网关后端存储。请注意,当部署 RGW 时,Openshift Container Storage operator 会自动为多云对象网关创建一个 S3 兼容后备存储。

流程

  1. 在 Multicloud Object Gateway (MCG) 命令行界面中,运行以下命令:

    noobaa backingstore create s3-compatible rgw-resource --access-key=<RGW ACCESS KEY> --secret-key=<RGW SECRET KEY> --target-bucket=<bucket-name> --endpoint=<RGW endpoint>
    1. 要获取 <RGW ACCESS KEY><RGW SECRET KEY>,请使用您的 RGW 用户 secret 名称运行以下命令:

      oc get secret <RGW USER SECRET NAME> -o yaml -n openshift-storage
    2. 解码 Base64 中的访问密钥 ID 和访问密钥,并保留它们。
    3. <RGW USER ACCESS KEY><RGW USER SECRET ACCESS KEY> 替换为上一步中的相应已解码数据。
    4. <bucket-name> 替换为现有的 RGW 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。
    5. 要获取 <RGW endpoint>请参阅访问 RADOS 对象网关 S3 端点

      输出结果类似如下:

      INFO[0001] ✅ Exists: NooBaa "noobaa"
      INFO[0002] ✅ Created: BackingStore "rgw-resource"
      INFO[0002] ✅ Created: Secret "backing-store-secret-rgw-resource"

您还可以使用 YAML 创建后备存储:

  1. 创建 CephObjectStore 用户。这还会创建一个包含 RGW 凭证的 secret:

    apiVersion: ceph.rook.io/v1
    kind: CephObjectStoreUser
    metadata:
      name: <RGW-Username>
      namespace: openshift-storage
    spec:
      store: ocs-storagecluster-cephobjectstore
      displayName: "<Display-name>"
    1. <RGW-Username><Display-name> 替换为唯一的用户名和显示名称。
  2. 为 S3-Compatible 后备存储应用以下 YAML:

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: <backingstore-name>
      namespace: openshift-storage
    spec:
      s3Compatible:
        endpoint: <RGW endpoint>
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        signatureVersion: v4
        targetBucket: <RGW-bucket-name>
      type: s3-compatible
    1. <backingstore-secret-name> 替换为上一步中使用 CephObjectStore 创建的 secret 的名称。
    2. <bucket-name> 替换为现有的 RGW 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。
    3. 要获取 <RGW endpoint>请参阅访问 RADOS 对象网关 S3 端点

4.4. 使用用户界面为混合和多云添加存储资源

流程

  1. 在 OpenShift Storage 控制台中,点击 StorageOverviewObject 选项卡 → Multicloud Object Gateway 链接。
  2. 选择左侧的资源选项卡,突出显示下方。从填充的列表中,选择 Add Cloud Resource

    MCG 添加云资源
  3. 选择 Add new connection

    MCG 添加新连接
  4. 选择相关的原生云供应商或 S3 兼容选项并填写详情。

    MCG 添加云连接
  5. 选择新创建的连接并将其映射到现有存储桶。

    MCG 映射到现有存储桶
  6. 重复这些步骤,根据需要创建任意数量的后备存储。
注意

在 NooBaa UI 中创建的资源不能由 OpenShift UI 或 MCG CLI 使用。

4.5. 创建新存储桶类

bucket 类是一个 CRD,代表一种存储桶类别,用于定义对象 Bucket 类 (OBC) 的分层策略和数据放置。

使用这个流程在 OpenShift Container Storage 中创建存储桶类。

流程

  1. 点击 OpenShift Web 控制台左侧窗格中的 Operators Installed Operators 来查看安装的 Operator。
  2. OpenShift Container Storage Operator。
  3. 在 OpenShift Container Storage Operator 页面中,向右滚动并点击 Bucket Class 选项卡。
  4. Create Bucket Class
  5. Create new Bucket Class 页面中,执行以下操作:

    1. 选择 bucket 类类型,再输入 bucket 类名称。

      1. 选择 BucketClass 类型。选择以下选项之一:

        • 命名空间

          数据存储在 NamespaceStores 中,无需执行重复数据删除、压缩或加密。

        • 标准(Standard)

          数据将由多云对象网关(MCG)使用,用于重复数据删除、压缩和加密。

          默认选择 Standard

      2. 输入 Bucket Class Name
      3. Next
    2. 在放置策略中,选择 Tier 1 - Policy Type 并单击 Next。您可以根据要求选择任一选项。

      • Spread 允许在选定资源之间分散数据。
      • Mirror 允许在选定资源中完全重复数据。
      • 单击 Add Tier 以添加另一个策略层。
    3. 如果您选择了 Tier 1 - Policy Type as Spread,请从可用列表中选择 Backing Store 资源,然后单击 Next。或者,您也可以创建新的后备存储

      注意

      当在上一步中将 Policy Type 选择为 Mirror 时,您需要选择 atleast 2 后备存储。

    4. 检查并确认 Bucket 类设置。
    5. Create Bucket Class

验证步骤

  1. OperatorsInstalled Operators
  2. OpenShift Container Storage Operator。
  3. 搜索新的 Bucket Class 或点击 Bucket Class 选项卡来查看所有 Bucket 类。

4.6. 编辑存储桶类

使用以下步骤,通过 YAML 文件编辑存储桶类组件,方法是点击 Openshift Web 控制台上的 edit 按钮。

先决条件

  • 管理员对 OpenShift 的访问权限.

流程

  1. 登录 OpenShift Web 控制台
  2. OperatorsInstalled Operators
  3. OpenShift Container Storage Operator
  4. 在 OpenShift Container Storage Operator 页面中,向右滚动并点击 Bucket Class 选项卡。
  5. 点击您要编辑的 Bucket 类旁边的操作菜单(⋮)。
  6. Edit Bucket Class
  7. 您将被重定向到 YAML 文件,在此文件中进行必要的更改并点 Save

4.7. 为存储桶类编辑后备存储

使用以下步骤编辑现有的 Multicloud Object Gateway bucket 类,以更改存储桶类中使用的底层后备存储。

先决条件

  • 管理员对 OpenShift Web 控制台的访问权限。
  • 存储桶类。
  • 后备存储。

流程

  1. Operators → Installed Operators 查看已安装的 Operator。
  2. OpenShift Container Storage Operator
  3. 单击 Bucket Class 选项卡。
  4. 点击您要编辑的 Bucket 类旁边的操作菜单(⋮)。

    编辑存储桶类资源
  5. Edit Bucket Class Resources
  6. Edit Bucket Class Resources 页面中,通过添加后备存储到存储桶类或从存储桶类中删除后备存储来编辑存储桶类资源。您还可以编辑使用一或两个分层和不同的放置策略创建的 bucket 类资源。

    • 要将后备存储添加到 bucket 类,请选择后备存储的名称。
    • 要从存储桶类中删除后备存储,请清除后备存储的名称。

      为存储桶类编辑后备存储
  7. Save

第 5 章 管理命名空间存储桶

命名空间存储桶可让您将不同提供程序上的数据存储库连接在一起,以便您可以通过统一视图与所有数据交互。将与各个提供程序关联的对象存储桶添加到命名空间存储桶,并通过命名空间存储桶访问您的数据,以一次性查看所有对象存储桶。这可让您在读取多个其他存储提供商的同时写入您首选的存储供应商,从而显著降低迁移至新存储提供商的成本。

注意

只有其写入目标可用且可正常运行时,才能使用命名空间存储桶。

5.1. 命名空间存储桶中对象的 Amazon S3 API 端点

您可以使用 Amazon Simple Storage Service (S3) API 与命名空间存储桶中的对象交互。

Red Hat OpenShift Container Storage 4.6 支持以下命名空间存储桶操作:

有关这些操作及其使用方法的最新信息,请参阅 Amazon S3 API 参考文档。

5.2. 使用 Multicloud 对象网关 CLI 和 YAML 添加命名空间存储桶

如需有关命名空间存储桶的更多信息,请参阅管理命名空间存储桶

根据部署的类型以及是否使用 YAML 或 Multicloud 对象网关 CLI,选择以下流程之一来添加命名空间存储桶:

5.2.1. 使用 YAML 添加 AWS S3 命名空间存储桶

先决条件

流程

  1. 使用凭证创建 secret:

    apiVersion: v1
    kind: Secret
    metadata:
    name: <namespacestore-secret-name>
    type: Opaque
    data:
    AWS_ACCESS_KEY_ID: <AWS ACCESS KEY ID ENCODED IN BASE64>
    AWS_SECRET_ACCESS_KEY: <AWS SECRET ACCESS KEY ENCODED IN BASE64>
    1. 您必须使用 Base64 提供并编码您自己的 AWS 访问密钥 ID 和 secret 访问密钥,并使用结果代替 <AWS ACCESS KEY ID ENCODED IN BASE64><AWS SECRET ACCESS KEY ENCODED IN BASE64>。ii.使用一个唯一的名称替换 <namespacestore-secret-name>
  2. 使用 OpenShift 自定义资源定义 (CRD) 创建 NamespaceStore 资源。NamespaceStore 代表底层存储,用作 Multicloud Object Gateway 命名空间存储桶中数据的读取或写入目标。要创建 NamespaceStore 资源,请应用以下 YAML:

    apiVersion: noobaa.io/v1alpha1
    kind: NamespaceStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: <resource-name>
      namespace: openshift-storage
    spec:
      awsS3:
        secret:
          name: <namespacestore-secret-name>
          namespace: <namespace-secret>
        targetBucket: <target-bucket>
      type: aws-s3
    1. <resource-name> 替换为您要提供给资源的名称。
    2. <namespacestore-secret-name> 替换为在第 1 步中创建的 secret。
    3. <namespace-secret> 替换为可找到 secret 的命名空间。
    4. <target-bucket> 替换为您为 NamespaceStore 创建的目标存储桶。
  3. 创建一个命名空间存储桶类,为命名空间存储桶定义命名空间策略。命名空间策略的类型需要是 singlemulti

    • 一个类型为 single 的命名空间策略需要以下配置:

      apiVersion: noobaa.io/v1alpha1
      kind: BucketClass
      metadata:
        labels:
          app: noobaa
        name: <my-bucket-class>
        namespace: openshift-storage
      spec:
        namespacePolicy:
          type:
          single:
            resource: <resource>

      <my-bucket-class> 替换为唯一的命名空间存储桶类名称。

      <resource> 替换为单个 namespace-store 的名称,该存储将定义命名空间存储桶的读取和写入目标。

    • 一个类型为 multi 的命名空间策略需要以下配置:

      apiVersion: noobaa.io/v1alpha1
      kind: BucketClass
      metadata:
        labels:
          app: noobaa
        name: <my-bucket-class>
        namespace: openshift-storage
      spec:
        namespacePolicy:
          type: Multi
          multi:
            writeResource: <write-resource>
            readResources:
            - <read-resources>
            - <read-resources>

      <my-bucket-class> 替换为唯一的存储桶类名称。

      <write-resource> 替换为单个 namespace-store 的名称,该存储将定义命名空间存储桶的写入目标。

      <read-resources> 替换为定义命名空间存储桶读取目标的 namespace-store 的名称列表。

  4. 应用以下 YAML,以使用对象 Bucket Class (OBC) 资源创建 bucket,该资源使用第 2 步中定义的 bucket 类。

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: <resource-name>
      namespace: openshift-storage
    spec:
      generateBucketName: <my-bucket>
      storageClassName: noobaa.noobaa.io
      additionalConfig:
        bucketclass: <my-bucket-class>
    注意

    对于 IBM Power Systems 和 IBM Z 基础架构,使用 storageClassName 作为 openshift-storage.noobaa.io

    1. <my-bucket-class> 替换为上一步中创建的存储桶类。

在 Operator 置备 OBC 后,会在 Multicloud 对象网关中创建存储桶,Operator 会在 OBC 的同一命名空间中创建一个名称与 OBC 相同的 Secret 和 ConfigMap。

5.2.2. 使用 YAML 添加 IBM COS 命名空间存储桶

先决条件

流程

  1. 使用凭证创建 secret:

    apiVersion: v1
    kind: Secret
    metadata:
    name: <namespacestore-secret-name>
    type: Opaque
    data:
    IBM_COS_ACCESS_KEY_ID: <IBM COS ACCESS KEY ID ENCODED IN BASE64>
    IBM_COS_SECRET_ACCESS_KEY: <IBM COS SECRET ACCESS KEY ENCODED IN BASE64>
    1. 您必须使用 Base64 提供和编码您自己的 IBM COS 访问密钥 ID 和 secret 访问密钥,并使用结果代替 <IBM COS ACCESS KEY ID ENCODED IN BASE64> 和 `<IBM COS SECRET ACCESS KEY ENCODED IN BASE64>。
    2. 使用一个唯一的名称替换 <namespacestore-secret-name>
  2. 使用 OpenShift 自定义资源定义 (CRD) 创建 NamespaceStore 资源。NamespaceStore 代表底层存储,用作 Multicloud Object Gateway 命名空间存储桶中数据的读取或写入目标。要创建 NamespaceStore 资源,请应用以下 YAML:

    apiVersion: noobaa.io/v1alpha1
    kind: NamespaceStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      s3Compatible:
        endpoint: <IBM COS ENDPOINT>
        secret:
          name: <namespacestore-secret-name>
          namespace: <namespace-secret>
        signatureVersion: v2
        targetBucket: <target-bucket>
      type: ibm-cos
    1. <IBM COS ENDPOINT> 替换为适当的 IBM COS 端点。
    2. <namespacestore-secret-name> 替换为在第 1 步中创建的 secret。
    3. <namespace-secret> 替换为可找到 secret 的命名空间。
    4. <target-bucket> 替换为您为 NamespaceStore 创建的目标存储桶。
  3. 创建一个命名空间存储桶类,为命名空间存储桶定义命名空间策略。命名空间策略的类型需要是 singlemulti

    • 一个类型为 single 的命名空间策略需要以下配置:

      apiVersion: noobaa.io/v1alpha1
      kind: BucketClass
      metadata:
        labels:
          app: noobaa
        name: <my-bucket-class>
        namespace: openshift-storage
      spec:
        namespacePolicy:
          type:
          single:
            resource: <resource>

      <my-bucket-class> 替换为唯一的命名空间存储桶类名称。

      <resource> 替换为单个 namespace-store 的名称,该存储将定义命名空间存储桶的读取和写入目标。

    • 一个类型为 multi 的命名空间策略需要以下配置:

      apiVersion: noobaa.io/v1alpha1
      kind: BucketClass
      metadata:
        labels:
          app: noobaa
        name: <my-bucket-class>
        namespace: openshift-storage
      spec:
        namespacePolicy:
          type: Multi
          multi:
            writeResource: <write-resource>
            readResources:
            - <read-resources>
            - <read-resources>

      <my-bucket-class> 替换为唯一的存储桶类名称。

      <write-resource> 替换为单个 namespace-store 的名称,该存储将定义命名空间存储桶的写入目标。

      <read-resources> 替换为定义命名空间存储桶读取目标的 namespace-store 的名称列表。

  4. 应用以下 YAML,以使用对象 Bucket Class (OBC) 资源创建 bucket,该资源使用第 2 步中定义的 bucket 类。

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: <resource-name>
      namespace: openshift-storage
    spec:
      generateBucketName: <my-bucket>
      storageClassName: noobaa.noobaa.io
      additionalConfig:
        bucketclass: <my-bucket-class>
    注意

    对于 IBM Power Systems 和 IBM Z 基础架构,使用 storageClassName 作为 openshift-storage.noobaa.io

    1. <my-bucket-class> 替换为上一步中创建的存储桶类。

在 Operator 置备 OBC 后,会在 Multicloud 对象网关中创建存储桶,Operator 会在 OBC 的同一命名空间中创建一个名称与 OBC 相同的 Secret 和 ConfigMap。

5.2.3. 使用 Multicloud 对象网关 CLI 添加 AWS S3 命名空间存储桶

先决条件

  • 正在运行的 OpenShift Container Storage Platform
  • 访问多云对象网关,请参阅第 2 章,使用应用程序访问多云对象网关
  • 下载 Multicloud 对象网关命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,如果是 IBM Z 基础架构,请使用以下命令:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms

    另外,您可以通过 OpenShift Container Storage RPM (https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/package) 安装 mcg 软件包。

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 创建 NamespaceStore 资源。NamespaceStore 代表一个底层存储,用作 Multicloud Object Gateway 命名空间存储桶中数据的读取或写入目标。在 MCG 命令行界面中运行以下命令:

    noobaa namespacestore create aws-s3 <namespacestore > --access-key <AWS ACCESS KEY> --secret-key <AWS SECRET ACCESS KEY> --target-bucket <bucket-name> -n openshift-storage
    1. <namespacestore> 替换为 NamespaceStore 的名称。
    2. <AWS ACCESS KEY><AWS SECRET ACCESS KEY> 替换为您为此创建的 AWS 访问密钥 ID 和 secret 访问密钥。
    3. <bucket-name> 替换为现有的 AWS 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。
  2. 创建一个命名空间存储桶类,为命名空间存储桶定义命名空间策略。命名空间策略的类型需要是 singlemulti

    • 运行以下命令,创建一个命名空间存储桶类,其命名空间策略类型为 single

      noobaa bucketclass create namespace-bucketclass single <my-bucket-class> --resource <resource> -n openshift-storage

      <resource-name> 替换为您要为其提供资源的名称。

      <my-bucket-class> 替换为唯一的存储桶类名称。

      <resource> 替换为一个 namespace-store,它将定义命名空间存储桶的读写目标。

    • 运行以下命令,创建一个命名空间存储桶类,其命名空间策略为 multi

      noobaa bucketclass create namespace-bucketclass multi <my-bucket-class> --write-resource <write-resource> --read-resources <read-resources> -n openshift-storage

      <resource-name> 替换为您要为其提供资源的名称。

      <my-bucket-class> 替换为唯一的存储桶类名称。

      <write-resource> 替换为单个 namespace-store,它将定义命名空间存储桶的写入目标。

      <read-resources> 替换为一个以逗号分开的命名空间存储列表,该存储将定义命名空间存储桶的读取目标。

  3. 运行以下命令,以使用对象 Bucket Class (OBC) 资源创建 bucket,该资源使用第 2 步中定义的 bucket 类。

    noobaa obc create my-bucket-claim -n openshift-storage --app-namespace my-app --bucketclass <custom-bucket-class>
    1. <bucket-name> 替换为您选择的存储桶名称。
    2. <custom-bucket-class> 替换为在第 2 步中创建的 bucket 类的名称。

在 Operator 置备 OBC 后,会在 Multicloud 对象网关中创建存储桶,Operator 会在 OBC 的同一命名空间中创建一个名称与 OBC 相同的 Secret 和 ConfigMap。

5.2.4. 使用 Multicloud 对象网关 CLI 添加 IBM COS 命名空间存储桶

先决条件

  • 正在运行的 OpenShift Container Storage Platform
  • 访问多云对象网关,请参阅第 2 章,使用应用程序访问多云对象网关
  • 下载 Multicloud 对象网关命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,

    • 对于 IBM Power 系统,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-ppc64le-rpms
    • 对于 IBM Z 基础架构,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms

    另外,您可以通过 OpenShift Container Storage RPM (https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/package) 安装 mcg 软件包。

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 创建 NamespaceStore 资源。NamespaceStore 代表一个底层存储,用作 Multicloud Object Gateway 命名空间存储桶中数据的读取或写入目标。在 MCG 命令行界面中运行以下命令:

    noobaa namespacestore create ibm-cos <namespacestore> --endpoint <IBM COS ENDPOINT> --access-key <IBM ACCESS KEY> --secret-key <IBM SECRET ACCESS KEY> --target-bucket <bucket-name> -n openshift-storage
    1. <namespacestore> 替换为 NamespaceStore 的名称。
    2. <IBM ACCESS KEY>、<IBM SECRET ACCESS KEY><IBM COS ENDPOINT> 替换为 IBM 访问密钥 ID、机密访问密钥和对应于现有 IBM 存储桶位置的适当区域端点。
    3. <bucket-name> 替换为现有的 IBM 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。
  2. 创建一个命名空间存储桶类,为命名空间存储桶定义命名空间策略。命名空间策略的类型需要是 singlemulti

    • 运行以下命令,创建一个命名空间存储桶类,其命名空间策略类型为 single

      noobaa bucketclass create namespace-bucketclass single <my-bucket-class> --resource <resource> -n openshift-storage

      <resource-name> 替换为您要为其提供资源的名称。

      <my-bucket-class> 替换为唯一的存储桶类名称。

      <resource> 替换为一个 namespace-store,它将定义命名空间存储桶的读写目标。

    • 运行以下命令,创建一个命名空间存储桶类,其命名空间策略为 multi

      noobaa bucketclass create namespace-bucketclass multi <my-bucket-class> --write-resource <write-resource> --read-resources <read-resources> -n openshift-storage

      <resource-name> 替换为您要为其提供资源的名称。

      <my-bucket-class> 替换为唯一的存储桶类名称。

      <write-resource> 替换为单个 namespace-store,它将定义命名空间存储桶的写入目标。

      <read-resources> 替换为一个以逗号分开的命名空间存储列表,该存储将定义命名空间存储桶的读取目标。

  3. 运行以下命令,以使用对象 Bucket Class (OBC) 资源创建 bucket,该资源使用第 2 步中定义的 bucket 类。

    noobaa obc create my-bucket-claim -n openshift-storage --app-namespace my-app --bucketclass <custom-bucket-class>
    1. <bucket-name> 替换为您选择的存储桶名称。
    2. <custom-bucket-class> 替换为在第 2 步中创建的 bucket 类的名称。

在 Operator 置备 OBC 后,会在 Multicloud 对象网关中创建存储桶,Operator 会在 OBC 的同一命名空间中创建一个名称与 OBC 相同的 Secret 和 ConfigMap。

5.3. 使用 OpenShift Container Platform 用户界面添加命名空间存储桶

随着 OpenShift Container Storage 4.8 的发行版本,命名空间存储桶可以使用 OpenShift Container Platform 用户界面添加。如需有关命名空间存储桶的更多信息,请参阅管理命名空间存储桶

先决条件

  • 安装了 OpenShift Container Storage Operator 的 OpenShift Container Platform
  • 访问多云对象网关.

流程

  1. 登录 OpenShift Web 控制台。
  2. 点击 OpenShift Web 控制台左侧窗格中的 Operators Installed Operators 来查看安装的 Operator。
  3. OpenShift Container Storage Operator。如果没有可见,转到 all projectsopenshift-storage 命名空间。
  4. Namespace Store 选项卡创建要在命名空间存储桶中使用的命名空间存储资源。
  5. Namespace Store 页面中执行以下操作:

    1. 单击 Create namespace store
    2. 输入命名空间存储名称。
    3. 选择一个供应商。
    4. 选择一个地区。
    5. 选择现有的 secret,或者点击 Switch to credentials 通过输入 secret key 和 secret access key 创建 secret。
    6. 选择目标存储桶。
    7. 点击 Create
    8. 验证命名空间存储是否处于 Ready 状态。
    9. 重复此操作,直到您拥有所需的资源量。
  6. 单击 Bucket Class 选项卡。
  7. Create a new Bucket Class
  8. Create a new Bucket Class 页面中,执行以下操作:

    1. 选择 Namespace 单选按钮。
    2. 输入 Bucket 类名称。
    3. 添加描述(可选)。
    4. Next
  9. 在下一页中,为您的命名空间存储桶选择一个命名空间策略类型,然后单击 Next
  10. 选择目标资源。

    • 如果您的命名空间策略类型是 Single,则需要选择一个读取资源。
    • 如果您的命名空间策略类型是 Multi,则需要选择读取资源和写入资源。
    • 如果命名空间策略类型是 Cache,则需要选择一个定义命名空间存储桶读取和写入目标的 Hub 命名空间存储。
  11. Next
  12. 查看您的新存储桶类,然后点 Create Bucketclass
  13. BucketClass 页面中,验证新创建的资源是否处于 Created 阶段。
  14. 在 OpenShift 控制台中,点击 StorageOverview 并点 Object 选项卡。
  15. Multicloud Object Gateway
  16. 点击 Buckets,然后点击 Namespace Buckets 选项卡。
  17. Create Namespace Bucket

    1. Choose Name 选项卡中,指定命名空间存储桶的名称,再单击 Next
    2. Set Placement 标签页中:

      1. Read Policy 下,选中在第 5 步中创建的每个命名空间资源应从中读取数据的复选框。
      2. 如果您使用的命名空间策略类型是 Multi,在 Write Policy 下指定要将数据写入的命名空间资源。
      3. Next
    3. 点击 Create

验证

  • 验证命名空间存储桶是否在 State 列中带有绿色勾号、预期的读取资源和预期的写入资源名称。

第 6 章 混合和多云存储桶的镜像数据

多云对象网关 (MCG) 简化了跨云供应商和集群的数据生成过程。

先决条件

然后,您创建一个 bucket 类来反映数据管理策略镜像。

流程

您可以通过三种方式设置镜像数据:

6.1. 使用 MCG 命令行创建存储桶类来镜像数据

  1. 在 MCG 命令行界面中,运行以下命令来创建带有镜像策略的存储桶类:

    $ noobaa bucketclass create placement-bucketclass mirror-to-aws --backingstores=azure-resource,aws-resource --placement Mirror
  2. 将新创建的存储桶类设置为一个新的存储桶声明,生成一个新的存储桶,该存储桶将在两个位置之间进行镜像:

    $ noobaa obc create  mirrored-bucket --bucketclass=mirror-to-aws

6.2. 使用 YAML 创建存储桶类来镜像数据

  1. 应用以下 YAML。

    apiVersion: noobaa.io/v1alpha1
    kind: BucketClass
    metadata:
      labels:
        app: noobaa
      name: <bucket-class-name>
      namespace: openshift-storage
    spec:
      placementPolicy:
        tiers:
        - backingStores:
          - <backing-store-1>
          - <backing-store-2>
          placement: Mirror
  2. 将以下行添加到标准 Object Bucket Claim (OBC) 中:

    additionalConfig:
      bucketclass: mirror-to-aws

    有关 OBCs 的更多信息,请参阅 第 8 章 对象 Bucket 声明

6.3. 使用用户界面将存储桶配置为镜像数据

  1. 在 OpenShift Storage 控制台中,点击 StorageOverviewObject 选项卡 → Multicloud Object Gateway 链接。
  2. 在 NooBaa 页面中,单击左侧的存储 buckets 图标。您将看到存储桶列表:

    MCG nooba bucket 图标
  3. 点击您要更新的存储桶。
  4. 点击 Edit Tier 1 Resources:

    MCG 编辑第 1 层资源
  5. 选择 Mirror 并检查您要用于这个存储桶的相关资源。在以下示例中,在 RGW 和 AWS-backingstore 中被镜像的 noobaa-default-backing-store 间的数据会被镜像:

    MCG 镜像相关资源
  6. Save
注意

在 NooBaa UI 中创建的资源不能由 OpenShift UI 或 MCG CLI 使用。

第 7 章 Multicloud 对象网关中的存储桶策略

OpenShift Container Storage 支持 AWS S3 存储桶策略。bucket 策略允许您为用户授予存储桶及其对象的访问权限。

7.1. 关于存储桶策略

bucket 策略是一个访问策略选项,可供您向 AWS S3 存储桶和对象授予权限。bucket 策略使用基于 JSON 的访问策略语言。有关访问策略语言的更多信息,请参阅AWS 访问策略语言概述

7.2. 使用存储桶策略

先决条件

流程

在 Multicloud 对象网关中使用存储桶策略:

  1. 以 JSON 格式创建 bucket 策略。请参见以下示例:

    {
        "Version": "NewVersion",
        "Statement": [
            {
                "Sid": "Example",
                "Effect": "Allow",
                "Principal": [
                        "john.doe@example.com"
                ],
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::john_bucket"
                ]
            }
        ]
    }

    bucket 策略有许多可用元素,与访问权限有关。

    有关这些元素的详细信息,以及如何使用它们控制访问权限的示例,请参阅 AWS 访问策略语言概述

    如需存储桶策略的更多示例,请参阅 AWS Bucket 策略示例

    有关创建 S3 用户的说明,请参阅 第 7.3 节 “在 Multicloud 对象网关中创建 AWS S3 用户”

  2. 使用 AWS S3 客户端,使用 put-bucket-policy 命令将存储桶策略应用到 S3 存储桶:

    # aws --endpoint ENDPOINT --no-verify-ssl s3api put-bucket-policy --bucket MyBucket --policy BucketPolicy

    使用 S3 端点替换 ENDPOINT

    MyBucket 替换为存储桶来设置策略

    BucketPolicy 替换为存储桶策略 JSON 文件

    如果您使用默认自签名证书,请添加 --no-verify-ssl

    例如:

    # aws --endpoint https://s3-openshift-storage.apps.gogo44.noobaa.org --no-verify-ssl s3api put-bucket-policy -bucket MyBucket --policy file://BucketPolicy

    如需有关 put-bucket-policy 命令的更多信息,请参阅有关 put-bucket-policy 的 AWS CLI 命令参考

注意

principal 元素指定允许或拒绝访问某一资源的用户,如存储桶。目前,只有 NooBaa 帐户才能用作主体。对于对象存储桶声明,NooBaa 会自动创建一个帐户 obc-account.<generated bucket name>@noobaa.io

注意

不支持 bucket 策略条件。

7.3. 在 Multicloud 对象网关中创建 AWS S3 用户

先决条件

流程

  1. 在 OpenShift Storage 控制台中,导航到 StorageOverviewObject 选项卡 → 选择 Multicloud Object Gateway 链接:

    MCG 对象服务 noobaa 链接
  2. Accounts 选项卡下,点 Create Account:

    MCG 帐户创建帐户按钮
  3. 选择 S3 Access Only,提供 帐户名称,例如 john.doe@example.com。点 Next:

    MCG 创建帐户 s3 用户
  4. 选择 S3 默认放置,例如 noobaa-default-backing-store。选择 Buckets Permissions。可以选择特定的存储桶或所有存储桶。点 Create

    MCG 创建帐户 s3 user2

第 8 章 对象 Bucket 声明

Object Bucket Claim 可以用来为您的工作负载请求 S3 兼容存储桶后端。

您可以通过三种方式创建对象 BucketClaim:

对象 bucket 声明在 NooBaa 中创建一个新 bucket 和应用帐户,其具有存储桶的权限,包括新的 access key 和 secret access key。应用程序帐户仅允许访问单个存储桶,默认情况下无法创建新的存储桶。

8.1. 动态对象 Bucket 声明

与持久卷类似,您可以将 Object Bucket 声明的详细信息添加到应用的 YAML 中,并获取配置映射和机密中可用的对象服务端点、访问密钥和 secret 访问密钥。可在应用程序的环境变量中动态阅读此信息。

流程

  1. 在应用程序 YAML 中添加以下行:

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: <obc-name>
    spec:
      generateBucketName: <obc-bucket-name>
      storageClassName: openshift-storage.noobaa.io

    这些行是对象 Bucket 声明本身。

    1. <obc-name> 替换为唯一的对象 Bucket Claim 名称。
    2. <obc-bucket-name> 替换为 Object Bucket Claim 的唯一存储桶名称。
  2. 您可以在 YAML 文件中添加更多行来自动使用 Object Bucket Claim。以下示例是存储桶声明结果之间的映射,这是一个带有凭证数据和 secret 的配置映射。此特定作业将从 NooBaa 声明 Object Bucket,这将创建一个存储桶和帐户。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: testjob
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - image: <your application image>
              name: test
              env:
                - name: BUCKET_NAME
                  valueFrom:
                    configMapKeyRef:
                      name: <obc-name>
                      key: BUCKET_NAME
                - name: BUCKET_HOST
                  valueFrom:
                    configMapKeyRef:
                      name: <obc-name>
                      key: BUCKET_HOST
                - name: BUCKET_PORT
                  valueFrom:
                    configMapKeyRef:
                      name: <obc-name>
                      key: BUCKET_PORT
                - name: AWS_ACCESS_KEY_ID
                  valueFrom:
                    secretKeyRef:
                      name: <obc-name>
                      key: AWS_ACCESS_KEY_ID
                - name: AWS_SECRET_ACCESS_KEY
                  valueFrom:
                    secretKeyRef:
                      name: <obc-name>
                      key: AWS_SECRET_ACCESS_KEY
    1. 将 <obc-name> 的所有实例替换为您的对象 Bucket Claim 名称。
    2. 将 <your application image> 替换为您的应用程序镜像。
  3. 应用更新的 YAML 文件:

    # oc apply -f <yaml.file>
    1. <yaml.file> 替换为 YAML 文件的名称。
  4. 要查看新配置映射,请运行以下命令:

    # oc get cm <obc-name>
    1. obc-name 替换为对象 Bucket Claim 的名称。

      您可以在输出中预期以下环境变量:

      • BUCKET_HOST - 要在应用程序中使用的端点
      • BUCKET_PORT - 应用程序可用的端口

      • BUCKET_NAME - 请求或生成的存储桶名称
      • AWS_ACCESS_KEY_ID - 作为凭据一部分的访问密钥
      • aws_SECRET_ACCESS_KEY - 属于凭据的 Secret 访问密钥
重要

获取 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。使用名称以便与 AWS S3 API 兼容。您需要在执行 S3 操作时指定密钥,特别是从多云对象网关(MCG)存储桶中读取、写入或列表时。密钥以 Base64 编码。解码密钥,然后才能使用它们。

# oc get secret <obc_name> -o yaml
<obc_name>
指定对象存储桶声明的名称。

8.2. 使用命令行界面创建对象 Bucket 声明

在使用命令行界面创建对象 Bucket 声明时,您会获得一个配置映射和一个 Secret,其中包含应用使用对象存储服务所需的所有信息。

先决条件

  • 下载 MCG 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,

    • 对于 IBM Power 系统,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-ppc64le-rpms
    • 对于 IBM Z 基础架构,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms

流程

  1. 使用命令行界面生成新 bucket 和凭据的详细信息。运行以下命令:

    # noobaa obc create <obc-name> -n openshift-storage

    <obc-name> 替换为一个唯一的对象 Bucket Claim 名称,例如 myappobc

    另外,您可以使用 --app-namespace 选项指定创建 Object Bucket Claim 配置映射和 secret 的命名空间,如 myapp-namespace

    输出示例:

    INFO[0001] ✅ Created: ObjectBucketClaim "test21obc"

    MCG 命令行界面已创建了必要的配置,并已向 OpenShift 告知新的 OBC。

  2. 运行以下命令来查看对象 Bucket 声明:

    # oc get obc -n openshift-storage

    输出示例:

    NAME        STORAGE-CLASS                 PHASE   AGE
    test21obc   openshift-storage.noobaa.io   Bound   38s
  3. 运行以下命令,以查看新对象 Bucket 声明的 YAML 文件:

    # oc get obc test21obc -o yaml -n openshift-storage

    输出示例:

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      creationTimestamp: "2019-10-24T13:30:07Z"
      finalizers:
      - objectbucket.io/finalizer
      generation: 2
      labels:
        app: noobaa
        bucket-provisioner: openshift-storage.noobaa.io-obc
        noobaa-domain: openshift-storage.noobaa.io
      name: test21obc
      namespace: openshift-storage
      resourceVersion: "40756"
      selfLink: /apis/objectbucket.io/v1alpha1/namespaces/openshift-storage/objectbucketclaims/test21obc
      uid: 64f04cba-f662-11e9-bc3c-0295250841af
    spec:
      ObjectBucketName: obc-openshift-storage-test21obc
      bucketName: test21obc-933348a6-e267-4f82-82f1-e59bf4fe3bb4
      generateBucketName: test21obc
      storageClassName: openshift-storage.noobaa.io
    status:
      phase: Bound
  4. openshift-storage 命名空间内,您可以找到配置映射和 secret 来使用此 Object Bucket Claim。CM 和 secret 的名称与 Object Bucket Claim 的名称相同。查看 secret:

    # oc get -n openshift-storage secret test21obc -o yaml

    输出示例:

    Example output:
    apiVersion: v1
    data:
      AWS_ACCESS_KEY_ID: c0M0R2xVanF3ODR3bHBkVW94cmY=
      AWS_SECRET_ACCESS_KEY: Wi9kcFluSWxHRzlWaFlzNk1hc0xma2JXcjM1MVhqa051SlBleXpmOQ==
    kind: Secret
    metadata:
      creationTimestamp: "2019-10-24T13:30:07Z"
      finalizers:
      - objectbucket.io/finalizer
      labels:
        app: noobaa
        bucket-provisioner: openshift-storage.noobaa.io-obc
        noobaa-domain: openshift-storage.noobaa.io
      name: test21obc
      namespace: openshift-storage
      ownerReferences:
      - apiVersion: objectbucket.io/v1alpha1
        blockOwnerDeletion: true
        controller: true
        kind: ObjectBucketClaim
        name: test21obc
        uid: 64f04cba-f662-11e9-bc3c-0295250841af
      resourceVersion: "40751"
      selfLink: /api/v1/namespaces/openshift-storage/secrets/test21obc
      uid: 65117c1c-f662-11e9-9094-0a5305de57bb
    type: Opaque

    该机密为您提供了 S3 访问凭据。

  5. 查看配置映射:

    # oc get -n openshift-storage cm test21obc -o yaml

    输出示例:

    apiVersion: v1
    data:
      BUCKET_HOST: 10.0.171.35
      BUCKET_NAME: test21obc-933348a6-e267-4f82-82f1-e59bf4fe3bb4
      BUCKET_PORT: "31242"
      BUCKET_REGION: ""
      BUCKET_SUBREGION: ""
    kind: ConfigMap
    metadata:
      creationTimestamp: "2019-10-24T13:30:07Z"
      finalizers:
      - objectbucket.io/finalizer
      labels:
        app: noobaa
        bucket-provisioner: openshift-storage.noobaa.io-obc
        noobaa-domain: openshift-storage.noobaa.io
      name: test21obc
      namespace: openshift-storage
      ownerReferences:
      - apiVersion: objectbucket.io/v1alpha1
        blockOwnerDeletion: true
        controller: true
        kind: ObjectBucketClaim
        name: test21obc
        uid: 64f04cba-f662-11e9-bc3c-0295250841af
      resourceVersion: "40752"
      selfLink: /api/v1/namespaces/openshift-storage/configmaps/test21obc
      uid: 651c6501-f662-11e9-9094-0a5305de57bb

    配置映射包含应用的 S3 端点信息。

8.3. 使用 OpenShift Web 控制台创建对象 Bucket 声明

您可以使用 OpenShift Web 控制台创建对象 BucketClaim (OBC)。

先决条件

流程

  1. 登录 OpenShift Web 控制台。
  2. 在左侧导航栏中,点击 StorageObject Bucket Claims
  3. 点击 Create Object Bucket Claim:

    创建 Object Bucket Claims 页面
  4. 输入对象存储桶声明的名称,并根据您的部署(内部或外部)从下拉菜单中选择适当的存储类:

    内部模式

    创建 Object Bucket Claim 向导

    以下存储类是在部署后创建的,可供使用:

    • OCS-storagecluster-ceph-rgw 使用 Ceph 对象网关 (RGW)
    • openshift-storage.noobaa.io 使用 Multicloud 对象网关

    外部模式

    创建 Object Bucket Claim 向导

    以下存储类是在部署后创建的,可供使用:

    • OCS-external-storagecluster-ceph-rgw 使用 Ceph 对象网关 (RGW)
    • openshift-storage.noobaa.io 使用 Multicloud 对象网关

      注意

      RGW OBC 存储类仅可用于全新安装的 OpenShift Container Storage 版本 4.5。它不适用于从以前的 OpenShift Container Storage 发行版本升级的集群。

  5. 点击 Create

    创建 OBC 后,您会被重定向到其详情页面:

    Object Bucket Claim Details 页

8.4. 将对象 Bucket 声明附加到部署

创建后,对象 Bucket 声明 (OBC) 可以附加到特定的部署。

先决条件

  • 对 OpenShift Web 控制台的管理访问权限.

流程

  1. 在左侧导航栏中,点击 StorageObject Bucket Claims
  2. 点击您创建的 OBC 旁边的操作菜单(⋮)。
  3. 从下拉菜单中选择 Attach to Deployment

    附加对象 Bucket 声明以进行部署
  4. 从 Deployment Name 列表中选择所需的部署,然后点 Attach:

    Deployment Name list

8.5. 使用 OpenShift Web 控制台查看对象存储桶

您可以使用 OpenShift Web 控制台查看为对象 Bucket 声明 (OBC) 创建的对象存储桶详情。

先决条件

  • 对 OpenShift Web 控制台的管理访问权限.

流程

查看对象存储桶详情:

  1. 登录 OpenShift Web 控制台。
  2. 在左侧导航栏中,点击 StorageObject Buckets:

    对象 Buckets 页面

    您还可以导航到特定 OBC 的详细信息页面,再单击 Resource 链接来查看该 OBC 的对象存储桶。

  3. 选择您要查看详细信息的对象 bucket。您可以导航到对象存储桶的详情页面:

    对象 Bucket Details 页面

8.6. 删除对象 Bucket 声明

先决条件

  • 对 OpenShift Web 控制台的管理访问权限.

流程

  1. 在左侧导航栏中,点击 StorageObject Bucket Claims
  2. 点击您要删除的 Object Bucket Claim 旁边的操作菜单(⋮)。

    附加到部署的 MCG OBC 操作菜单
  3. 从菜单中选择 Delete Object Bucket Claim

    MCG 删除对象存储桶声明
  4. 点击 Delete

第 9 章 对象存储桶的缓存策略

缓存存储桶是带有 hub 目标和缓存目标的命名空间存储桶。hub 目标是一个 S3 兼容的大型对象存储桶。缓存存储桶是本地 Multicloud 对象网关存储桶。您可以创建一个缓存存储桶来缓存 AWS 存储桶或 IBM COS 存储桶。

9.1. 创建 AWS 缓存存储桶

先决条件

  • 下载 Multicloud 对象网关 (MCG) 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,如果是 IBM Z 基础架构,请使用以下命令:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms

    另外,您可以通过 OpenShift Container Storage RPM (https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/package) 安装 mcg 软件包。

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 创建 NamespaceStore 资源。NamespaceStore 代表一个底层存储,用作 Multicloud Object Gateway 命名空间存储桶中数据的读取或写入目标。在 MCG 命令行界面中运行以下命令:

    noobaa namespacestore create aws-s3 <namespacestore> --access-key <AWS ACCESS KEY> --secret-key <AWS SECRET ACCESS KEY> --target-bucket <bucket-name>
    1. <namespacestore> 替换为命名空间存储的名称。
    2. <AWS ACCESS KEY><AWS SECRET ACCESS KEY> 替换为您为此创建的 AWS 访问密钥 ID 和 secret 访问密钥。
    3. <bucket-name> 替换为现有的 AWS 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。

      您还可以通过应用 YAML 来添加存储资源。首先使用凭证创建 secret:

      apiVersion: v1
      kind: Secret
      metadata:
        name: <namespacestore-secret-name>
      type: Opaque
      data:
        AWS_ACCESS_KEY_ID: <AWS ACCESS KEY ID ENCODED IN BASE64>
        AWS_SECRET_ACCESS_KEY: <AWS SECRET ACCESS KEY ENCODED IN BASE64>

      您必须使用 Base64 提供并编码您自己的 AWS 访问密钥 ID 和 secret 访问密钥,并使用结果代替 <AWS ACCESS KEY ID ENCODED IN BASE64><AWS SECRET ACCESS KEY ENCODED IN BASE64>

      使用一个唯一的名称替换 <namespacestore-secret-name>

      然后应用以下 YAML:

      apiVersion: noobaa.io/v1alpha1
      kind: NamespaceStore
      metadata:
        finalizers:
        - noobaa.io/finalizer
        labels:
          app: noobaa
        name: <namespacestore>
        namespace: openshift-storage
      spec:
        awsS3:
          secret:
            name: <namespacestore-secret-name>
            namespace: <namespace-secret>
          targetBucket: <target-bucket>
        type: aws-s3
    4. <namespacestore> 替换为唯一的名称。
    5. <namespacestore-secret-name> 替换为上一步中创建的 secret。
    6. <namespace-secret> 替换为用于在上一步中创建 secret 的命名空间。
    7. <target-bucket> 替换为您为命名空间存储创建的 AWS S3 存储桶。
  2. 运行以下命令来创建存储桶类:

    noobaa bucketclass create namespace-bucketclass cache <my-cache-bucket-class> --backingstores <backing-store> --hub-resource <namespacestore>
    1. <my-cache-bucket-class> 替换为唯一的存储桶类名称。
    2. <backing-store> 替换为相关的后备存储。您可以在此字段中列出一个或多个以逗号分开的后备存储。
    3. <namespacestore> 替换为上一步中创建的命名空间存储。
  3. 运行以下命令,以使用 Object Bucket Claim 资源创建 bucket,该资源使用第 2 步中定义的 bucket 类。

    noobaa obc create <my-bucket-claim> my-app --bucketclass <custom-bucket-class>
    1. <my-bucket-claim> 替换为唯一名称。
    2. <custom-bucket-class> 替换为在第 2 步中创建的 bucket 类的名称。

9.2. 创建 IBM COS 缓存存储桶

先决条件

  • 下载 Multicloud 对象网关 (MCG) 命令行界面:

    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-x86_64-rpms
    # yum install mcg
    注意

    指定适当的架构,以使用订阅管理器启用存储库。例如,

    • 对于 IBM Power 系统,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-ppc64le-rpms
    • 对于 IBM Z 基础架构,使用以下命令:
    # subscription-manager repos --enable=rh-ocs-4-for-rhel-8-s390x-rpms

    另外,您可以通过 OpenShift Container Storage RPM (https://access.redhat.com/downloads/content/547/ver=4/rhel---8/4/x86_64/package) 安装 mcg 软件包。

    注意

    根据您的架构选择正确的产品变体。

流程

  1. 创建 NamespaceStore 资源。NamespaceStore 代表一个底层存储,用作 Multicloud Object Gateway 命名空间存储桶中数据的读取或写入目标。在 MCG 命令行界面中运行以下命令:

    noobaa namespacestore create ibm-cos <namespacestore> --endpoint <IBM COS ENDPOINT> --access-key <IBM ACCESS KEY> --secret-key <IBM SECRET ACCESS KEY> --target-bucket <bucket-name>
    1. <namespacestore> 替换为 NamespaceStore 的名称。
    2. <IBM ACCESS KEY>、<IBM SECRET ACCESS KEY><IBM COS ENDPOINT> 替换为 IBM 访问密钥 ID、机密访问密钥和对应于现有 IBM 存储桶位置的适当区域端点。
    3. <bucket-name> 替换为现有的 IBM 存储桶名称。此参数告知多云对象网关将哪一个存储桶用作其后备存储的目标存储桶,以及数据存储和管理。

      您还可以通过应用 YAML 来添加存储资源。首先,使用凭证创建一个 secret:

      apiVersion: v1
      kind: Secret
      metadata:
        name: <namespacestore-secret-name>
      type: Opaque
      data:
        IBM_COS_ACCESS_KEY_ID: <IBM COS ACCESS KEY ID ENCODED IN BASE64>
        IBM_COS_SECRET_ACCESS_KEY: <IBM COS SECRET ACCESS KEY ENCODED IN BASE64>

      您必须使用 Base64 提供和编码您自己的 IBM COS 访问密钥 ID 和 secret 访问密钥,并使用结果代替 <IBM COS ACCESS KEY ID ENCODED IN BASE64> 和 <IBM COS SECRET ACCESS KEY ENCODED IN BASE64>`。

      使用一个唯一的名称替换 <namespacestore-secret-name>

      然后应用以下 YAML:

      apiVersion: noobaa.io/v1alpha1
      kind: NamespaceStore
      metadata:
        finalizers:
        - noobaa.io/finalizer
        labels:
          app: noobaa
        name: <namespacestore>
        namespace: openshift-storage
      spec:
        s3Compatible:
          endpoint: <IBM COS ENDPOINT>
          secret:
            name: <backingstore-secret-name>
            namespace: <namespace-secret>
          signatureVersion: v2
          targetBucket: <target-bucket>
        type: ibm-cos
    4. <namespacestore> 替换为唯一的名称。
    5. <IBM COS ENDPOINT> 替换为适当的 IBM COS 端点。
    6. <backingstore-secret-name> 替换为上一步中创建的 secret。
    7. <namespace-secret> 替换为用于在上一步中创建 secret 的命名空间。
    8. <target-bucket> 替换为您为命名空间存储创建的 AWS S3 存储桶。
  2. 运行以下命令来创建存储桶类:

    noobaa bucketclass create namespace-bucketclass cache <my-bucket-class> --backingstores <backing-store> --hubResource <namespacestore>
    1. <my-bucket-class> 替换为唯一的存储桶类名称。
    2. <backing-store> 替换为相关的后备存储。您可以在此字段中列出一个或多个以逗号分开的后备存储。
    3. <namespacestore> 替换为上一步中创建的命名空间存储。
  3. 运行以下命令,以使用 Object Bucket Claim 资源创建 bucket,该资源使用第 2 步中定义的 bucket 类。

    noobaa obc create <my-bucket-claim> my-app --bucketclass <custom-bucket-class>
    1. <my-bucket-claim> 替换为唯一名称。
    2. <custom-bucket-class> 替换为在第 2 步中创建的 bucket 类的名称。

第 10 章 通过添加端点扩展多云对象网关性能

多云对象网关的性能可能因环境而异。在某些情况下,特定应用程序需要更快速的性能,可通过扩展 S3 端点来轻松解决,这是一个技术预览功能。

Multicloud Object Gateway 资源池是一组 NooBaa 守护进程容器,默认启用两种类型的服务:

  • 存储服务
  • S3 端点服务
重要

通过添加端点扩展多云对象网关性能是一项技术预览功能。技术预览功能不被红帽产品服务等级协议 (SLA) 支持,且可能在功能方面有缺陷。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

如需更多信息,请参阅技术预览功能支持范围

10.1. Multicloud 对象网关中的 S3 端点

S3 端点是每个多云对象网关默认提供服务,用于处理 Multicloud 对象网关中的繁重数据摘要。端点服务处理内联数据块、重复数据删除、压缩和加密,它接受来自多云对象网关的数据放置指令。

10.2. 使用存储节点扩展

先决条件

  • 在 OpenShift Container Platform 上运行 OpenShift Container Storage 集群,可访问多云对象网关。

Multicloud Object Gateway 中的存储节点是一个 NooBaa 守护进程容器,附加到一个或多个持久性卷,用于本地对象存储。NooBaa 守护进程可以在 Kubernetes 节点上部署。这可以通过创建一个由 StatefulSet pod 组成的 Kubernetes 池来完成。

流程

  1. 在 Multicloud Object Gateway 用户界面的 Overview 页面中,点 Add Storage Resources:

    MCG 添加存储资源按钮
  2. 在窗口中点击 Deploy Kubernetes Pool

    MCG 部署 kubernetes 池
  3. Create Pool 步骤中,为将来安装的节点创建目标池。

    MCG 部署 kubernetes 池创建池
  4. Configure 步骤中,配置请求的 pod 数以及每个 PV 的大小。对于每个新 pod,会创建一个 PV。

    MCG 部署 kubernetes 池配置
  5. Review 步骤中,您可以找到新池的详细信息,再选择要使用的部署方法:本地或外部部署。如果选择了本地部署,Kubernetes 节点将在集群内部署。如果选择了外部部署,您将获得 YAML 文件,供外部运行。
  6. 所有节点都会分配给您在第一步中选择的池,并可在 ResourcesStorage resourcesResource name 下找到:

    MCG 存储资源概述

第 11 章 自动扩展 MultiCloud Object Gateway 端点

当 MCG S3 服务上的负载增加或减少时,MultiCloud Object Gateway(MCG)端点的数量会自动扩展。{product-name-short} 集群使用一个活跃的 MCG 端点。每个 MCG 端点 pod 都默认配置有 1 个 CPU 和 2Gi 内存请求,其限值与请求匹配。当端点上的 CPU 负载在固定时间段内超过 80% 用量阈值时,部署第二个端点会降低第一个端点的负载。当两个端点的平均 CPU 负载在固定时间段内低于 80% 阈值时,会删除其中一个端点。此功能提高了 MCG 的性能和可服务性。

第 12 章 访问 RADOS 对象网关 S3 端点

用户可以直接访问 RADOS 对象网关 (RGW) 端点。

先决条件

  • 正在运行的 OpenShift Container Storage Platform

流程

  1. 运行 oc get service 命令以获取 RGW 服务名称。

    $ oc get service
    
    NAME                                               TYPE
    rook-ceph-rgw-ocs-storagecluster-cephobjectstore   ClusterIP
    
    CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    172.30.99.207    <none>        80/TCP     4d15h
  2. 运行 oc expose 命令,以公开 RGW 服务。

    $ oc expose svc/<RGW service name> --hostname=<route name>

    <RGW-service name> 替换为上一步中的 RGW 服务名称。

    <route name> 替换为您要为 RGW 服务创建的路由。

    例如:

    $ oc expose svc/rook-ceph-rgw-ocs-storagecluster-cephobjectstore --hostname=rook-ceph-rgw-ocs.ocp.host.example.com
  3. 运行 oc get route 命令,以确认 oc expose 成功并且存在 RGW 路由。

    $ oc get route
    
    NAME                                               HOST/PORT                                PATH
    rook-ceph-rgw-ocs-storagecluster-cephobjectstore   rook-ceph-rgw-ocsocp.host.example.com
    
    SERVICES                                           PORT         TERMINATION   WILDCARD
    rook-ceph-rgw-ocs-storagecluster-cephobjectstore   http         <none>

验证

  • 要验证 ENDPOINT,请运行以下命令:

    aws s3 --no-verify-ssl --endpoint <ENDPOINT> ls

    <ENDPOINT> 替换为您在上面的步骤 3 中的命令中获得的路由。

    例如:

    $ aws s3 --no-verify-ssl --endpoint http://rook-ceph-rgw-ocs.ocp.host.example.com ls
注意

要获取默认用户 ocs-storagecluster-cephobjectstoreuser 的访问密钥和 secret,请运行以下命令:

  • 访问密钥:

    $ oc get secret rook-ceph-object-user-ocs-storagecluster-cephobjectstore-ocs-storagecluster-cephobjectstoreuser -n openshift-storage -o yaml | grep -w "AccessKey:" | head -n1 | awk '{print $2}' | base64 --decode
  • secret 密钥:

    $ oc get secret rook-ceph-object-user-ocs-storagecluster-cephobjectstore-ocs-storagecluster-cephobjectstoreuser -n openshift-storage -o yaml | grep -w "SecretKey:" | head -n1 | awk '{print $2}' | base64 --decode