在 VPC 叢集上部署 OpenShift Data Foundation
OpenShift Data Foundation 是高度可用的儲存解決方案,您可以使用它來管理 Red Hat® OpenShift® on IBM Cloud® 集群中容器化工作負載的持久性儲存。
針對虛擬化工作負載,OpenShift 虛擬化服務 包含預先設定本機 NVME 儲存設備的 ODF,省去手動設定的麻煩。 請參閱 開始使用虛擬化服務。
IBM Cloud 群集中不支援從 OperatorHub 安裝 OpenShift Data Foundation。 若要安裝 ODF,請完成下列步驟來部署叢集附加程式。
- 最低必要許可權
Administrator平台存取角色- IBM Cloud Kubernetes Service中叢集的
Manager服務存取角色。
從 CoreOS Worker 的群集版本 4.16.23_1546_openshift 以及 RHEL Worker 的 4.16.21_1544_openshift 開始,私有 VPC 群集支援 ODF。
必要條件
- 安裝 或更新 CLI。
- 建立具有至少 3 個工作者節點的 VPC 叢集。
- 如需高可用性,請建立一個叢集,其中在三個區域中每個區域至少有一個工作者節點。
- 每一個工作者節點必須至少具有 16 個 CPU 及 64 GB RAM。 對於早於 4.16 的群集版本,請確定您的每個子網路都已連接公用閘道。
- 注意:您可以在 3 個 16 CPU 和 32 GB RAM 的工作節點上部署 OpenShift Data Foundation,但您必須汙染工作節點以僅執行 ODF pod。 使用此設定時,您無法在 ODF 節點上執行任何其他應用程式工作負載或系統 Pod。
瞭解 flexibleScaling 行為
從 OpenShift Data Foundation 4.21 開始,flexibleScaling 會自動為單區群集和少於三個可用區的部署啟用。 彈性擴展功能讓儲存叢集能夠以更細緻的粒度進行擴展,而非必須以三的倍數進行擴展操作。
- 顆粒膨脹
- 透過新增單一工作節點或一個或多個 OSD 來擴展儲存容量,而非僅以三個單元為單位進行擴展。
- 部署行為
- 彈性擴展通常用於擁有少於三個故障域或可用區域的內部連接儲存部署。 在單區域叢集中,故障域設定為「主機」,且指定的 numOfOsd 值會直接進行配置。 例如,將
numOfOsd設定為 1 會建立 1 個 OSD。 - 靜態設定
- 彈性擴展行為是在初始部署期間設定的,之後無法啟用或停用。
對於單一區域群集的初始部署,建議至少指定 3 個 OSD,以確保有足夠的彈性,並符合支援的組態指引。
在多重區域群集中,故障網域設定為區域,而 OSD 則以三的倍數配置,以維持跨區域的資料複製和高可用性。 例如,將 numOfOsd 設定為 1,會建立 3 個分佈在區域中的 OSD。
可選:停用預設操作員
專用集群:在專用集群中,您必須使用下列指令手動停用 openshift-marketplace 中的預設操作員,才能讓 ODF 正常運作。
oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
選用項目: 設定 IBM Cloud Object Storage 服務實例
完成下列步驟以建立 IBM Cloud Object Storage 範例,您可以將其用作 ODF 部署中的預設備份儲存庫。 如果您不想設定 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 存取金鑰 ID 及秘密存取金鑰。 請注意,您的密鑰必須命名為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 密鑰。
IBM Cloud 正在將專用金鑰管理服務從 Hyper Protect Crypto Services 變更為 Key Protect 專用。
- Hyper Protect Crypto Services 或 Key Protect 的 API 金鑰必須具有下列最低必要許可權:
ReaderReader Plus- 如果您使用叢集層面加密及儲存空間類別加密,則 API 金鑰必須具有下列必要許可權:
ReaderReader PlusWriter
-
建立 Hyper Protect Crypto Services 或 Key Protect 服務實例。
-
建立根金鑰。
-
建立實例及根金鑰之後,請記下 Hyper Protect Crypto Services 或 Key Protect 實例名稱、實例 ID、根金鑰 ID 及公開端點。
-
建立 服務 ID、API 金鑰 及 存取原則,容許存取 Hyper Protect Crypto Services 及 Red Hat OpenShift on IBM Cloud 或 Key Protect 及 Red Hat OpenShift on IBM Cloud。 請將您所建立的 API 記錄下來。
-
專用叢集: 建立容許存取 KMS 實例的虛擬專用端點閘道。 請確保從 VPC 中的每一個子網路至少將 1 個 IP 位址連結至 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 ``` 1. 使用您儲存的 YAML 檔案來建立 `openshift-storage` 名稱空間。 ```sh {: pre} oc create -f os-namespace.yaml ``` 1. 請確認命名空間已建立。 ```sh {: pre} oc get namespaces | grep storage ``` - 在叢集裡建立
- 將根金鑰的 ID 及您建立的服務 ID 的 API 金鑰編碼為 base64。
printf "ROOT-KEY-ID" | base64printf "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 ``` 1. 在叢集裡建立密碼。 ```sh {: pre} oc apply -f ibm-hpcs-secret.yaml ``` - 將下列密鑰儲存為稱為
- 請確認您的密鑰已建立。
oc get secrets -A | grep ibm-hpcs-secret
從主控台安裝 OpenShift Data Foundation 附加程式
若要在叢集裡安裝 ODF,請完成下列步驟。
在啟用附加程式之前,請先檢閱 變更日誌,以取得最新版本資訊。 此外,請 檢閱參數參考 以瞭解安裝選項。
- 從 主控台,選擇要安裝附加元件的群集。
- 在 OpenShift Data Foundation 卡上,按一下安裝。 安裝 ODF 面板會打開。
- 在「安裝 ODF」畫面中,輸入您要用於 ODF 部署的配置參數。
- 計費類型
- Essentials 或 Advanced 作為您的帳單計劃。 如需計費類型的相關資訊,請參閱 依計費類型的特性支援。
- 儲存空間類別
- 請輸入您要使用的儲存類別。
- 對於使用虛擬機器的 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 實例的唯一名稱。
- 在 實例類型 欄位中,輸入加密實例的類型。
- 在 實例 ID 欄位中,輸入 Hyper Protect Crypto Services 或 Key Protect 實例 ID。 例如:
d11a1a43-aa0a-40a3-aaa9-5aaa63147aaa。 - 在 密鑰名稱 欄位中,輸入您使用 Hyper Protect Crypto Services 或 Key Protect 認證建立的密鑰名稱。 例如:
ibm-hpcs-secret。 - 在 Base 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為了獲得最佳效能,建議包含指定為
performance的resourceProfile選項。 此選項有助於在部署期間根據資源可用性獲得增強的性能等級。 有關「resourceProfile」選項的更多資訊,請參閱《 Red Hat OpenShift ODF 文件》中的「效能分析」章節。版本 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 來建立儲存空間叢集。使用預設儲存群集設定、
performance資源設定檔,以及啟用 Hyper Protect Crypto Services 加密的附加元件 4.10 版部署指令範例。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部署 ODF 並建立儲存體叢集,同時置換
osdSize參數的範例指令。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 提供者說明文件。
範例 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 initterraform plan -
套用 Terraform 檔案以建立叢集。 然後,導覽至 IBM Cloud 主控台,以檢查叢集是否正在佈建。
terraform apply
建立 ODF 自訂資源
若要使用儲存磁區的動態佈建在 VPC 叢集中建立 ODF 儲存體叢集,您可以建立自訂資源來指定儲存裝置詳細資料。
如果您要使用 IBM Cloud Object Storage 服務實體作為預設備份儲存,請確定您已 建立服務實體,並在群集中建立 Kubernetes secret。 當您在群集中建立 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參數,並將ocsclusterCRD 重新套用至叢集。oc apply -f ocscluster.yaml -
驗證是否已建立其他 OSD。
oc get pv
透過將工作者節點新增至 VPC 叢集來擴充 ODF
若要增加儲存空間叢集裡的儲存空間容量,請將相容工作者節點新增至叢集。
限制
請檢閱下列部署 ODF 的限制。
Kubernetes 資源 ID 字元限制: Kubernetes PVC 名稱必須少於 63 個字元。 如果您在多區域 VPC 叢集裡部署 ODF,並使用都會 retain 儲存類別 (例如 ibmc-vpc-block-metro-retain-10iops-tier) 來建立 ODF 儲存體叢集,則使用此儲存類別建立的對應 ODF 裝置集會失敗。 如需相關資訊,請參閱 ODF 裝置集建立失敗,因為 Kubernetes 字元限制。