針對虛擬化工作負載調整 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 匣的限制,例如 mon、mgr 以及 rgw。 詳情請參閱 Red Hat 解決方案 6959127。
-
開啟儲存叢集資源以進行編輯。
oc edit storagecluster ocs-storagecluster -n openshift-storage -
在相關的
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 和記憶體的請求量必須小於或等於限制值。
-
儲存並關閉編輯器。
儲存變更後,OSD Pod 會自動重新啟動。 請等待滾動式重新啟動完成後,再執行其他儲存操作。
驗證已更新的資源限制
滾動式重新啟動完成後,請確認已將更新後的限制套用至所有 OSD Pod。
-
監控滾動重啟,以確認所有 OSD Pod 均已恢復至「
Running」狀態。 當所有 OSD Pod 均顯示為「Running」,且沒有任何一個顯示為「Pending」或「Terminating」時,即表示重新啟動已完成。oc get pods -n openshift-storage | grep osd | grep -v prepare | grep -v rotation -
確認新的資源值已生效。
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 資源,請完成以下步驟。
-
建立或更新
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" -
套用配置檔。
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 狀態,請完成以下檢查。
-
檢查配置群組的狀態,以識別未處於「
active+clean」狀態的群組。oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph pg stat -
請檢查各 OSD 的狀態,以確認 OSD 是否為
up及in。oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) ceph osd status