部署 OpenShift Data Foundation on Classic 叢集
OpenShift Data Foundation 是高度可用的儲存解決方案,您可以使用它來管理 Red Hat® OpenShift® on IBM Cloud® 集群中容器化工作負載的持久性儲存。
IBM Cloud 群集中不支援從 OperatorHub 安裝 OpenShift Data Foundation。 若要安裝 ODF,請完成下列步驟來部署叢集附加程式。
規劃設定
在叢集裡安裝 ODF 之前,您必須確定符合下列必要條件:
若要在傳統群集上安裝 OpenShift Data Foundation,您必須在帳戶中啟用 VRF。
- 安裝 或更新
ocCLI - 如果您在帳戶中未啟用虛擬路徑轉遞 (VRF),請啟用 VRF。
- 啟用 VRF 之後,請啟用 服務端點。
- 檢閱 SDS 工作者節點規格。 在每個都會區部分的表中,SDS 風格位於 Bare Metal 選項卡中並以
.ssd結尾。 - 建立 標準叢集,且在三個區域中,每個區域至少有一個工作者節點。 選擇具有 ODF 所需本端磁碟之規格類型
mb4c.32x384.3.8tb.ssd或mb4c.20x64.2x1.9tb.ssd的工作者節點。 - 準備標準叢集。
選用項目: 設定 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 設定加密
如果您想要設定加密,請建立 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 記錄下來。
- 列出名稱空間,以判定您是否具有
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 安裝
在您安裝 OpenShift Data Foundation 之前,請準備您的群集。
-
使用
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。 ```sh {: pre} file -sL /dev/<partition> wipefs -a /dev/<partition> ``` - 編輯 `/etc/kubernetes/kubelet.conf` 檔案,並將 `EnableControllerAttachDetach` 參數的值變更為 `true`。 ```sh {: pre} nano /etc/kubernetes/kubelet.conf ``` - 請使用 ` `ctrl + X`` 來儲存並退出。 - 重新啟動 kubelet。 ```sh {: pre} systemctl restart kubelet ``` - 登出工作者節點。 ```sh exit ``` - 登入工作節點。 請將
-
針對您要在 ODF 部署中使用的每一個工作者節點,重複先前的步驟來清除檔案系統。
取得裝置詳細資料
您可以使用自動磁碟探索來尋找 ODF 的可用裝置。 不過,如果您想要手動指定 ODF 的儲存裝置,請完成下列步驟來擷取儲存裝置詳細資料。
在安裝 ODF 之前,請取得工作者節點上本端磁碟的詳細資料。
-
登入叢集,並取得可用工作者節點的清單。 記下您要在 OCS 部署中使用的工作者節點。
oc get nodes -
登入您要用於 ODF 的每一個工作者節點。
oc debug node/<node-name> -
在工作者節點上部署除錯 Pod 之後,請執行下列指令以容許主機二進位檔。
chroot /host -
列出工作者節點上的可用磁碟。
lsblk -
檢閱可用磁碟的指令輸出。 您只能將未裝載的磁碟用於 ODF 部署,例如下列範例中的
sdc磁碟。 請注意,ODF 部署的起始儲存體容量等於您指定為osd-device-path的磁碟大小。 在此範例中,sdc磁碟已卸載,且有兩個可用的分割區:sdc1和sdc2。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 -
針對您要在部署中使用的每一個未裝載磁碟,尋找磁碟 ID。 在下列範例中,
sdc1分割區的 ID 是scsi-3600605b00d87b43027b3bc310a64c6c9-part1,而sdc2分割區的 ID 是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 -
針對您要用於 OpenShift Data Foundation 部署的每一個工作者節點,重複先前的步驟。
從 CLI 安裝附加程式
您可以使用 ibmcloud oc cluster addon enable 指令 來安裝附加程式。
如果您要使用 IBM Cloud Object Storage 服務實體作為預設備份儲存,請確定您已 建立服務實體,並在群集中建立 Kubernetes secret。 當您在群集中建立 ODF CRD 時,ODF 會尋找一個名為 ibm-cloud-cos-creds 的秘密,以設定使用 Object Storage HMAC 認證的預設備份儲存。
-
檢閱 參數參照。 當您啟用附加程式時,可以針對您要置換的每一個參數指定
--param "key=value"選項來置換預設值。 -
在啟用附加程式之前,請先檢閱 變更日誌,以取得最新版本資訊。 請注意,附加程式支援
n+1叢集版本。 例如,您可以將附加程式4.10.0版部署至 OCP 4.9 或 4.11 叢集。 如果您具有非預設叢集版本,則在啟用附加程式時必須指定--version選項。- 檢閱您要部署之附加程式版本的附加程式選項。
ibmcloud oc cluster addon options --addon openshift-data-foundation --version 4.15.0為了獲得最佳效能,建議包含指定為
performance的resourceProfile選項。 此選項有助於在部署期間根據資源可用性獲得增強的性能等級。 有關「resourceProfile」選項的更多資訊,請參閱《 Red Hat OpenShift ODF 文件》中的「效能設定檔」章節。請注意,
monStorageClassName和osdStorageClassName的預設儲存類別是 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> -
啟用
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" -
驗證附加程式是否處於
Ready狀態。ibmcloud oc cluster addon ls -c CLUSTER_NAME -
驗證
ibm-ocs-operator-controller-manager-*****Pod 是否在kube-system名稱空間中執行。oc get pods -A | grep ibm-ocs-operator-controller-manager -
如果您已啟用附加程式並設定
odfDeploy=false選項,請遵循 建立 ODF 自訂資源 的步驟。
從主控台安裝 OpenShift Data Foundation 附加程式
若要在叢集裡安裝 ODF,請完成下列步驟。
4.11 版本目前僅適用於新集群。 您無法將 4.10 部署升級到 4.11。 但是,您可以繼續使用 ODF 版本 4.10。
- 在啟用附加程式之前,請先檢閱 變更日誌,以取得最新版本資訊。 請注意,附加程式支援
n+1叢集版本。 - 檢閱參數參照。
- 從 主控台,選擇要安裝附加元件的群集。
- 在 OpenShift Data Foundation 卡上,按一下安裝。 安裝 ODF 面板會打開。
- 在「安裝 ODF」畫面中,輸入您要用於 ODF 部署的配置參數。
- 選取 Essentials 或 Advanced 作為計費方案。
- 若為標準叢集,請選取 本端儲存空間,以使用工作者節點上的本端磁區。
- 如果您想要自動探索工作者節點上可用的儲存裝置,並在 ODF 中使用它們,請選取 本端磁碟探索。
- 如果您要手動指定工作者節點上您要在 ODF 中使用的儲存裝置,請輸入您要使用的磁碟 ID 清單 (以逗點區隔)。 若要尋找這些磁碟 ID,請參閱 收集裝置詳細資料。
- 在 工作者節點 欄位中,輸入您要在其中部署 ODF 的工作者節點的節點名稱。 您必須至少輸入 3 個工作者節點名稱。 若要尋找節點名稱,請在叢集中執行
oc get nodes指令。 將此欄位保留空白,以在所有工作者節點上部署 ODF。 Node 名稱必須以逗點區隔,且名稱之間沒有空格。 例如:10.240.0.24,10.240.0.26,10.240.0.25。 - 在 需要 OSD 磁碟數目 欄位中,輸入要在每個工作者節點上佈建的 OSD 磁碟 (應用程式儲存空間) 數目。
- 如果您要重新啟用附加程式以升級附加程式版本,請選取 升級 ODF 選項。
- 如果您要加密 ODF 系統 Pod 所使用的磁區,請選取 啟用叢集加密。
- 如果您想要在 OSD 磁區 (應用程式儲存空間) 上啟用加密,請選取 啟用磁區加密。
- 在 實例名稱 欄位中,輸入 Hyper Protect Crypto Services 或 Key Protect 實例的名稱。 例如:
Hyper-Protect-Crypto-Services-eugb。 - 在 實例 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。
- 在 實例名稱 欄位中,輸入 Hyper Protect Crypto Services 或 Key Protect 實例的名稱。 例如:
建立儲存空間叢集
若要在標準叢集中部署 ODF,您可以建立自訂資源定義來指定儲存裝置詳細資料。
如果您要使用 IBM Cloud Object Storage 服務實體作為預設備份儲存,請確定您已 建立服務實體,並在群集中建立 Kubernetes secret。 當您在群集中建立 ODF CRD 時,ODF 會尋找一個名為 ibm-cloud-cos-creds 的秘密,以使用您的 Object Storage HMAC 認證設定預設備份儲存。
-
建立稱為
OcsCluster的自訂資源。 儲存並編輯下列自訂資源定義,以包括 先前擷取的 本端磁碟的裝置路徑。 如果您未指定選用workerNodes參數,則叢集裡的所有工作者節點都會用於 ODF 部署。 當您指定儲存裝置時,請務必併入/dev/disk/by-id/路徑。- 如果工作者節點具有具有分割區的原始磁碟,則每個工作者節點需要一個 OSD 分割區及一個 MON 分割區。 最佳作法是將分割磁碟上的儲存體容量最大化,您可以為 MON 指定較小的分割區或磁碟,以及為 OSD 指定較大的分割區或磁碟。 請注意,ODF 配置的起始儲存體容量等於您建立配置時指定為
osd-device-path的磁碟大小。 - 如果您的裝置未分割,則必須為 MON 指定一個原始磁碟,並為您要使用的每一個工作者節點指定一個 OSD。
使用自動磁碟探索,在 4.8 版叢集中所有工作者節點上安裝 ODF 的自訂資源範例。
apiVersion: ocs.ibm.io/v1 kind: OcsCluster metadata: name: ocscluster-classic spec: osdStorageClassName: localblock osdSize: "1" autoDiscoverDevices: true在具有分割磁碟的 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 - 如果工作者節點具有具有分割區的原始磁碟,則每個工作者節點需要一個 OSD 分割區及一個 MON 分割區。 最佳作法是將分割磁碟上的儲存體容量最大化,您可以為 MON 指定較小的分割區或磁碟,以及為 OSD 指定較大的分割區或磁碟。 請注意,ODF 配置的起始儲存體容量等於您建立配置時指定為
-
將檔案儲存並建立
OcsCluster自訂資源至叢集。oc create -f <ocs_cluster_filename> -
驗證
OcsCluster自訂資源是否在執行中。oc describe OcsCluster ocscluster
限制
您不能同時使用 ibmcloud-block-storage-plugin 和 ODF 附加程式。 若要安裝 ODF,您必須先編輯 /etc/kubernetes/kubelet.conf 檔案,並將 EnableControllerAttachDetach 參數的值變更為 true,這會變更叢集的預設磁區連接行為。 這表示您無法使用 ibmc-block-* 儲存類別來動態供應磁區。 相反地,您必須使用 ODF 儲存類別 來建立磁區。