亚马逊AWS官方博客

在越来越敏捷的时代,使用 AWS 上的 OpenShift 容器存储管理混合存储

本文是一篇来自 Mayur Shetty 的客座博文,作者是 Red Hat 全球合作伙伴和联盟组织的高级解决方案架构师。

根据 2019 年 CNCF 调查,84% 的受调查客户在生产中拥有容器工作负载,这较 2018 年的 18% 有了大幅增长。推动这一增长的因素是客户对高效性和敏捷性的更高要求,以及需要在混合环境中运行以满足行业不断增长的本质和需求。该调查还显示,41% 的客户采用混合使用案例,相比 2019 年的 21% 有较大提升。此外,27% 的受调查客户正在使用日常发布周期。

随着更多客户采用这些流程,以一致的方式管理存储成为一个较大的挑战。

不同行业垂直市场的客户一直在使用 Red Hat OpenShift on Amazon Web Services (AWS) 来满足他们的混合和敏捷性需求。Red Hat 现在通过新的开源解决方案进一步为客户提供支持:OpenShift 容器存储 (OCS) 运算符

OpenShift 容器存储是与 OpenShift 集成并已针对 OpenShift 优化的持久软件定义存储。OpenShift 容器存储可在 OpenShift 所在的任何位置运行,非常适合具有混合使用案例和需要在不同环境中进行一致的实施与管理的客户。基于红帽 Ceph 存储 和 NooBaa Multi-Cloud Object Gateway (MCG) 技术,OpenShift 容器存储经过精心设计、测试,并符合要求可与 Red Hat OpenShift Container Platform on AWS 以及客户混合架构内的其他环境配合使用。

在本博文中,我们将介绍如何:

  • 在 OpenShift on AWS 中配置和部署容器化 Ceph 和 NooBaa。
  • 验证容器化 Ceph 和 NooBaa 的部署。
  • 使用 Multi-Cloud Object Gateway 创建一个 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用。

我们将使用 OpenShift 容器平台 (OCP) 4.x 和 OCS 运算符将 Ceph 和 Multi-Cloud-Gateway (MCG) 部署为 OCP 工作负载的持久性存储解决方案。部署完 OpenShift 4 后,请按照针对 AWS Installer-Provisioned Infrastructure (IPI) 的说明进行操作。

在这里,您将使用 OpenShift 容器平台 (OCP) 4.x 和 OCS 运算符将 Ceph 和 Multi-Cloud-Gateway (MCG) 部署为 OCP 工作负载的持久性存储解决方案。您可以使用此链接 OpenShift 4 部署 (http://try.openshift.com/) 部署 OpenShift 4,然后按照 AWS Installer-Provisioned Infrastructure (IPI) 的说明进行操作。

使用 OCS 运算符扩展 OCP 集群部署存储后端并添加三个新节点

随着容器和混合解决方案的生产使用量的增加,确认实施 OpenShift on AWS 可以利用多个可用区来满足弹性需求,这是个好主意。

首先,让我们验证 OCP 环境是否有三个主节点和三个工作线程节点,然后再将集群大小增加额外三个工作线程节点以用于 OCS 资源。OCP 节点的 NAME 将与示例输出中显示的不同。

oc get nodes

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-134-127.ec2.internal Ready master 23m v1.16.2
ip-10-0-137-130.ec2.internal Ready worker 14m v1.16.2
ip-10-0-144-238.ec2.internal Ready master 23m v1.16.2
ip-10-0-151-202.ec2.internal Ready worker 14m v1.16.2
ip-10-0-164-30.ec2.internal Ready master 23m v1.16.2
ip-10-0-174-79.ec2.internal Ready worker 14m v1.16.2

OpenShift 4 允许客户通过 MachineSets 以与云端相同的方式扩展集群。MachineSets 在 OpenShift 中提供 AWS 客户已经熟悉的最小值、最大值、所需值和扩展指标。

接下来,我们将使用 MachineSets 将另外三个 OCP 计算节点添加到集群中。

oc get machinesets -n openshift-machine-api | grep -v infra

这将向我们显示现有的 MachineSets,用于在集群中创建三个工作线程节点。每个 AWS 可用区都有一个 MachineSet(us-east-1a、us-east-1b、us-east-1c)。您的 MachineSet 的 NAME 需与以下值不同:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get machinesets -n openshift-machine-api | grep -v infra
NAME DESIRED CURRENT READY AVAILABLE AGE
mytest-nvnjt-worker-us-east-1a 1 1 1 1 27m
mytest-nvnjt-worker-us-east-1b 1 1 1 1 27m
mytest-nvnjt-worker-us-east-1c 1 1 1 1 27m
mytest-nvnjt-worker-us-east-1d 0 0 27m
mytest-nvnjt-worker-us-east-1e 0 0 27m
mytest-nvnjt-worker-us-east-1f 0 0 27m

确保执行下一步以查找和使用 CLUSTERID

CLUSTERID=$(oc get machineset -n openshift-machine-api -o jsonpath='{.items[0].metadata.labels.machine\.openshift\.io/cluster-api-cluster}')
echo $CLUSTERID
curl -s curl -s https://raw.githubusercontent.com/red-hat-storage/ocs-training/master/ocp4ocs4/cluster-workerocs.yaml | sed "s/CLUSTERID/$CLUSTERID/g" | oc apply -f -

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ curl -s https://raw.githubusercontent.com/red-hat-storage/ocs-training/master/ocp4ocs4/cluster-workerocs.yaml | sed "s/CLUSTERID/$CLUSTERID/g" | oc apply -f -
machineset.machine.openshift.io/mytest-nvnjt-workerocs-us-east-1a created
machineset.machine.openshift.io/mytest-nvnjt-workerocs-us-east-1b created
machineset.machine.openshift.io/mytest-nvnjt-workerocs-us-east-1c created

检查以确认已创建新机器:

oc get machines -n openshift-machine-api | egrep 'NAME|workerocs'

它们可能在一段时间内处于 pending 状态,因此重复上述命令,直到它们处于正在运行的 STATE。您的机器的 NAME 将与示例中所示的值不同。

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get machines -n openshift-machine-api | egrep 'NAME|workerocs'
NAME                                         PHASE          TYPE           REGION         ZONE           AGE
mytest-nvnjt-workerocs-us-east-1a-7sklp   Provisioned   m4.4xlarge   us-east-1   us-east-1a   2m6s
mytest-nvnjt-workerocs-us-east-1b-jpphq   Provisioned   m4.4xlarge   us-east-1   us-east-1b   2m5s
mytest-nvnjt-workerocs-us-east-1c-pclz7   Provisioned   m4.4xlarge   us-east-1   us-east-1c   2m5s
Mayurs-MacBook-Pro:4.3 mshetty$ oc get machines -n openshift-machine-api | egrep 'NAME|workerocs'
NAME                                         PHASE  TYPE           REGION         ZONE           AGE
mytest-nvnjt-workerocs-us-east-1a-7sklp   Running   m4.4xlarge   us-east-1   us-east-1a   3m46s
mytest-nvnjt-workerocs-us-east-1b-jpphq   Running   m4.4xlarge   us-east-1   us-east-1b   3m45s
mytest-nvnjt-workerocs-us-east-1c-pclz7   Running   m4.4xlarge   us-east-1   us-east-1c   3m45s

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

OCS 工作线程机器正在使用 Amazon Elastic Compute Cloud (Amazon EC2) 实例类型 m4.4xlargem4.4xlarge 实例类型遵循我们建议的 OCS 实例大小:16 vCPU 和 64GB RAM。

现在,我们要检查我们的新机器是否已添加到 OCP 集群中。

watch "oc get machinesets -n openshift-machine-api | egrep 'NAME|workerocs'"

此步骤可能需要超过 5 分钟时间。此命令的结果需要与以下示例所示结果类似,然后我们才能继续。所有新的 OCS 工作线程 MachineSets 都应该有一个整数(在本例中为 1),为列 READYAVAILABLE 下的所有行填充此值。MachineSets 的 NAME 将与示例中所示的值不同。

Every 2.0s: /Users/mshetty/AWS/OpenShift4/4.3/oc get machinesets -n openshift-machine-api | egrep 'NAME|workerocs'                                                                 Mayurs-MacBook-Pro: Fri Feb  7 10:53:45 2020
 
NAME                                 DESIRED   CURRENT   READY   AVAILABLE   AGE
mytest-nvnjt-workerocs-us-east-1a   1        1      1      1              6m21s
mytest-nvnjt-workerocs-us-east-1b   1        1      1      1              6m20s
mytest-nvnjt-workerocs-us-east-1c   1        1      1      1              6m20s

Ctrl+C 退出。

接下来,我们将检查我们是否有三个新的 OCP 工作线程节点。OCP 节点的 NAME 将与以下所示的值不同。

oc get nodes -l node-role.kubernetes.io/worker

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get nodes -l node-role.kubernetes.io/worker
NAME                          STATUS   ROLES AGE    VERSION
ip-10-0-137-130.ec2.internal   Ready worker   30m   v1.16.2
ip-10-0-140-7.ec2.internal    Ready  worker   4m22s   v1.16.2
ip-10-0-151-202.ec2.internal   Ready worker   30m   v1.16.2
ip-10-0-153-95.ec2.internal   Ready  worker   4m22s   v1.16.2
ip-10-0-169-227.ec2.internal   Ready worker   4m24s   v1.16.2
ip-10-0-174-79.ec2.internal   Ready  worker   30m   v1.16.2

安装 OCS 运算符

在本节中,您将使用工作线程 OCP 4 节点中的其中三个,使用 OperatorHub 中的 OCS 运算符部署 OCS 4。有关如何安装和设置 OpenShift 容器存储环境的 Red Hat 说明文档可能有助于对安装过程中遇到的问题进行故障排除。

先决条件

您必须创建名为openshift-storage 的命名空间,如下所示:

  1. 单击 OpenShift Web 控制台左窗格中的 Administration | Namespaces
  2. 单击 Create Namespace
  3. Create Namespace 对话框中,为 Name 输入 openshift-storage,为 Labels 输入 openshift.io/cluster-monitoring=true。获取控制面板需要此标签。
  4. Default Network Policy 选择 No Restrictions 选项。
  5. 单击 Create Namespace

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

现在,让我们使用 AWS 上的红帽 OpenShift 容器平台运算符中心安装 OpenShift 容器存储:

  1. 以用户 kubeadmin 的身份登录红帽 OpenShift 容器平台 Web 控制台。
  2. 单击 Operators | OperatorHub
  3. 从运算符列表中搜索 OpenShift 容器存储运算符并将其选中。
  4. 在 OpenShift 容器存储运算符页面上,单击 Install
    了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。
  5. 在 Create Operator Subscription 页面上,有 Installation ModeUpdate ChannelApproval Strategy 选项可用。
    了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

    • 对于 Installation Mode 选项,选择集群上的特定命名空间。
    • 从下拉菜单中选择 openshift-storage 命名空间。
    • Update Channel 选项已默认选择 stable-4.2 通道
    • 选择 Approval Strategy:如果希望 OCP 自动升级 OpenShift 容器存储,请选择 Automatic;如果要手动升级,请选择 Manual
  6. 单击 Subscribe

系统将显示 Installed Operators 页面,您可以看到运算符的状态。

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

屏幕截图显示,AWS S3 运算符已随着 OpenShift 器存储一并安装。

创建 OCS 服务

单击 OpenShift Container Storage Operator,转到 OCS 配置屏幕。

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

在 OCS 配置屏幕的顶部,将屏幕滚动到 Storage 集群,然后单击 Create OCS Cluster Services。如果没有看到 Create OCS Cluster Services,请刷新浏览器窗口。

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

从可用节点列表中选择至少三个工作线程节点,以便使用 OpenShift 容器存储服务。
如需选择 OCP 4 集群的适当工作线程节点,可以通过搜索节点标签 role=storage-node 来找到它们。

oc get nodes --show-labels | grep storage-node |cut -d' ' -f1

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get nodes --show-labels | grep storage-node |cut -d' ' -f1
ip-10-0-140-7.ec2.internal
ip-10-0-153-95.ec2.internal
ip-10-0-169-227.ec2.internal

从搜索结果中勾选三个工作线程节点,然后单击对话框下方的 Create 按钮。

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

Mayurs-MacBook-Pro:4.3 mshetty$ oc -n openshift-storage get pods
NAME                                         READY   STATUS                RESTARTS   AGE
aws-s3-provisioner-8d9478d4b-pmhpt           1/1    Running               0       4m52s
csi-cephfsplugin-2vr24                       0/3    ContainerCreating   0         36s
csi-cephfsplugin-96ckc                       0/3    ContainerCreating   0         36s
csi-cephfsplugin-9lrsw                       3/3    Running               0       36s
csi-cephfsplugin-d5qt9                       3/3    Running               0       36s
csi-cephfsplugin-provisioner-5cdcfcc86b-kk42x   4/4  Running               0       35s
csi-cephfsplugin-provisioner-5cdcfcc86b-vnvcs   4/4  Running               0       36s
csi-cephfsplugin-rbfc6                       3/3    Running               0       36s
csi-cephfsplugin-rsqfn                       0/3    ContainerCreating   0         35s
csi-rbdplugin-2cf68                          0/3    ContainerCreating   0         36s
csi-rbdplugin-4bmrp                          3/3    Running               0       36s
csi-rbdplugin-g97tn                          3/3    Running               0       36s
csi-rbdplugin-h5826                          0/3    ContainerCreating   0         36s
csi-rbdplugin-pm94b                          0/3    ContainerCreating   0         36s
csi-rbdplugin-provisioner-8fdc8f955-fmxxp    4/4    Running               0       36s
csi-rbdplugin-provisioner-8fdc8f955-lpktf    4/4    Running               0       36s
csi-rbdplugin-wsh5q                          3/3    Running               0       36s
noobaa-operator-64d88fdc77-zvd4m             1/1    Running               0       55m
ocs-operator-7f56b58d96-ttw76                0/1    Running               0       55m
rook-ceph-mon-a-canary-57cdf75945-7jqbk      0/1    ContainerCreating   0         16s
rook-ceph-mon-b-canary-7744574664-976qz      0/1    Pending               0       5s
rook-ceph-operator-c8785644-dqk6q            1/1    Running               0       55m
Mayurs-MacBook-Pro:4.3 mshetty$

我们可以在 OpenShift 容器存储节点或非 OpenShift 容器存储节点上创建应用程序容器并运行应用程序。但是,建议对这些节点应用“污染”,将其标记为仅供 OpenShift 容器存储使用,并且不要在这些节点上运行应用程序 Pod。由于“受污染”的 OpenShift 节点专供存储 Pod 使用,因此它们仅需要 OpenShift 容器存储订阅,而不需要 OpenShift 订阅。

要对节点应用“污染”,请使用以下命令:

Mayurs-MacBook-Pro:4.3 mshetty$ oc adm taint nodes ip-10-0-140-7.ec2.internal node.ocs.openshift.io/storage=true:NoSchedule
node/ip-10-0-140-7.ec2.internal tainted
Mayurs-MacBook-Pro:4.3 mshetty$ oc adm taint nodes ip-10-0-153-95.ec2.internal node.ocs.openshift.io/storage=true:NoSchedule
node/ip-10-0-153-95.ec2.internal tainted
Mayurs-MacBook-Pro:4.3 mshetty$ oc adm taint nodes ip-10-0-169-227.ec2.internal node.ocs.openshift.io/storage=true:NoSchedule
node/ip-10-0-169-227.ec2.internal tainted

了解存储控制面板

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

现在,您可以使用 OpenShift Web 控制台中包含的特定于 OCS 的控制面板检查存储集群的状态。为此,请单击导航栏中的 Home,在左侧菜单中选择 Dashboards,然后在内容页面顶部的导航栏中选择 Persistent Storage

如果一切正常,就可以使用在 OCS 4 安装期间创建的三个新存储类:ocs-storagecluster-ceph-rbdocs-storagecluster-cephfsopenshift-storage.noobaa.io。如需从 OpenShift Web 控制台中查看这三个存储类,请展开左侧导航栏中的 Storage 菜单,然后选择 Storage Classes。您也可以运行命令 oc -n openshift-storage get sc

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ oc -n openshift-storage get sc
NAME                          PROVISIONER                          AGE
gp2 (default)                 kubernetes.io/aws-ebs                161m
ocs-storagecluster-ceph-rbd   openshift-storage.rbd.csi.ceph.com   13m
ocs-storagecluster-cephfs     openshift-storage.cephfs.csi.ceph.com   13m
openshift-storage.noobaa.io   openshift-storage.noobaa.io/obc      8m33s

在继续操作之前,请确保集群中的三个存储类可用。

另外请注意,NooBaa Pod 使用了 ocs-storagecluster-ceph-rbd 存储类来创建 PVC 以便安装到其数据库容器。

使用 Multi-Cloud Object Gateway

现在,我们来使用 Multi-Cloud-Gateway (MCG) 进行检验。目前配置 MCG 的最佳方法是使用命令行界面 (CLI)。

如需安装 CLI,请参阅 Red Hat 文档中的 Install the NooBaa CLI client 部分。根据该文档,在 Mac 上的安装步骤为:

brew install noobaa/noobaa/noobaa

在未安装 Homebrew 的 Mac 上的安装步骤为:

curl -s https://api.github.com/repos/noobaa/noobaa-operator/releases/latest | grep "mac" | cut -d : -f 2,3 | tr -d \" | wget -qi - ; mv noobaa-mac-* noobaa ; chmod +x noobaa; sudo mv noobaa /usr/local/bin/

在 Linux 上的安装步骤为:

curl -s https://api.github.com/repos/noobaa/noobaa-operator/releases/latest | grep "linux" | cut -d : -f 2,3 | tr -d \" | wget -qi - ; mv noobaa-linux-* noobaa ; chmod +x noobaa; sudo mv noobaa /usr/bin/

使用 noobaa version 命令检查您的 NooBaa CLI 安装是否成功。

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ noobaa version
INFO[0000] CLI version: 2.0.9                        
INFO[0000] noobaa-image: noobaa/noobaa-core:5.2.11   
INFO[0000] operator-image: noobaa/noobaa-operator:2.0.9

检查 MCG 状态

您可以使用 NooBaa CLI 检查 MCG 状态。执行以下命令时,请确保您位于 openshift-storage 项目中:

noobaa status -n openshift-storage

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ noobaa status -n openshift-storage
INFO[0000] CLI version: 2.0.9 
INFO[0000] noobaa-image: noobaa/noobaa-core:5.2.11 
INFO[0000] operator-image: noobaa/noobaa-operator:2.0.9
INFO[0000] Namespace: openshift-storage 
INFO[0000] 
INFO[0000] CRD Status: 
INFO[0000] ✅ Exists: CustomResourceDefinition "noobaas.noobaa.io"
INFO[0000] ✅ Exists: CustomResourceDefinition "backingstores.noobaa.io"
INFO[0001] ✅ Exists: CustomResourceDefinition "bucketclasses.noobaa.io"
INFO[0001] ✅ Exists: CustomResourceDefinition "objectbucketclaims.objectbucket.io"
INFO[0001] ✅ Exists: CustomResourceDefinition "objectbuckets.objectbucket.io"
INFO[0001] 
INFO[0001] Operator Status: 
INFO[0001] ✅ Exists: Namespace "openshift-storage" 
INFO[0001] ✅ Exists: ServiceAccount "noobaa" 
INFO[0001] ✅ Exists: Role "ocs-operator.v4.2.1-5l6r4" 
INFO[0001] ✅ Exists: RoleBinding "ocs-operator.v4.2.1-5l6r4-noobaa-zx7zx"
INFO[0001] ✅ Exists: ClusterRole "ocs-operator.v4.2.1-cbqcd"
INFO[0001] ✅ Exists: ClusterRoleBinding "ocs-operator.v4.2.1-cbqcd-noobaa-7mwdn"
INFO[0001] ✅ Exists: Deployment "noobaa-operator" 
INFO[0001] 
INFO[0001] System Status: 
INFO[0002] ✅ Exists: NooBaa "noobaa" 
INFO[0002] ✅ Exists: StatefulSet "noobaa-core" 
INFO[0002] ✅ Exists: Service "noobaa-mgmt" 
INFO[0002] ✅ Exists: Service "s3" 
INFO[0002] ✅ Exists: Secret "noobaa-server" 
INFO[0002] ✅ Exists: Secret "noobaa-operator" 
INFO[0002] ✅ Exists: Secret "noobaa-admin" 
INFO[0002] ✅ Exists: StorageClass "openshift-storage.noobaa.io"
INFO[0002] ✅ Exists: BucketClass "noobaa-default-bucket-class"
INFO[0002] ✅ (Optional) Exists: BackingStore "noobaa-default-backing-store"
INFO[0002] ✅ (Optional) Exists: CredentialsRequest "noobaa-cloud-creds"
INFO[0002] ✅ (Optional) Exists: PrometheusRule "noobaa-prometheus-rules"
INFO[0002] ✅ (Optional) Exists: ServiceMonitor "noobaa-service-monitor"
INFO[0003] ✅ (Optional) Exists: Route "noobaa-mgmt" 
INFO[0003] ✅ (Optional) Exists: Route "s3" 
INFO[0003] ✅ Exists: PersistentVolumeClaim "db-noobaa-core-0"
INFO[0003] ✅ System Phase is "Ready" 
INFO[0003] ✅ Exists: "noobaa-admin" 

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

ExternalDNS : [https://noobaa-mgmt-openshift-storage.apps.mytest.ocp4-test-mshetty.com https://ac3b91407d9cf47dab0e6b905bdf3373-1488350814.us-east-1.elb.amazonaws.com:443]
ExternalIP : []
NodePorts : [https://10.0.140.7:32292]
InternalDNS : [https://noobaa-mgmt.openshift-storage.svc:443]
InternalIP : [https://172.30.229.82:443]
PodPorts : [https://10.131.2.14:8443]

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

email : admin@noobaa.io
password : YP9xxxxxxxxAX2JXGRw==

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

ExternalDNS : [https://s3-openshift-storage.apps.mytest.ocp4-test-mshetty.com https://a9ab4c2a18ac943fc99f5bc38214c7e1-2111878007.us-east-1.elb.amazonaws.com:443]
ExternalIP : []
NodePorts : [https://10.0.140.7:30347]
InternalDNS : [https://s3.openshift-storage.svc:443]
InternalIP : [https://172.30.60.121:443]
PodPorts : [https://10.131.2.14:6443]

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

AWS_ACCESS_KEY_ID : Rg70xxxxxxxxxxx8G0Pl
AWS_SECRET_ACCESS_KEY : fBnxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxRkp7Y

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

NAME TYPE TARGET-BUCKET PHASE AGE
noobaa-default-backing-store aws-s3 noobaa-backing-store-edb0aa52-1c81-41b5-80da-c20f22227bf2 Ready 35m19s

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

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

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

No OBC's found.

Mayurs-MacBook-Pro:4.3 mshetty$

NooBaa CLI 将首先检查环境,然后打印关于环境的所有信息。除了 MCG 的状态外,第二个最有趣的信息是可用的 S3 地址,我们可以使用这些地址连接到 MCG 存储桶。我们可以选择使用外部 DNS(这会产生 DNS 流量费用),也可以在 OpenShift 集群内部路由。

我们可以使用“Object Storage”控制面板概要了解 MCG 的基本状态。为此,请登录 OpenShift Web 控制台,单击 Home,然后选择 Dashboards。在主视图中,选择顶部导航栏中的 Object Service。此控制面板不提供 S3 终端节点的连接信息,但提供有关 S3 后端使用情况的图表和运行时信息。

创建对象存储桶声明

对象存储桶声明 (OBC) 可用于为工作负载请求与 S3 兼容的存储桶后端。创建 OBC 时,我们会获得一个 ConfigMap (CM) 和一个 Secret,其中包含应用程序使用对象存储服务所需的全部信息。

创建 OBC 与使用 NooBaa CLI 一样简单:noobaa obc create test21obc -n openshift-storage

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ noobaa obc create test21obc -n openshift-storage
INFO[0000] ✅ Created: ObjectBucketClaim "test21obc" 
INFO[0000] 
INFO[0000] NOTE: 
INFO[0000] - This command has finished applying changes to the cluster.
INFO[0000] - From now on, it only loops and reads the status, to monitor the operator work.
INFO[0000] - You may Ctrl-C at any time to stop the loop and watch it manually.
INFO[0000] 
INFO[0000] OBC Wait Ready: 
INFO[0000] ⏳ OBC "test21obc" Phase is "Pending" 
INFO[0004] ✅ OBC "test21obc" Phase is Bound 
INFO[0004] 
INFO[0004] 
INFO[0004] ✅ Exists: ObjectBucketClaim "test21obc" 
INFO[0004] ✅ Exists: ObjectBucket "obc-openshift-storage-test21obc"
INFO[0004] ✅ Exists: ConfigMap "test21obc" 
INFO[0004] ✅ Exists: Secret "test21obc" 
INFO[0004] ✅ Exists: StorageClass "openshift-storage.noobaa.io"
INFO[0004] ✅ Exists: BucketClass "noobaa-default-bucket-class"
INFO[0004] ✅ Exists: NooBaa "noobaa" 
INFO[0004] ✅ Exists: Service "noobaa-mgmt" 
INFO[0004] ✅ Exists: Secret "noobaa-operator" 
INFO[0005] ✈️ RPC: bucket.read_bucket() Request: {Name:test21obc-9493d838-1fd5-4b0a-8984-faa86b25921f}
INFO[0005] ✅ RPC: bucket.read_bucket() Response OK: took 14.8ms


ObjectBucketClaim info:
  Phase               : Bound
  ObjectBucketClaim   : kubectl get -n openshift-storage objectbucketclaim test21obc
  ConfigMap           : kubectl get -n openshift-storage configmap test21obc
  Secret              : kubectl get -n openshift-storage secret test21obc
  ObjectBucket        : kubectl get objectbucket obc-openshift-storage-test21obc
  StorageClass        : kubectl get storageclass openshift-storage.noobaa.io
  BucketClass         : kubectl get -n openshift-storage bucketclass noobaa-default-bucket-class
 
Connection info:
  BUCKET_HOST         : 10.0.140.7
  BUCKET_NAME         : test21obc-9493d838-1fd5-4b0a-8984-faa86b25921f
  BUCKET_PORT         : 30347
  AWS_ACCESS_KEY_ID   : C82xxxxxxxxxxxxxxxx6X
  AWS_SECRET_ACCESS_KEY  : 5tZKxxxxxxxxxxxxxxxxxxxxxDbdkStz
 
Shell commands:
  AWS S3 Alias        : alias s3='AWS_ACCESS_KEY_ID=C82xxxxxxxxxxxxxxxx6X AWS_SECRET_ACCESS_KEY=5tZKxxxxxxxxxxxxxxxxxxxxxDbdkStz aws s3 --no-verify-ssl --endpoint-url https://10.0.140.7:30347'
 
Bucket status:
  Name                : test21obc-9493d838-1fd5-4b0a-8984-faa86b25921f
  Type                : REGULAR
  Mode                : OPTIMAL
  ResiliencyStatus    : OPTIMAL
  QuotaStatus         : QUOTA_NOT_SET
  Num Objects         : 0
  Data Size           : 0.000 B
  Data Size Reduced   : 0.000 B
  Data Space Avail    : 1.000 PB
 

Mayurs-MacBook-Pro:4.3 mshetty$

NooBaa CLI 已在 NooBaa 中创建了必要的配置,并已告知 OpenShift 有关此新 OBC 的信息:

oc get obc -n openshift-storage

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get obc -n openshift-storage
NAME           AGE
test21obc   2m8s
oc get obc test21obc -o yaml -n openshift-storage

示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get obc test21obc -o yaml -n openshift-storage
apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:
  creationTimestamp: "2020-02-07T21:36:10Z"
  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: "84522"
  selfLink: /apis/objectbucket.io/v1alpha1/namespaces/openshift-storage/objectbucketclaims/test21obc
  uid: 133ab2c0-6fa0-458d-a5fd-60087a3ac18f
spec:
  ObjectBucketName: obc-openshift-storage-test21obc
  bucketName: test21obc-9493d838-1fd5-4b0a-8984-faa86b25921f
  generateBucketName: test21obc
  storageClassName: openshift-storage.noobaa.io
status:
  phase: Bound
Mayurs-MacBook-Pro:4.3 mshetty$

现在,在 openshift-storage 命名空间中,可以找到使用此 OBC 的 ConfigMapSecretConfigMapSecret 的名称与此 OBC 相同:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get -n openshift-storage secret test21obc -o yaml
apiVersion: v1
data:
  AWS_ACCESS_KEY_ID: QzgydxxxxxxxxxxxxxxxxxmNlg=
  AWS_SECRET_ACCESS_KEY: NXRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxka1N0eg==
kind: Secret
metadata:
  creationTimestamp: "2020-02-07T21:36:10Z"
  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: 133ab2c0-6fa0-458d-a5fd-60087a3ac18f
  resourceVersion: "84517"
  selfLink: /api/v1/namespaces/openshift-storage/secrets/test21obc
  uid: 45dfb1c1-1ef9-4c47-b6ea-968ddc13dc7f
type: Opaque
**Mayurs-MacBook-Pro:4.3 mshetty$ oc get -n openshift-storage cm test21obc -o yaml**
 
apiVersion: v1
data:
  BUCKET_HOST: 10.0.140.7
  BUCKET_NAME: test21obc-9493d838-1fd5-4b0a-8984-faa86b25921f
  BUCKET_PORT: "30347"
  BUCKET_REGION: ""
  BUCKET_SUBREGION: ""
kind: ConfigMap
metadata:
  creationTimestamp: "2020-02-07T21:36:10Z"
  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: 133ab2c0-6fa0-458d-a5fd-60087a3ac18f
  resourceVersion: "84518"
  selfLink: /api/v1/namespaces/openshift-storage/configmaps/test21obc
  uid: 377e26bc-4216-4fb8-89b3-6c4f4557fc53

Secret 提供了 S3 访问凭证,而 ConfigMap 中包含应用程序的 S3 终端节点信息。

在容器中使用 OBC

在这部分中,我们将了解如何使用 YAML 文件创建 OBC,并在示例应用程序中使用提供的 S3 配置。

为了部署 OBC 和示例应用程序,我们使用以下 YAML 文件:

apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:
  name: obc-test
spec:
  generateBucketName: "obc-test-noobaa"
  storageClassName: openshift-storage.noobaa.io
---
apiVersion: batch/v1
kind: Job
metadata:
  name: obc-test
  labels:
    app: obc-test
spec:
  template:
    metadata:
      labels:
        app: obc-test
    spec:
      restartPolicy: OnFailure
      containers:
        - image: mesosphere/aws-cli:latest
          command: ["sh"]
          args:
            - '-c'
            - 'set -x && s3cmd --no-check-certificate --host $BUCKET_HOST:$BUCKET_PORT --host-bucket $BUCKET_HOST:$BUCKET_PORT du'
          name: obc-test
          env:
            - name: BUCKET_NAME
              valueFrom:
                configMapKeyRef:
                  name: obc-test
                  key: BUCKET_NAME
            - name: BUCKET_HOST
              valueFrom:
                configMapKeyRef:
                  name: obc-test
                  key: BUCKET_HOST
            - name: BUCKET_PORT
              valueFrom:
                configMapKeyRef:
                  name: obc-test
                  key: BUCKET_PORT
            - name: AWS_DEFAULT_REGION
              valueFrom:
                configMapKeyRef:
                  name: obc-test
                  key: BUCKET_REGION
            - name: AWS_ACCESS_KEY_ID
              valueFrom:
                secretKeyRef:
                  name: obc-test
                  key: AWS_ACCESS_KEY_ID
            - name: AWS_SECRET_ACCESS_KEY
              valueFrom:
                secretKeyRef:
                  name: obc-test
                  key: AWS_SECRET_ACCESS_KEY

第一部分创建了一个 OBC,后者将创建与此 OBC (obc-test) 名称相同的 ConfigMapSecret。该文件的第二部分( 后面的部分)创建了一个 Job,用于部署预装有 s3cmd 的容器。它将使用相应的命令行参数执行 s3cmd,然后退出。在本例中,s3cmd 将报告 S3 终端节点的当前磁盘使用量,然后退出,这时 Pod 的状态将被标记为 Completed。我们来试一下。

部署以下清单:

Mayurs-MacBook-Pro:4.3 mshetty$ curl -s https://raw.githubusercontent.com/red-hat-storage/ocs-training/master/ocp4ocs4/obc_app_example.yaml | oc apply -f -
namespace/obc-test created
objectbucketclaim.objectbucket.io/obc-test created
job.batch/obc-test created

这之后,如下所示,可以看到 Pod 已创建并运行,最后标记为 Completed。请注意,您的 Pod 名称会与此不同。示例输出:

Mayurs-MacBook-Pro:4.3 mshetty$ oc get pods -n obc-test -l app=obc-test
NAME           READY   STATUS        RESTARTS   AGE
obc-test-j7pvk   0/1  Completed   0         69s

然后,可以使用下面的命令查看 obc-test Pod 日志,了解 S3 存储桶的内容。在本例中,该存储桶中没有对象。

通过 oc 命令获取 obc-test 日志的操作无法正常执行,但可以使用 kubectl 命令来执行。

kubectl logs -n obc-test -l app=obc-test

示例输出:

+ s3cmd --no-check-certificate --host 10.0.140.19:30052 --host-bucket 10.0.140.19:30052 du
0        0 objects s3://obc-test-noobaa-784461cb-1e77-4ccf-b62d-007a6ae3ef15/
--------
0        Total

此输出表明我们可以访问一个当前为空的存储桶。这证明来自 OBC 的访问凭证可以正常使用,并且已在容器中正确设置。

大多数应用程序支持在本地读取 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量,但您必须知道如何为每个应用程序设置主机名和存储桶名称。在本例中,我们为此使用了 s3cmd 的 CLI 标志。

了解如何在 OpenShift on AWS 中配置和部署容器化的 Ceph 和 NooBaa。验证容器化的 Ceph 和 NooBaa 的部署。使用 Multi-Cloud Object Gateway 创建由 Amazon Simple Storage Service (Amazon S3) 支持的存储并在应用程序中使用该存储。

小结

在本文中,我们学习了如何验证 OpenShift 集群的就绪情况,以及如何为在 AWS 上运行的混合工作负载部署和配置 OpenShift 容器存储。OpenShift 容器存储运算符是一个开源项目,我们鼓励大家通过提出问题并通过 GitHub 的 Pull 请求积极参与。

Mayur Shetty

Mayur Shetty

Mayur Shetty 是红帽全球合作伙伴和联盟组织的高级解决方案架构师。他已在红帽就职四年,并且是 OpenStack Tiger 团队的成员。Mayur 曾在 Seagate Technology 担任高级解决方案架构师,负责使用 OpenStack Swift、Ceph 和其他对象存储软件提供解决方案。Mayur 还领导了 IBM 的 ISV 工程,围绕 Oracle 数据库、IBM 系统和存储创建解决方案。他已经在该行业耕耘了近 20 年,从事过 Sun Cluster 软件的工作,并在 Sun Microsystems 的 ISV 工程团队工作过。

本博文中的内容和意见属于第三方作者,AWS 不对本博文的内容或准确性负责。