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

在经典集群上部署 OpenShift Data Foundation

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

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

规划设置

在集群中安装 ODF 之前,必须确保满足以下先决条件:

要在经典集群上安装 OpenShift Data Foundation,必须在帐户中启用 VRF

  1. 安装 或更新 oc CLI
  2. 如果您的帐户中未启用虚拟路由转发 (VRF),请启用 VRF
    1. 启用 VRF 后,请启用 服务端点
  3. 查看 SDS 工作程序节点类型模板。 在各都市区部分的表格中,SDS 味道位于 Bare Metal 选项卡中,并以 .ssd 结尾。
  4. 创建 经典集群,在三个专区中,每个专区至少有一个工作程序节点。 选择类型为 mb4c.32x384.3.8tb.ssdmb4c.20x64.2x1.9tb.ssd 的工作程序节点,这些工作程序节点具有 ODF 所需的本地磁盘。
  5. 准备经典集群

可选: 设置 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 设置加密

如果要设置加密,请创建 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。

访问 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 安装准备集群

在安装 OpenShift Data Foundation 之前,请准备集群。

访问 Red Hat OpenShift 集群

  1. 使用 oc debug 命令登录到集群中的每个工作程序节点,并完成以下步骤。

    • 登录工作节点。 将 <worker_node_IP> 替换为工作节点的名称。 要获取工作程序节点的名称,请运行 oc get nodes 命令。

      oc debug node/<node name> -- chroot /host rm -rvf /var/lib/rook /mnt/local-storage
      
    • 对于每个磁盘分区,清除工作程序节点上的 xfs 文件系统。 如果不清除文件系统,那么不会创建 OSD。

      file -sL /dev/<partition>
      wipefs -a /dev/<partition>
      
    • 编辑 /etc/kubernetes/kubelet.conf 文件并将 EnableControllerAttachDetach 参数的值更改为 true

      nano /etc/kubernetes/kubelet.conf
      
    • 使用 ctrl + X 保存并退出。

    • 重新启动 kubelet。

      systemctl restart kubelet
      
    • 从工作程序节点注销。

      exit
      
  2. 重复上述步骤,为要在 ODF 部署中使用的每个工作程序节点擦除文件系统。

获取设备详细信息

您可以使用自动磁盘发现来查找 ODF 的可用设备。 但是,如果要为 ODF 手动指定存储设备,请完成以下步骤以检索存储设备详细信息。

在安装 ODF 之前,请获取工作程序节点上本地磁盘的详细信息。

  1. 登录到集群并获取可用工作程序节点的列表。 记下要在 OCS 部署中使用的工作程序节点。

    oc get nodes
    
  2. 登录到要用于 ODF 的每个工作程序节点。

    oc debug node/<node-name>
    
  3. 在工作程序节点上部署调试 pod 后,运行以下命令以允许主机二进制文件。

    chroot /host
    
  4. 列出工作程序节点上的可用磁盘。

    lsblk
    
  5. 查看可用磁盘的命令输出。 只能将已卸载的磁盘用于 ODF 部署,例如以下示例中的 sdc 磁盘。 请注意,ODF 部署的初始存储容量等于指定为 osd-device-path 的磁盘大小。 在此示例中,sdc 磁盘已卸载,并且具有两个可用分区: sdc1sdc2

    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   931G  0 disk
    |-sda1   8:1    0   256M  0 part /boot
    |-sda2   8:2    0     1G  0 part
     -sda3   8:3    0 929.8G  0 part /
    sdb      8:16   0 744.7G  0 disk
     -sdb1   8:17   0 744.7G  0 part /disk1
    sdc      8:32   0 744.7G  0 disk
    |-sdc1   8:33   0  18.6G  0 part
     -sdc2   8:34   0 260.8G  0 part
    
  6. 对于要在部署中使用的每个已卸载磁盘,请查找磁盘标识。 在以下示例中,sdc1 分区的标识为 scsi-3600605b00d87b43027b3bc310a64c6c9-part1sdc2 分区的标识为 scsi-3600605b00d87b43027b3bc310a64c6c9-part2

    ls -l /dev/disk/by-id/
    

    示例输出

    total 0
    lrwxrwxrwx. 1 root root  9 Feb  9 04:15 scsi-3600605b00d87b43027b3bbb603150cc6 -> ../../sda
    lrwxrwxrwx. 1 root root 10 Feb  9 04:15 scsi-3600605b00d87b43027b3bbb603150cc6-part1 -> ../../sda1
    lrwxrwxrwx. 1 root root 10 Feb  9 04:15 scsi-3600605b00d87b43027b3bbb603150cc6-part2 -> ../../sda2
    lrwxrwxrwx. 1 root root 10 Feb  9 04:15 scsi-3600605b00d87b43027b3bbb603150cc6-part3 -> ../../sda3
    lrwxrwxrwx. 1 root root  9 Feb  9 04:15 scsi-3600605b00d87b43027b3bbf306bc28a7 -> ../../sdb
    lrwxrwxrwx. 1 root root 10 Feb  9 04:15 scsi-3600605b00d87b43027b3bbf306bc28a7-part1 -> ../../sdb1
    lrwxrwxrwx. 1 root root  9 Feb  9 04:17 scsi-3600605b00d87b43027b3bc310a64c6c9 -> ../../sdc
    lrwxrwxrwx. 1 root root 10 Feb 11 03:14 scsi-3600605b00d87b43027b3bc310a64c6c9-part1 -> ../../sdc1
    lrwxrwxrwx. 1 root root 10 Feb 11 03:15 scsi-3600605b00d87b43027b3bc310a64c6c9-part2 -> ../../sdc2
    
  7. 对要用于 OpenShift Data Foundation 部署的每个工作程序节点重复上述步骤。

  8. 在集群中安装 ODF

从 CLI 安装附加组件

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

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

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

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

    1. 查看要部署的附加组件版本的附加组件选项。
    ibmcloud oc cluster addon options --addon openshift-data-foundation --version 4.15.0
    

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

    请注意,monStorageClassNameosdStorageClassName 的缺省存储类是 Block Storage for VPC 存储类。

    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>
    
  3. 启用 openshift-data-foundation 附加组件。 如果只想部署 ODF 附加组件,那么可以指定 "odfDeploy=false" 选项。 如果要覆盖任何缺省参数,请为要覆盖的每个参数指定 --param "key=value" 选项。 如果您不想在启用附加组件时创建存储集群,那么可以先启用附加组件,然后通过创建 CRD 来创建存储集群。

    启用附加组件并自动发现本地卷、启用 performance 资源配置文件选项以及启用 Hyper Protect Crypto Services 或 Key Protect 加密的示例命令。

    ibmcloud oc cluster addon enable openshift-data-foundation -c <cluster-name> --version VERSION --param "odfDeploy=true"  --param "resourceProfile=performance" --param "osdSize=250" --param "autoDiscoverDevices=true" --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>"
    
  4. 验证附加组件是否处于 Ready 状态。

    ibmcloud oc cluster addon ls -c <cluster_name>
    
  5. 验证 ibm-ocs-operator-controller-manager-***** pod 是否正在 kube-system 名称空间中运行。

    oc get pods -A | grep ibm-ocs-operator-controller-manager
    
  6. 如果已启用附加组件并设置 odfDeploy=false 选项,请遵循 创建 ODF 定制资源 的步骤。

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

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

版本 4.11 当前仅可用于新集群。 无法将 4.10 部署升级到 4.11。 但是,您可以继续使用 ODF V 4.10。

  1. 在启用该附加组件之前,请查看 更改日志 以获取最新版本信息。 请注意,附加组件支持 n+1 集群版本。
  2. 查看参数参考
  3. 控制台选择要安装附加组件的仪表盘。
  4. 在 OpenShift 数据基础卡上,点击“安装”。 “安装ODF” 面板随即打开。
  5. 安装 ODF 面板中,输入要用于 ODF 部署的配置参数。
  6. 选择 基本高级 作为记帐计划。
  7. 对于经典集群,选择 本地存储器 以使用工作程序节点上的本地卷。
  8. 如果要自动发现工作程序节点上的可用存储设备并在 ODF 中使用这些设备,请选择 本地磁盘发现
  9. 如果要手动指定要在 ODF 中使用的工作程序节点上的存储设备,请输入要使用的磁盘标识的逗号分隔列表。 要查找这些磁盘标识,请参阅 收集设备详细信息
  10. 工作程序节点 字段中,输入要在其中部署 ODF 的工作程序节点的节点名。 必须至少输入 3 个工作程序节点名。 要查找节点名,请在集群中运行 oc get nodes 命令。 将此字段留空以在所有工作程序节点上部署 ODF。 Node 名称必须以逗号分隔,名称之间不得有空格。 例如:10.240.0.24,10.240.0.26,10.240.0.25
  11. 需要的 OSD 磁盘数 字段中,输入要在每个工作程序节点上供应的 OSD 磁盘数 (应用程序存储器)。
  12. 如果要重新启用附加组件以升级附加组件版本,请选择 升级 ODF 选项。
  13. 如果要对 ODF 系统 pod 使用的卷进行加密,请选择 启用集群加密
  14. 如果要在 OSD 卷 (应用程序存储器) 上启用加密,请选择 启用卷加密
    1. 实例名称 字段中,输入 Hyper Protect Crypto Services 或 Key Protect 实例的名称。 例如: Hyper-Protect-Crypto-Services-eugb
    2. 实例标识 字段中,输入 Hyper Protect Crypto Services 或 Key Protect 实例标识。 例如: d11a1a43-aa0a-40a3-aaa9-5aaa63147aaa
    3. 私钥名称 字段中,输入使用 Hyper Protect Crypto Services 或 Key Protect 凭证创建的私钥的名称。 例如: ibm-hpcs-secret
    4. URL 中,输入您的 Hyper Protect Crypto Services 或 Key Protect 实例的公共端点。 例如: https://api.eu-gb.hs-crypto.cloud.ibm.com:8389
    5. URL 字段中输入 https://iam.cloud.ibm.com/identity/token

创建存储集群

要在经典集群中部署 ODF,可以创建定制资源定义以指定存储设备详细信息。

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

  1. 创建名为 OcsCluster 的定制资源。 保存并编辑以下定制资源定义,以包含 先前检索到的 本地磁盘的设备路径。 如果未指定可选的 workerNodes 参数,那么集群中的所有工作程序节点都将用于 ODF 部署。 指定存储设备时,请确保包含 /dev/disk/by-id/ 路径。

    • 如果工作程序节点具有带有分区的原始磁盘,那么每个工作程序节点需要一个分区用于 OSD,一个分区用于 MON。 最佳实践是,要使分区磁盘上的存储容量最大化,可以为 MON 指定更小的分区或磁盘,为 OSD 指定更大的分区或磁盘。 请注意,ODF 配置的初始存储容量等于您在创建配置时指定为 osd-device-path 的磁盘大小。
    • 如果设备未分区,那么必须为 MON 指定一个原始磁盘,并为要使用的每个工作程序节点指定一个 OSD。

    用于使用自动磁盘发现在 V 4.8 集群中的所有工作程序节点上安装 ODF 的示例定制资源。

    apiVersion: ocs.ibm.io/v1
    kind: OcsCluster
    metadata:
      name: ocscluster-classic
    spec:
      osdStorageClassName: localblock
      osdSize: "1"
      autoDiscoverDevices: true
    

    用于在具有分区磁盘的 V 4.8 集群中的所有工作程序节点上安装 ODF 的示例定制资源。

    apiVersion: ocs.ibm.io/v1
    kind: OcsCluster
    metadata:
      name: ocscluster # Kubernetes resource names can't contain capital letters or special characters. Specify a name for your resource that uses only lowercase letters, numbers, `-` or `.`
    spec:
      osdStorageClassName: localblock
      osdSize: "1"
      numOfOsd: 1
      billingType: advanced
      ocsUpgrade: false
      osdDevicePaths:
        - <device-by-id> # Example: /dev/disk/by-id/scsi-0000000a00a00a00000a0aa000a00a0a0-part2
        - <device-by-id> # Example: /dev/disk/by-id/scsi-1111111a11a11a11111a1aa111a11a1a1-part2
        - <device-by-id> # Example: dev/disk/by-id/scsi-2222222a22a22a22222a2aa222a22a2a2-part2
    
  2. 保存该文件并向集群创建 OcsCluster 定制资源。

    oc create -f <ocs_cluster_filename>
    
  3. 验证 OcsCluster 定制资源是否正在运行。

    oc describe OcsCluster ocscluster
    
  4. 部署使用 ODF 的应用程序

限制

不能同时使用 ibmcloud-block-storage-plugin 和 ODF 附加组件。 要安装 ODF,必须首先编辑 /etc/kubernetes/kubelet.conf 文件并将 EnableControllerAttachDetach 参数的值更改为 true,这将更改集群的缺省卷连接行为。 这意味着您无法使用 ibmc-block-* 存储类动态供应卷。 而是必须使用 ODF 存储类 来创建卷。