部署 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

  1. 安裝 或更新 oc CLI
  2. 如果您在帳戶中未啟用虛擬路徑轉遞 (VRF),請啟用 VRF
    1. 啟用 VRF 之後,請啟用 服務端點
  3. 檢閱 SDS 工作者節點規格。 在每個都會區部分的表中,SDS 風格位於 Bare Metal 選項卡中並以 .ssd 結尾。
  4. 建立 標準叢集,且在三個區域中,每個區域至少有一個工作者節點。 選擇具有 ODF 所需本端磁碟之規格類型 mb4c.32x384.3.8tb.ssdmb4c.20x64.2x1.9tb.ssd 的工作者節點。
  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 存取金鑰 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>
    
  7. 請確認您的密鑰已建立。
    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 金鑰必須具有下列最低必要許可權:
Reader
Reader Plus
如果您使用叢集層面加密及儲存空間類別加密,則 API 金鑰必須具有下列必要許可權:
Reader
Reader Plus
Writer
  1. 建立 Hyper Protect Crypto ServicesKey Protect 服務實例。

  2. 建立根金鑰

  3. 建立實例及根金鑰之後,請記下 Hyper Protect Crypto Services 或 Key Protect 實例名稱、實例 ID、根金鑰 ID 及公開端點。

  4. 建立 服務 IDAPI 金鑰存取原則,容許存取 Hyper Protect Crypto Services 及 Red Hat OpenShift on IBM Cloud 或 Key Protect 及 Red Hat OpenShift on IBM Cloud。 請將您所建立的 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
        ```
    1. 使用您儲存的 YAML 檔案來建立 `openshift-storage` 名稱空間。
    ```sh {: pre}
        oc create -f os-namespace.yaml
        ```
    1. 請確認命名空間已建立。
    ```sh {: pre}
        oc get namespaces | grep storage
        ```
    
  2. 將根金鑰的 ID 及您建立的服務 ID 的 API 金鑰編碼為 base64。
    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
        ```
    1. 在叢集裡建立密碼。
    ```sh {: pre}
        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。
    ```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
        ```
    
    
  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. 針對您要在部署中使用的每一個未裝載磁碟,尋找磁碟 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
    
  7. 針對您要用於 OpenShift Data Foundation 部署的每一個工作者節點,重複先前的步驟。

  8. 在叢集裡安裝 ODF

從 CLI 安裝附加程式

您可以使用 ibmcloud oc cluster addon enable 指令 來安裝附加程式。

如果您要使用 IBM Cloud Object Storage 服務實體作為預設備份儲存,請確定您已 建立服務實體,並在群集中建立 Kubernetes secret。 當您在群集中建立 ODF CRD 時,ODF 會尋找一個名為 ibm-cloud-cos-creds 的秘密,以設定使用 Object Storage HMAC 認證的預設備份儲存。

  1. 檢閱 參數參照。 當您啟用附加程式時,可以針對您要置換的每一個參數指定 --param "key=value" 選項來置換預設值。

  2. 在啟用附加程式之前,請先檢閱 變更日誌,以取得最新版本資訊。 請注意,附加程式支援 n+1 叢集版本。 例如,您可以將附加程式 4.10.0 版部署至 OCP 4.9 或 4.11 叢集。 如果您具有非預設叢集版本,則在啟用附加程式時必須指定 --version 選項。

    1. 檢閱您要部署之附加程式版本的附加程式選項。
    ibmcloud oc cluster addon options --addon openshift-data-foundation --version 4.15.0
    

    為了獲得最佳效能,建議包含指定為 performanceresourceProfile 選項。 此選項有助於在部署期間根據資源可用性獲得增強的性能等級。 有關「resourceProfile」選項的更多資訊,請參閱《 Red Hat OpenShift ODF 文件》中的「效能設定檔」章節。

    請注意,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 版本 4.10。

  1. 在啟用附加程式之前,請先檢閱 變更日誌,以取得最新版本資訊。 請注意,附加程式支援 n+1 叢集版本。
  2. 檢閱參數參照
  3. 主控台,選擇要安裝附加元件的群集。
  4. 在 OpenShift Data Foundation 卡上,按一下安裝安裝 ODF 面板會打開。
  5. 在「安裝 ODF」畫面中,輸入您要用於 ODF 部署的配置參數。
  6. 選取 EssentialsAdvanced 作為計費方案。
  7. 若為標準叢集,請選取 本端儲存空間,以使用工作者節點上的本端磁區。
  8. 如果您想要自動探索工作者節點上可用的儲存裝置,並在 ODF 中使用它們,請選取 本端磁碟探索
  9. 如果您要手動指定工作者節點上您要在 ODF 中使用的儲存裝置,請輸入您要使用的磁碟 ID 清單 (以逗點區隔)。 若要尋找這些磁碟 ID,請參閱 收集裝置詳細資料
  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. 實例 ID 欄位中,輸入 Hyper Protect Crypto Services 或 Key Protect 實例 ID。 例如: d11a1a43-aa0a-40a3-aaa9-5aaa63147aaa
    3. 密鑰名稱 欄位中,輸入您使用 Hyper Protect Crypto Services 或 Key Protect 認證建立的密鑰名稱。 例如: ibm-hpcs-secret
    4. Base 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 secret。 當您在群集中建立 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。

    使用自動磁碟探索,在 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
    
  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 儲存類別 來建立磁區。