在 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 后设置其他支持库,但无法更改缺省支持库。
- 在集群中创建
openshift-storage
名称空间。 驱动程序 pod 将部署到此名称空间。 复制以下 YAML 并将其另存为本地计算机上的os-namespace.yaml
。apiVersion: v1 kind: Namespace metadata: labels: openshift.io/cluster-monitoring: "true" name: openshift-storage
- 使用您保存的 YAML 文件创建
openshift-storage
名称空间。oc create -f os-namespace.yaml
- 确认命名空间已创建。
oc get namespaces | grep storage
- 创建 IBM Cloud Object Storage 服务实例。
ibmcloud resource service-instance-create noobaa-store cloud-object-storage standard global
- 创建 HMAC 凭证。 记下您的凭证。
ibmcloud resource service-key-create cos-cred-rw Writer --instance-name noobaa-store --parameters '{"HMAC": true}'
- 在使用 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>
- 确认已创建秘密。
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
-
创建 Hyper Protect Crypto Services 或 Key Protect 服务实例。
-
创建根密钥。
-
创建实例和根密钥后,请记下 Hyper Protect Crypto Services 或 Key Protect 实例名称,实例标识,根密钥标识和公共端点。
-
创建允许访问 Hyper Protect Crypto Services 和 Red Hat OpenShift on IBM Cloud 或 Key Protect 和 Red Hat OpenShift on IBM Cloud的 服务标识,API 密钥 和 访问策略。 记下您创建的 API。
-
专用集群: 创建允许访问 KMS 实例的虚拟专用端点网关。 确保至少将 1 IP 地址从 VPC 中的每个子网绑定到 VPE。
- 列出名称空间以确定您是否具有
openshift-storage
名称空间。 如果您没有openshift-storage
名称空间,请创建该名称空间。oc get namespaces | grep openshift-storage
- 在集群中创建
openshift-storage
名称空间。 驱动程序 pod 将部署到此名称空间。 复制以下 YAML 并将其另存为本地计算机上的os-namespace.yaml
。apiVersion: v1 kind: Namespace metadata: labels: openshift.io/cluster-monitoring: "true" name: openshift-storage
- 使用您保存的 YAML 文件创建
openshift-storage
名称空间。oc create -f os-namespace.yaml
- 确认命名空间已创建。
oc get namespaces | grep storage
- 在集群中创建
- 对根密钥的标识和创建到 base64的服务标识的 API 密钥进行编码。
printf "ROOT-KEY-ID" | base64
printf "SERVICE-ID-API-KEY" | base64
- 在使用 Hyper Protect Crypto Services 凭证的
openshift-storage
名称空间中创建 Kubernetes 私钥。- 将以下私钥另存为名为
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
- 在集群中创建私钥。
oc apply -f ibm-hpcs-secret.yaml
- 将以下私钥另存为名为
- 确认已创建秘密。
oc get secrets -A | grep ibm-hpcs-secret
从控制台安装 OpenShift Data Foundation 附加组件
要在集群中安装 ODF,请完成以下步骤。
在启用该附加组件之前,请查看 更改日志 以获取最新版本信息。 此外,请 查看参数参考 以了解安装选项。
- 从 控制台选择要安装附加组件的仪表盘。
- 在 OpenShift 数据基础卡上,点击“安装”。 “安装ODF” 面板随即打开。
- 在 安装 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
。 - 有关存储类的列表,请参阅《 存储类参考 》。
- 对于具有 Bare Metal Servers for VPC 工作节点的 VPC 群集,请选择
- 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
。
-
输入要使用的参数后,单击 安装
-
等待几分钟,等待附加组件部署完成。 部署完成后,附加组件状态为
Normal - Addon Ready
。 -
验证安装。 访问 Red Hat OpenShift 集群。
-
运行以下命令以验证 ODF pod 是否正在运行。
oc get pods -n openshift-storage
- 后续步骤
- 部署使用 ODF 的应用程序。
从 CLI 安装附加组件
您可以使用 ibmcloud oc cluster addon enable
命令 来安装附加组件。
-
查看 VPC 参数参考。 启用附加组件时,可以通过为要覆盖的每个参数指定
--param "key=value"
选项来覆盖缺省值。 -
列出
openshift-data-foundation
附加组件版本。 记下缺省版本并确定要安装的版本。ibmcloud ks cluster addon versions
-
在启用该附加组件之前,请查看 更改日志 以获取最新版本信息。 请注意,附加组件支持
n+1
集群版本。 例如,您可以将附加组件版本4.10.0
部署到 OCP4.9
或4.11
集群。 如果您具有非缺省集群版本,那么在启用附加组件时必须指定--version
选项。 -
查看附加组件选项。
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>
-
启用
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"
-
验证附加组件是否处于
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
-
验证
ibm-ocs-operator-controller-manager-*****
pod 是否正在kube-system
名称空间中运行。oc get pods -A | grep ibm-ocs-operator-controller-manager
-
如果在
odfDeploy
设置为false
的情况下启用了附加组件,请遵循 创建 ODF 定制资源 的步骤。
从 Terraform 安装附加组件
- 安装 Terraform CLI 和 IBM Cloud 提供者插件。
- 确保您具有 IBM Cloud API 密钥。
-
创建 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>" }
-
为 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
-
在 CLI 中,浏览到 Terraform 目录。
cd <terraform_directory>
-
运行命令以初始化和规划 Terraform 操作。 请查看计划输出以确保执行正确的操作。
terraform init
terraform plan
-
应用 Terraform 文件以创建集群。 然后,浏览到 IBM Cloud 控制台以检查集群是否正在供应。
terraform apply
创建 ODF 定制资源
要通过对存储卷使用动态供应在 VPC 集群中创建 ODF 存储集群,可以创建定制资源以指定存储设备详细信息。
如果要使用 IBM Cloud Object Storage 服务实例作为缺省支持存储,请确保 创建了服务实例,并在集群中创建了 Kubernetes 私钥。 在集群中创建 ODF CRD 时,ODF 会查找名为 ibm-cloud-cos-creds
的私钥,以设置使用 Object Storage HMAC 凭证的缺省支持存储。
-
创建名为
OcsCluster
的定制资源定义。 将下列其中一个定制资源定义文件保存在本地计算机上,并对其进行编辑以包含先前创建的存储类的名称作为monStorageClassName
和osdStorageClassName
参数。 有关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>
-
保存该文件并向集群创建
OcsCluster
定制资源。oc create -f <ocs-cluster-filename>.yaml
-
确认
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>
缩放 ODF
您可以通过增加 numOfOsd
设置来扩展 ODF 配置。 当您增加 OSD 数时,ODF 会提供 ODF 集群中每个工作程序节点中相同 osdSize
容量的磁盘数 (以 GB 为单位)。 但是,可供应用程序使用的总存储量等于 osdSize
乘以 numOfOsd
。
工作程序节点数量 | 初始 osdSize |
numOfOsd |
可用于应用程序的存储容量 | 已供应磁盘的总存储量 |
---|---|---|---|---|
3 | 250Gi | 1 | 250Gi | 750Gi |
3 | 250Gi | 2 | 500Gi | 1500Gi |
3 | 250Gi | 3 | 750Gi | 2250Gi |
3 | 250Gi | 4 | 1000Gi | 3000Gi |
通过增大 numOfOsd
进行缩放
-
获取
OcsCluster
定制资源的名称。oc get ocscluster
-
将
OcsCluster
定制资源 YAML 文件作为ocscluster.yaml
保存到本地计算机。oc get ocscluster ocscluster-vpc -o yaml
-
增大
numOfOsd
参数,并将ocscluster
CRD 重新应用于集群。oc apply -f ocscluster.yaml
-
验证是否已创建其他 OSD。
oc get pv
通过向 VPC 集群添加工作程序节点来扩展 ODF
要增加存储集群中的存储容量,请向集群添加兼容的工作程序节点。
限制
请查看以下限制以部署 ODF。
Kubernetes 资源标识字符限制: Kubernetes PVC 名称必须少于 63 个字符。 如果在多专区 VPC 集群中部署 ODF,并使用高速 retain
存储类 (例如 ibmc-vpc-block-metro-retain-10iops-tier
) 创建 ODF 存储集群,那么使用此存储类创建的相应 ODF 设备集将失败。 有关更多信息,请参阅 ODF 设备集由于 Kubernetes 字符限制而创建失败。