IBM Cloud Docs
在 VPC 集群上部署 OpenShift Data Foundation

在 VPC 集群上部署 OpenShift Data Foundation

OpenShift Data Foundation 是高可用性存储解决方案,可用于管理 Red Hat® OpenShift® on IBM Cloud® 集群中容器化工作负载的持久存储。

在 IBM Cloud 集群上不支持从 OperatorHub 安装 OpenShift Data Foundation。 要安装 ODF,请完成以下步骤以部署集群附加组件。

最低必需许可权
Administrator 平台访问角色
Manager IBM Cloud Kubernetes Service中集群的服务访问角色。

ODF支持仅限私有的VPC集群,集群版本为 4.16.23_1546_openshift,适用于 CoreOS 工作者,4.16.21_1544_openshift 适用于RHEL工作者。

先决条件

  • 安装 或更新 CLI。
  • 创建至少具有 3 个工作程序节点的 VPC 集群
    • 为了实现高可用性,请在三个专区中创建一个集群,每个专区至少有一个工作程序节点。
    • 每个工作程序节点必须至少具有 16 个 CPU 和 64 GB RAM。 对于早于 4.16 的集群版本,请确保每个子网都连接了一个公共网关。
    • 注意:您可以在3个工作节点上部署 OpenShift Data Foundation,这些节点有16个CPU和32GB内存,但您必须对工作节点进行污染,使其只能运行ODF Pod。 使用此设置时,无法在 ODF 节点上运行任何其他应用程序工作负载或系统 pod。

可选:禁用默认运算符

私有集群:在私有集群中,您必须手动禁用 openshift-marketplace 使用以下命令使ODF正常工作。

oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'

可选: 设置 IBM Cloud Object Storage 服务实例

完成以下步骤以创建可用作 ODF 部署中的缺省支持存储的 IBM Cloud Object Storage 实例。 如果不想设置 IBM Cloud Object Storage,那么可以跳过此步骤并 安装附加组件

如果要将 IBM Cloud Object Storage 设置为存储集群中的缺省后备存储器,请创建 IBM Cloud Object Storage的实例。 然后,创建一组 HMAC 凭证和使用 Object Storage HMAC 凭证的 Kubernetes 私钥。 如果在安装期间未指定 IBM Cloud Object Storage 凭证,那么将使用集群中的 PV 来创建存储集群中的缺省支持存储。 您可以在部署 ODF 后设置其他支持库,但无法更改缺省支持库。

访问 Red Hat OpenShift 集群

  1. 在集群中创建 openshift-storage 名称空间。 驱动程序 pod 将部署到此名称空间。 复制以下 YAML 并将其另存为本地计算机上的 os-namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        openshift.io/cluster-monitoring: "true"
      name: openshift-storage
    
  2. 使用您保存的 YAML 文件创建 openshift-storage 名称空间。
    oc create -f os-namespace.yaml
    
  3. 确认命名空间已创建。
    oc get namespaces | grep storage
    
  4. 创建 IBM Cloud Object Storage 服务实例。
    ibmcloud resource service-instance-create noobaa-store cloud-object-storage standard global
    
  5. 创建 HMAC 凭证。 记下您的凭证。
    ibmcloud resource service-key-create cos-cred-rw Writer --instance-name noobaa-store --parameters '{"HMAC": true}'
    
  6. 在使用 Object Storage HMAC 凭证的 openshift-storage 名称空间中创建名为 ibm-cloud-cos-creds 的 Kubernetes 私钥。 运行该命令时,请指定 Object Storage HMAC 访问密钥标识和私钥访问密钥。 请注意,您的私钥必须命名为 ibm-cloud-cos-creds
    oc -n 'openshift-storage' create secret generic 'ibm-cloud-cos-creds' --type=Opaque --from-literal=IBM_COS_ACCESS_KEY_ID=<access_key_id> --from-literal=IBM_COS_SECRET_ACCESS_KEY=<secret_access_key>
    
  7. 确认已创建秘密。
    oc get secrets -A | grep cos
    

可选: 使用 Hyper Protect Crypto Services 或 Key Protect 设置加密

如果要设置加密,请创建 Hyper Protect Crypto Services 或 Key Protect的实例。 然后,创建根密钥以及使用 Hyper Protect Crypto Services 或 Key Protect 凭证的 Kubernetes 私钥。

Hyper Protect Crypto Services 或 Key Protect 的 API 密钥必须具有以下最低必需许可权:
Reader
Reader Plus
如果要使用集群范围的加密和存储类加密,那么 API 密钥必须具有以下必需许可权:
Reader
Reader Plus
Writer
  1. 创建 Hyper Protect Crypto ServicesKey Protect 服务实例。

  2. 创建根密钥。

  3. 创建实例和根密钥后,请记下 Hyper Protect Crypto Services 或 Key Protect 实例名称,实例标识,根密钥标识和公共端点。

  4. 创建允许访问 Hyper Protect Crypto Services 和 Red Hat OpenShift on IBM Cloud 或 Key Protect 和 Red Hat OpenShift on IBM Cloud的 服务标识API 密钥访问策略。 记下您创建的 API。

  5. 专用集群: 创建允许访问 KMS 实例的虚拟专用端点网关。 确保至少将 1 IP 地址从 VPC 中的每个子网绑定到 VPE。

访问 Red Hat OpenShift 集群

  1. 列出名称空间以确定您是否具有 openshift-storage 名称空间。 如果您没有 openshift-storage 名称空间,请创建该名称空间。
    oc get namespaces | grep openshift-storage
    
    1. 在集群中创建 openshift-storage 名称空间。 驱动程序 pod 将部署到此名称空间。 复制以下 YAML 并将其另存为本地计算机上的 os-namespace.yaml
      apiVersion: v1
      kind: Namespace
      metadata:
        labels:
          openshift.io/cluster-monitoring: "true"
        name: openshift-storage
      
    2. 使用您保存的 YAML 文件创建 openshift-storage 名称空间。
      oc create -f os-namespace.yaml
      
    3. 确认命名空间已创建。
      oc get namespaces | grep storage
      
  2. 对根密钥的标识和创建到 base64的服务标识的 API 密钥进行编码。
    printf "ROOT-KEY-ID" | base64
    
    printf "SERVICE-ID-API-KEY" | base64
    
  3. 在使用 Hyper Protect Crypto Services 凭证的 openshift-storage 名称空间中创建 Kubernetes 私钥。
    1. 将以下私钥另存为名为 ibm-hpcs-secret.yaml 的 YAML 文件。
      apiVersion: v1
      data:
        IBM_KP_CUSTOMER_ROOT_KEY: AaAAAaZAAAAy11AAAyAAkaAaQtAAk0AAA2AzY5AjYaaa67aa # your base64 encoded root key ID
        IBM_KP_SERVICE_API_KEY: AAAaaajAAAAAncmAAaaaaAAAAdAAId1AtVjBJRU1aAAaAeTh1aEw=AaaaA # your base64 encoded API
      kind: Secret
      metadata:
        name: ibm-hpcs-secret
        namespace: openshift-storage
      type: Opaque
      
    2. 在集群中创建私钥。
      oc apply -f ibm-hpcs-secret.yaml
      
  4. 确认已创建秘密。
    oc get secrets -A | grep ibm-hpcs-secret
    

从控制台安装 OpenShift Data Foundation 附加组件

要在集群中安装 ODF,请完成以下步骤。

在启用该附加组件之前,请查看 更改日志 以获取最新版本信息。 此外,请 查看参数参考 以了解安装选项。

  1. 控制台选择要安装附加组件的仪表盘。
  2. 在 OpenShift 数据基础卡上,点击“安装”。 “安装ODF” 面板随即打开。
  3. 安装 ODF 面板中,输入要用于 ODF 部署的配置参数。
计费类型
基本型高级型作为您的计费计划。 有关计费类型的更多信息,请参阅 功能部件支持(按计费类型)
存储类
输入要使用的存储类别。
  • 对于使用虚拟机的 VPC 群集,请选择远程调配,以便使用 Block Storage for VPC 为 ODF 动态调配卷。
  • 对于使用 Bare Metal Servers for VPC 工作节点的 VPC 群集,请选择本地存储。 如果要自动发现工作节点上的可用存储设备并在 ODF 中使用它们,请选择本地磁盘发现
OSD 存储类名
输入要用于配置存储卷的存储类名称。
  • 对于具有 Bare Metal Servers for VPC 工作节点的 VPC 群集,请选择 localblock
  • 对于多区群集,请使用 VolumeBindingMode 的存储类 WaitForFirstConsumer
  • 有关存储类的列表,请参阅《 存储类参考 》。
OSD pod 大小
输入要配置的卷的大小。 至少输入 512Gi。
工作程序节点
输入要部署 ODF 的工作节点的节点名称。 必须至少输入 3 个工作程序节点名。 要查找节点名称,请在群集中运行 oc get nodes 命令。 Node 名称必须以逗号分隔,名称之间不得有空格。 例如:10.240.0.24,10.240.0.26,10.240.0.25。 如果要在所有工作节点上部署 ODF,请将此字段留空。
需要的 OSD 磁盘数
输入要在每个工作节点上配置的 OSD 磁盘(应用程序存储)的数量。
启用集群加密
如果要加密 ODF 系统 pod 使用的 OSD 卷(群集范围加密),请选择此选项。
启用卷加密
如果要为应用程序卷(应用程序存储)启用加密,请选择此选项。
  • 实例名称 字段中,输入 Hyper Protect Crypto Services 或 Key Protect 实例的唯一名称。
  • 实例类型 字段中,输入加密实例的类型。
  • 实例标识 字段中,输入 Hyper Protect Crypto Services 或 Key Protect 实例标识。 例如: d11a1a43-aa0a-40a3-aaa9-5aaa63147aaa
  • 私钥名称 字段中,输入使用 Hyper Protect Crypto Services 或 Key Protect 凭证创建的私钥的名称。 例如: ibm-hpcs-secret
  • URL 中,输入您的 Hyper Protect Crypto Services 或 Key Protect 实例的公共端点。 例如: https://api.eu-gb.hs-crypto.cloud.ibm.com:8389
  • URL 字段中输入 https://iam.cloud.ibm.com/identity/token
  1. 输入要使用的参数后,单击 安装

  2. 等待几分钟,等待附加组件部署完成。 部署完成后,附加组件状态为 Normal - Addon Ready

  3. 验证安装。 访问 Red Hat OpenShift 集群

  4. 运行以下命令以验证 ODF pod 是否正在运行。

    oc get pods -n openshift-storage
    
后续步骤
部署使用 ODF 的应用程序

从 CLI 安装附加组件

您可以使用 ibmcloud oc cluster addon enable 命令 来安装附加组件。

  1. 查看 VPC 参数参考。 启用附加组件时,可以通过为要覆盖的每个参数指定 --param "key=value" 选项来覆盖缺省值。

  2. 访问 Red Hat OpenShift 集群

  3. 列出 openshift-data-foundation 附加组件版本。 记下缺省版本并确定要安装的版本。

    ibmcloud ks cluster addon versions
    
  4. 在启用该附加组件之前,请查看 更改日志 以获取最新版本信息。 请注意,附加组件支持 n+1 集群版本。 例如,您可以将附加组件版本 4.10.0 部署到 OCP 4.94.11 集群。 如果您具有非缺省集群版本,那么在启用附加组件时必须指定 --version 选项。

  5. 查看附加组件选项。

    ibmcloud oc cluster addon options --addon openshift-data-foundation --version 4.15.0
    

    为了获得最佳性能,建议选择 resourceProfile 选项,指定为 performance。 该选项可根据部署期间可用资源的情况帮助提高性能水平。 如需了解有关 resourceProfile 选项的更多信息,请参阅 Red Hat OpenShift中的 性能配置文件

    4.15.0附加选项示例

    Add-on Options
    Option                            Default Value
    osdStorageClassName               ibmc-vpc-block-metro-10iops-tier
    ocsUpgrade                        false
    billingType                       advanced
    autoDiscoverDevices               false
    hpcsBaseUrl                       <Please provide the KMS Base (public) URL>
    taintNodes                        false
    enableNFS                         false
    resourceProfile                   performance
    useCephRBDAsDefaultStorageClass   false
    clusterEncryption                 false
    hpcsEncryption                    false
    hpcsSecretName                    <Please provide the KMS secret name>
    encryptionInTransit               false
    disableNoobaaLB                   false
    osdSize                           512Gi
    numOfOsd                          1
    ignoreNoobaa                      true
    addSingleReplicaPool              false
    prepareForDisasterRecovery        false
    workerPool                        -
    odfDeploy                         true
    osdDevicePaths                    <Please provide IDs of the disks to be used for OSD pods if using local disks or standard classic cluster>
    workerNodes                       all
    hpcsServiceName                   <Please provide the KMS Service instance name>
    hpcsInstanceId                    <Please provide the KMS Service instance ID>
    hpcsTokenUrl                      <Please provide the KMS token URL>
    
  6. 启用 openshift-data-foundation 附加组件。 如果要覆盖任何缺省参数,请为要覆盖的每个参数指定 --param "key=value" 选项。 如果您不想在启用附加组件时创建存储集群,那么可以先启用附加组件,然后通过创建 CRD 来创建存储集群。

    示例命令:部署附加版本 4.10,使用默认存储集群设置、performance 资源配置文件,并启用 Hyper Protect Crypto Services 加密。

    ibmcloud oc cluster addon enable openshift-data-foundation -c <cluster-name> --version 4.15.0 --param "odfDeploy=true" --param "resourceProfile=performance" --param "hpcsTokenUrl=https://iam.cloud.ibm.com/identity/token" --param "hpcsEncryption=true" --param "hpcsBaseUrl=<hpcs-instance-public-endpoint>" --param "hpcsInstanceId=<hpcs-instance-id>" --param "hpcsServiceName=<hpcs-instance-name>" --param "hpcsSecretName=<hpcs-secret-name>"
    

    仅用于部署 ODF 附加组件的示例命令。

    ibmcloud oc cluster addon enable openshift-data-foundation -c <cluster_name> --version <version> --param "odfDeploy=false"
    

    用于部署 ODF 和使用缺省配置参数创建存储集群的示例命令。

    ibmcloud oc cluster addon enable openshift-data-foundation -c <cluster_name> --version <version>
    

    用于在覆盖 osdSize 参数时部署 ODF 和创建存储集群的示例命令。

    ibmcloud oc cluster addon enable openshift-data-foundation -c <cluster_name> --version <version> --param "osdSize=500Gi"
    
  7. 验证附加组件是否处于 Ready 状态。

    oc get storagecluster -n openshift-storage
    

    示例输出:

    NAME                 AGE   PHASE   EXTERNAL   CREATED AT             VERSION
    ocs-storagecluster   53m   Ready              2023-03-10T12:20:52Z   4.11.0
    
  8. 验证 ibm-ocs-operator-controller-manager-***** pod 是否正在 kube-system 名称空间中运行。

    oc get pods -A | grep ibm-ocs-operator-controller-manager
    
  9. 如果在 odfDeploy 设置为 false 的情况下启用了附加组件,请遵循 创建 ODF 定制资源 的步骤。

从 Terraform 安装附加组件

  1. 创建 Terraform 提供程序文件。 将文件保存在 Terraform 目录中。 有关更多信息,请参阅 Terraform IBM Cloud Provider 文档

    Terraform 提供程序文件示例。

    terraform {
    required_providers {
        ibm = {
        source = "IBM-Cloud/ibm"
        version = "1.53.0"
        }
    }
    }
    
    provider "ibm" {
    region = "us-south"
    ibmcloud_api_key = "<api-key>"
    }
    
  2. 为 ODF 附加组件创建 Terraform 配置文件。 将文件保存在 Terraform 目录中。

    示例配置文件。

    ibmcloud_api_key = "" # Enter your API Key
    cluster = "" # Enter the Cluster ID
    region = "us-south" # Enter the region
    
    # For add-on deployment
    odfVersion = "4.12.0"
    
    # For CRD Creation and Management
    autoDiscoverDevices = "false"
    billingType = "advanced"
    clusterEncryption = "false"
    hpcsBaseUrl = null
    hpcsEncryption = "false"
    hpcsInstanceId = null
    hpcsSecretName = null
    hpcsServiceName = null
    hpcsTokenUrl = null
    ignoreNoobaa = "false"
    numOfOsd = "1"
    ocsUpgrade = "false"
    osdDevicePaths = null
    osdSize = "250Gi"
    osdStorageClassName = "ibmc-vpc-block-metro-10iops-tier"
    workerNodes = null
    
  3. 在 CLI 中,浏览到 Terraform 目录。

    cd <terraform_directory>
    
  4. 运行命令以初始化和规划 Terraform 操作。 请查看计划输出以确保执行正确的操作。

    terraform init
    
    terraform plan
    
  5. 应用 Terraform 文件以创建集群。 然后,浏览到 IBM Cloud 控制台以检查集群是否正在供应。

    terraform apply
    

创建 ODF 定制资源

要通过对存储卷使用动态供应在 VPC 集群中创建 ODF 存储集群,可以创建定制资源以指定存储设备详细信息。

如果要使用 IBM Cloud Object Storage 服务实例作为缺省支持存储,请确保 创建了服务实例,并在集群中创建了 Kubernetes 私钥。 在集群中创建 ODF CRD 时,ODF 会查找名为 ibm-cloud-cos-creds 的私钥,以设置使用 Object Storage HMAC 凭证的缺省支持存储。

  1. 创建名为 OcsCluster 的定制资源定义。 将下列其中一个定制资源定义文件保存在本地计算机上,并对其进行编辑以包含先前创建的存储类的名称作为 monStorageClassNameosdStorageClassName 参数。 有关 OcsCluster 参数的更多信息,请参阅 参数参考

    用于在 4.8 集群上的所有工作程序节点上安装 ODF 的定制资源定义示例。

    apiVersion: ocs.ibm.io/v1
    kind: OcsCluster
    metadata:
      name: ocscluster-vpc # Kubernetes resource names can't contain capital letters or special characters. Enter a name for your resource that uses only lowercase letters, numbers, `-` or `.`
    spec:
      osdStorageClassName: <osdStorageClassName> # Specify an ODF storage class with a waitForFirstConsumer volume binding mode
      osdSize: <osdSize> # The OSD size is the total storage capacity of your OCS storage cluster. Use at least 250Gi OSDs for production workloads.
      numOfOsd: 1
      billingType: advanced
      ocsUpgrade: false
    

    仅在 4.8 集群上的指定工作程序节点上安装 ODF 的定制资源定义示例。

    apiVersion: ocs.ibm.io/v1
    kind: OcsCluster
    metadata:
      name: ocscluster-vpc # Kubernetes resource names can't contain capital letters or special characters. Enter a name for your resource that uses only lowercase letters, numbers, `-` or `.`
    spec:
      osdStorageClassName: <osdStorageClassName> # Specify an ODF storage class with a waitForFirstConsumer volume binding mode
      osdSize: <osdSize> # The OSD size is the total storage capacity of your OCS storage cluster. Use at least 250Gi OSDs for production workloads.
      numOfOsd: 1
      billingType: advanced
      ocsUpgrade: false
      workerNodes: # Specify the private IP addresses of the worker nodes where you want to install OCS.
        - <workerNodes> # To get a list worker nodes, run `oc get nodes`.
        - <workerNodes>
        - <workerNodes>
    
  2. 保存该文件并向集群创建 OcsCluster 定制资源。

    oc create -f <ocs-cluster-filename>.yaml
    
  3. 确认 OcsCluster 正在运行。

    oc describe ocscluster ocscluster-vpc
    

    示例输出

    Name:         ocscluster-vpc
    Namespace:    
    Labels:       <none>
    Annotations:  <none>
    API Version:  ocs.ibm.io/v1
    Kind:         OcsCluster
    Metadata:
        Creation Timestamp:  2021-03-23T20:56:51Z
    Finalizers:
      finalizer.ocs.ibm.io
    Generation:  1
    Managed Fields:
      API Version:  ocs.ibm.io/v1
      Fields Type:  FieldsV1
      fieldsV1:
        f:spec:
          .:
          f:billingType:
          f:monSize:
          f:monStorageClassName:
          f:numOfOsd:
          f:ocsUpgrade:
          f:osdSize:
          f:osdStorageClassName:
      Manager:      oc
      Operation:    Update
      Time:         2021-03-23T20:56:51Z
      API Version:  ocs.ibm.io/v1
      Fields Type:  FieldsV1
      fieldsV1:
        f:metadata:
          f:finalizers:
            .:
            v:"finalizer.ocs.ibm.io":
        f:status:
          .:
          f:storageClusterStatus:
      Manager:         manager
      Operation:       Update
      Time:            2021-04-09T23:12:02Z
    Resource Version:  11372332
    Self Link:         /apis/ocs.ibm.io/v1/ocsclusters/ocscluster-vpc
    UID:               aa11a1a1-111f-aace-afac-1fa1afe1111a
    Spec:
      Billing Type:            hourly
      Mon Size:                20Gi
      Mon Storage Class Name:  ibmc-vpc-block-10iops-tier
      Num Of Osd:              1
      Ocs Upgrade:             false
      Osd Size:                250Gi
      Osd Storage Class Name:  ibmc-vpc-block-10iops-tier
    Status:
      Storage Cluster Status:  
    Events:                    <none>
    
  4. 部署使用 ODF 的应用程序

缩放 ODF

您可以通过增加 numOfOsd 设置来扩展 ODF 配置。 当您增加 OSD 数时,ODF 会提供 ODF 集群中每个工作程序节点中相同 osdSize 容量的磁盘数 (以 GB 为单位)。 但是,可供应用程序使用的总存储量等于 osdSize 乘以 numOfOsd

OpenShift数据基金会的扩展。
工作程序节点数量 初始 osdSize numOfOsd 可用于应用程序的存储容量 已供应磁盘的总存储量
3 250Gi 1 250Gi 750Gi
3 250Gi 2 500Gi 1500Gi
3 250Gi 3 750Gi 2250Gi
3 250Gi 4 1000Gi 3000Gi

通过增大 numOfOsd 进行缩放

访问 Red Hat OpenShift 集群

  1. 获取 OcsCluster 定制资源的名称。

    oc get ocscluster
    
  2. OcsCluster 定制资源 YAML 文件作为 ocscluster.yaml 保存到本地计算机。

    oc get ocscluster ocscluster-vpc -o yaml
    
  3. 增大 numOfOsd 参数,并将 ocscluster CRD 重新应用于集群。

    oc apply -f ocscluster.yaml
    
  4. 验证是否已创建其他 OSD。

    oc get pv
    

通过向 VPC 集群添加工作程序节点来扩展 ODF

要增加存储集群中的存储容量,请向集群添加兼容的工作程序节点。

  1. 通过 添加工作程序节点 来展开用于 OCS 的集群的工作程序池。 确保工作程序节点满足 ODF 需求。 如果在集群中的所有工作程序节点上部署了 ODF,那么将 ODF 驱动程序添加到集群时,这些驱动程序将安装在新的工作程序节点上。

  2. 如果通过在 OcsCluster 定制资源中指定专用 <workerNodes> 参数在集群中的部分工作程序节点上部署了 ODF,那么可以通过编辑定制资源定义将新工作程序节点的节点名添加到 ODF 部署。

    oc edit ocscluster ocscluster-vpc
    
  3. 保存 OcsCluster 定制资源文件以将其重新应用于集群。

限制

请查看以下限制以部署 ODF。

Kubernetes 资源标识字符限制: Kubernetes PVC 名称必须少于 63 个字符。 如果在多专区 VPC 集群中部署 ODF,并使用高速 retain 存储类 (例如 ibmc-vpc-block-metro-retain-10iops-tier) 创建 ODF 存储集群,那么使用此存储类创建的相应 ODF 设备集将失败。 有关更多信息,请参阅 ODF 设备集由于 Kubernetes 字符限制而创建失败

存储类参考

ODF 存储类引用