針對虛擬化工作負載調整 ODF 效能

虛擬私有雲 4.20 後來 僅限裸機工作節點

您可以透過選取適當的效能設定檔、調整 OSD Pod 的資源限制,以及設定批次資料操作,來提升 OpenShift Data Foundation (ODF) 針對虛擬化工作負載的儲存效能。 這些選項適用於採用手動部署的「OpenShift Virtualization」及「Red Hat OpenShift Virtualization Service」叢集所組成的 Red Hat OpenShift on IBM Cloud 叢集。

開始之前

  • 您必須具備對該叢集的 cluster-admin 存取權限。
  • 安裝 或更新「IBM Cloud」命令列介面(CLI)以及「oc」命令列介面(CLI)。
  • 在調整資源限制或設定儲存池之前,必須先安裝 ODF 並確保其處於正常運作狀態。 若要驗證 ODF 的運作狀態,請參閱「檢查 Ceph 叢集的運作狀態」。

選擇 ODF 效能設定檔

ODF 提供了兩種效能設定檔,用以控制儲存元件的 CPU 和記憶體分配。 請選擇最符合您工作負載的設定檔。

效能
與「平衡」設定檔相比,會分配更多的 CPU 和記憶體。 請將此設定檔用於需要高吞吐量與低延遲的 VM 工作負載,例如資料庫或高流量應用程式。
平衡
佔用適度的 CPU 和記憶體資源。 請將此設定檔用於一般用途的工作負載、混合環境或成本優化的部署。

部署 ODF 時,請在「後端儲存」下的「資源設定檔」欄位中選擇「效能」。 在虛擬化服務叢集中,預設選取的是「效能」。

您可以透過主控台或命令列介面 (CLI) 設定此設定檔。

  • 主控台 - 標準 Red Hat OpenShift on IBM Cloud 叢集:安裝 ODF 附加元件時,請在「後端儲存」區段中選取「效能」。
  • 主控台 - 虛擬化服務叢集:預設選取「效能」。 若要變更此設定,請在建立叢集時,於「虛擬化整合」區段中,選取「OpenShift Data Foundation」卡片上的「編輯」。

此選項僅適用於標準的 Red Hat OpenShift on IBM Cloud 叢集。 對於虛擬化服務叢集,您需在建立叢集時設定該設定檔。

在命令列介面 (CLI) 中,啟用此附加元件時,請加入 --param "resourceProfile=performance"

ibmcloud oc cluster addon enable openshift-data-foundation \
  -c <cluster-name> \
  --version <addon-version> \
  --param "odfDeploy=true" \
  --param "osdStorageClassName=localblock" \
  --param "autoDiscoverDevices=true" \
  --param "resourceProfile=performance" \
  --param "setDefaultStorageClassForVirtualization=true"

有關所有 ODF 附加參數,請參閱 OpenShift 《Data Foundation 參數參考》

設定 OSD Pod 資源限制

Object Storage Daemon (OSD) Pod 負責儲存資料,並參與資料配置與複製。 對於具有高 I/O 需求的虛擬化工作負載,您可以提高 OSD Pod 的 CPU 和記憶體上限,以協助減少瓶頸。

檢查當前的 OSD 資源限制

在修改資源限制之前,請先檢查您的 OSD Pod 的當前 CPU 和記憶體設定。 請記錄當前的請求數量與限制,以便日後能將其與實際使用情況及更新後的數值進行比較。

oc get pods -n openshift-storage -l app=rook-ceph-osd \
  -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .spec.containers[*]}  Container: {.name}{"\n"}    Requests - CPU: {.resources.requests.cpu}, Memory: {.resources.requests.memory}{"\n"}    Limits   - CPU: {.resources.limits.cpu}, Memory: {.resources.limits.memory}{"\n"}{end}{"\n"}{end}'

檢視輸出結果,以確認每個 OSD 容器的當前 CPU 和記憶體需求與限制。 請在下一條指令中,將這些數值與實際使用情況進行比較。 如果 CPU 或記憶體使用率持續接近設定的上限,提高這些上限可能會有助於減輕瓶頸。

要檢查實際的資源消耗情況,請執行以下指令,並將 CPU 和記憶體的使用量與您記錄的限制值進行比較:

oc adm top pods -n openshift-storage -l app=rook-ceph-osd

提高 OSD 資源限制

若目前的限制值無法滿足您的 VM 工作負載需求,請透過編輯 ocs-storagecluster 資源來更新這些限制值。

您也可以在 ocs-storagecluster 配置中,修改其他 Rook-Ceph 匣的限制,例如 monmgr 以及 rgw。 詳情請參閱 Red Hat 解決方案 6959127

  1. 開啟儲存叢集資源以進行編輯。

    oc edit storagecluster ocs-storagecluster -n openshift-storage
    
  2. 在相關的 storageDeviceSets 條目中,新增或更新「resources」欄位。 以下部分範例設定了 4 個 CPU 和 24 Gi 記憶體的上限,並請求 2 個 CPU 和 24 Gi 記憶體:

    storageDeviceSets:
      - name: ocs-deviceset
        resources:
          limits:
            cpu: "4"
            memory: "24Gi"
          requests:
            cpu: "2"
            memory: "24Gi"
    

    CPU 和記憶體的請求量必須小於或等於限制值。

  3. 儲存並關閉編輯器。

    儲存變更後,OSD Pod 會自動重新啟動。 請等待滾動式重新啟動完成後,再執行其他儲存操作。

驗證已更新的資源限制

滾動式重新啟動完成後,請確認已將更新後的限制套用至所有 OSD Pod。

  1. 監控滾動重啟,以確認所有 OSD Pod 均已恢復至「Running」狀態。 當所有 OSD Pod 均顯示為「Running」,且沒有任何一個顯示為「Pending」或「Terminating」時,即表示重新啟動已完成。

    oc get pods -n openshift-storage | grep osd | grep -v prepare | grep -v rotation
    
  2. 確認新的資源值已生效。

    oc get pods -n openshift-storage -l app=rook-ceph-osd \
      -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{range .spec.containers[*]}  Container: {.name}{"\n"}    Requests - CPU: {.resources.requests.cpu}, Memory: {.resources.requests.memory}{"\n"}    Limits   - CPU: {.resources.limits.cpu}, Memory: {.resources.limits.memory}{"\n"}{end}{"\n"}{end}'
    

    請確認 CPU 和記憶體的數值是否與您所設定的數值相符。

為大量資料操作設定「批量」標記

對於大型資料操作(例如 VM 資料遷移、批次匯入或資料歸檔),在 Ceph 區塊儲存池上啟用「批次」標記,可改善資料在 OSD 間的初始分佈,並減少重新平衡的開銷。

「批量」標誌通常用於:

  • VM 涉及數 TB 數據的磁碟遷移與匯入作業。
  • 備份與還原操作。
  • 新應用程式的初始資料載入。
  • 資料歸檔池。

若要設定已啟用「批量」標誌的 CephBlockPool 資源,請完成以下步驟。

  1. 建立或更新 CephBlockPool 資源定義,使 parameters 區段包含 bulk: "true"``。

    apiVersion: ceph.rook.io/v1
    kind: CephBlockPool
    metadata:
      name: <pool-name>
      namespace: openshift-storage
    spec:
      replicated:
        size: 3
      parameters:
        bulk: "true"
    
  2. 套用配置檔。

    oc apply -f <pool-config-file>.yaml
    

    套用設定後,Ceph 便能從一開始就將新資料更均勻地分佈於儲存池中。 隨著池子逐漸填滿,這種做法可以減少再平衡的次數。

檢查 Ceph 叢集的運作狀態

請定期監控您的 Ceph 叢集,以找出效能問題並確保資料完整性。 在進行設定變更之前和之後,請執行狀態檢查。

執行基本健康檢查

執行以下指令,以取得 Ceph 的整體運作狀態摘要。 一個正常的叢集會傳回 HEALTH_OK

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph status

若要檢視當前的警告或錯誤,請執行以下指令:

oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph health detail

了解叢集狀態

ceph status 的輸出包含用於指示資料健康狀態的配置群組 (PG) 狀態。

活躍/乾淨
理想狀態。 所有配置群組均處於活躍狀態,所有資料均已複製,且沒有資料正在移動。 無需執行任何動作。
已啟用+重新映射、已啟用+回填、已啟用+恢復中
資料正在重新分配中。 在 OSD 資源變更、節點更換或擴展操作之後,這些狀態均屬正常。 在進行其他變更之前,請等待叢集狀態恢復為「active/clean」。

健康輸出的範例:

HEALTH_OK

重新平衡過程中的輸出範例:

HEALTH_WARN
  Degraded data redundancy: 123/456 objects degraded (26.974%)
  Recovery 50/456 objects degraded (10.965%)

檢查配置群組與 OSD 狀態

若要更詳細地了解資料分佈及 OSD 狀態,請完成以下檢查。

  1. 檢查配置群組的狀態,以識別未處於「active+clean」狀態的群組。

    oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph pg stat
    
  2. 請檢查各 OSD 的狀態,以確認 OSD 是否為 upin

    oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph osd status
    

下一步