為自動擴充準備群集

虛擬私有雲 經典基礎設施

透過「cluster-autoscaler」附加元件,您可以根據排程工作負載的規模需求,自動調整 Red Hat® OpenShift® on IBM Cloud® 經典版或 VPC 叢集中的工作節點叢集規模,藉此增加或減少工作節點叢集中的工作節點數量。 此 cluster-autoscaler 附加元件基於 Kubernetes Cluster-Autoscaler 專案。 如需叢集版本支援的附加程式版本清單,請參閱 支援的叢集附加程式版本

您無法在使用保留的工作者節點儲存區上啟用叢集 Autoscaler。

瞭解自動擴充

  • 叢集 Autoscaler 會定期掃描叢集來調整它管理的工作者節點儲存區內的工作者節點數目,以回應工作負載資源要求及您配置的任何自訂設定,例如掃描間隔。

  • 叢集 Autoscaler 會每分鐘檢查下列狀況。

    • 擱置的 Pod 要擴增:當運算資源不夠而無法在工作者節點上排定 Pod 時,此 Pod 即為擱置。 當叢集 Autoscaler 偵測到擱置的 Pod 時,autoscaler 會在區域之間平均地擴增工作者節點,以符合工作負載資源要求。
    • 有未充分利用的工作者節點要縮減:依預設,在 10 分鐘或更長時間內,如果執行的工作者節點所要求的運算資源佔資源總量的比例低於 50%,並且可以將其工作負載重新排定到其他工作者節點上,則這些工作者節點即被視為未充分利用。 如果叢集 Autoscaler 偵測到未充分利用的工作者節點,它會一次一個來縮減工作者節點,這樣您就只會擁有您需要的運算資源。 您也可以自訂預設的縮減使用率臨界值為 50% 長達 10 分鐘。
  • 隨著時間推移,掃描與擴增和縮減會定期進行,並根據工作者節點數目而定,有可能需要較長的時間來完成,例如 30 分鐘。

  • 叢集自動擴展器會根據您為部署所定義的 資源請求來調整工作節點的數量,而非依據實際的工作節點使用情況。 如果您的 Pod 及部署未要求適當數量的資源,您必須調整其配置檔。

  • 叢集 Autoscaler 無法為您調整它們。 此外,請注意,工作節點會將部分運算資源用於基本叢集功能、預設及自訂 附加元件,以及 資源預留

  • 一般而言,叢集 Autoscaler 會計算叢集執行其工作負載所需的工作者節點數目。 擴增或縮減叢集取決於諸多因素,其中包括下列因素。

    • 您設定的每一區域工作者節點大小的下限及上限。
    • 您待處理的 Pod 資源請求,以及您與該工作負載相關聯的特定元資料,例如反親和性設定、僅將 Pod 部署於特定型號的標籤,或是 Pod 中斷預算
    • 由叢集自動擴展器所管理的作業叢集,在多區域叢集中可能橫跨多個區域。
  • 早期版本的群集自動分級器只依賴現有的工作節點來排程模擬。 例如,若某個工作節點群組縮減至 0 個節點,自動擴展器將無法取得該群組的容量或標籤資訊,這意味著它將無法重新擴展該工作節點群組。 因此,不支援擴充至零。

  • 從版本 2.0.0 開始,autoscaler 會為每個 Worker pool 建立一個範本節點。 此範本用於提供池中新增節點的可分配 CPU、記憶體、標籤及污點模型。

  • 此外,在版本 2.0.0 中,於 命名 kube-system 空間的 iks-ca-configmap 中新增了兩個可選設定:OSReservedMemoryGiOSReservedCPUMili

    • 這些數值代表作業系統在每個工作節點上預留的 CPU 和記憶體量。
    • 這些數值已預先定義,因此無法透過它們來調整核心使用率。
    • 在計算調度模擬的可分配資源時,autoscaler 會從節點容量中減去這些值。
    • 預設情況下,自動擴展器會採用建議的作業系統保留值,但使用者可覆寫這些值以調整可排程的容量上限。

如需更多資訊,請參閱 Kubernetes 叢集常見問題擴展器常見問題集中的「擴展規模如何運作?」及「縮減規模如何運作?」說明。

自動擴充的最佳做法是什麼?

我可以變更擴展與縮減的功能運作方式嗎?

是的,您可以自訂設定,或使用其他 Kubernetes 資源來調整擴展與縮減的運作方式。

  • 對於擴充,您可以自訂群集自動調整 ConfigMap 值,例如 scanInterval, expander, skipNodes,或 maxNodeProvisionTime。 請檢閱過度佈建工作者節點的方式,讓您可以在工作者節點儲存區用盡資源之前擴增工作者節點。 您也可以設定 Kubernetes Pod 預算干擾及 Pod 優先順序截斷,以影響擴增的運作方式。

  • 要縮小規模,請自訂群集自動調整 ConfigMap 值,例如 scaleDownUnneededTime, scaleDownDelayAfterAdd, scaleDownDelayAfterDelete,或 scaleDownUtilizationThreshold

我能否將每個區域的最小大小提高,以觸發叢集擴展至該大小?

不能,設定 minSize 不會自動觸發擴增。 minSize 是一個閾值,用以確保叢集自動擴展器不會將每個區域的工作節點數量縮減至低於特定數量。

  • 如果您的叢集每個區域尚未達該數目,叢集 Autoscaler 不會擴增,直到您有需要更多資源的工作負載資源要求。 例如,如果您有工作者節點儲存區,其中三個區域各一個工作者節點(總計三個工作者節點),並將 minSize 設為每個區域 4,則叢集 Autoscaler 不會立即為每個區域佈建額外三個工作者節點(總計 12 個工作者節點)。 擴增會改為由資源要求觸發。
  • 如果您建立的工作負載會要求 15 個工作者節點的資源,則叢集 Autoscaler 會擴增工作者節點儲存區,以滿足此要求。 現在,minSize 表示,即使您移除了需要該數量工作節點的工作負載,叢集自動擴展器也不會將每個區域的工作節點數量縮減至少於四個。

這種行為與未由叢集自動擴展器管理的作業節點池有何不同?

當您建立工作者節點儲存區時,您要指定每個區域有多少個工作者節點。 工作者節點儲存區會維護工作者節點數目,直到您將它調整大小重新平衡為止。 工作者節點儲存區不會為您新增或移除工作者節點。 如果您有超過可以排定的 Pod,則這些 Pod 會保持擱置狀態,直到您調整工作者節點儲存區的大小為止。 當您針對工作者節點儲存區啟用叢集 Autoscaler 後,就會擴增或縮減工作者節點,以回應您的 Pod 規格設定及資源要求。 您不需要手動調整工作者節點儲存區的大小或重新平衡。

GPU 自動調整如何運作?

自動調整 GPU 工作節點僅支援群集 autoscaler 1.2.4 及更新版本,且僅支援 NVIDIA GPU 工作節點口味。 當 Pod 因 GPU 資源緊縮而進入待機狀態時,就會發生擴充。 然後,自動分量器會透過增加更多節點來擴充群集。 當使用率低於設定的 scaleDownGPUUtilizationThreshold 時,就會發生縮減。 當發生這種情況時,節點會考慮縮小。

是否可以一次自動調整多個工作者節點儲存區?

是的,安裝叢集自動擴展器後,您可以在 「ConfigMap」中 選擇叢集內哪些工作節點池要進行自動擴展。 每個叢集只能執行一個 Autoscaler。 在非預設工作者節點儲存區的工作者節點儲存區上建立並啟用自動調整,因為預設工作者節點儲存區具有可防止自動縮減的系統元件。

如何確定叢集 Autoscaler 會回應應用程式所需的資源?

叢集自動擴展器會根據您的工作負載 資源需求,對您的叢集進行擴展。 因此,請為所有部署指定 資源請求,因為叢集自動擴展器會根據這些資源請求來計算執行該工作負載所需的工人節點數量。 請記住,自動調整是根據工作負載配置要求的運算使用量,而不考量其他因素,例如機器成本。

是否可以將工作者節點儲存區縮減為零 (0) 個節點?

是的! 從 Cluster Autoscaler 附加元件版本開始,您可將特定工作 2.0.0 節點群組縮減至零個節點。

這為何有用?
當沒有工作負載運行時,縮放至零有助於節省成本。 自動擴展器會在需要時自動恢復節點。
運作方式
當沒有可執行的 Pod 時,自動擴展器可將工作節點池縮減至 0 個節點。 若新執行個體需要資源,自動擴縮功能會自動將資源池重新擴充。
你需要做些什麼?
  • 請檢查您的附加元件版本,並確保您使用的是 v2.0.0 或更新版本。
  • 在自動擴展配置中設定工作 minSize = 0 人員池的參數。 若已啟用公共應用程式層負載平衡器,請 minSize = 2 為每個區域設定高可用性設定。
叢集法定人數要求為何?
請注意,整個叢集無法縮減至零。 為維持叢集健康狀態並保持 etcd 法定人數,必須保持最低數量節點處於活動狀態。 若此法定人數已達標,您可將其他工作節點群組縮減至零。

是否可以將部署最佳化以進行自動調整?

是,您可以將數個 Kubernetes 特性新增至部署,以調整叢集 Autoscaler 如何考量資源要求以進行調整。

  • 污染工作者節點儲存區,只容許將具有相符容錯的部署或 Pod 部署至工作者節點儲存區。
  • 新增標籤 至預設工作者節點儲存區以外的工作者節點儲存區。 此標籤用於部署配置中,以指定 nodeAffinitynodeSelector,其會限制可部署在所標示工作者節點儲存區中的工作者節點上的工作量。
  • 請使用 Pod 中斷預算,以防止您的 Pod 發生突然的重新排程或刪除。
  • 若您正在使用 Pod 優先級,可以 編輯優先級閾值,藉此調整哪些類型的優先級會觸發擴展。 依預設,優先順序截止值為零 (0)。

是否可以搭配使用污點及容錯與自動調整的工作者節點儲存區?

是,但請確保 在工作者節點儲存區層次套用污點,以便所有現有及未來工作者節點都取得相同的污點。 然後,您必須包括 工作負載配置中的相符容錯,以便將這些工作負載排定到具有相符污點的自動調整工作者節點儲存區。 請注意,若您部署的工作負載不符合受「污點」標記的執行節點池的容忍條件,系統將不會將這些執行節點納入擴展考量,即使叢集具備足夠的容量,系統仍可能會下令增設更多執行節點。 然而,若受影響的勞動力池其資源利用率低於閾值(預設為 50%),仍會被判定為未充分利用,因此將被納入縮減規模的考量範圍。

為自動擴充準備群集

在安裝 IBM Cloud 叢集 Autoscaler 附加程式之前,您可以設定叢集以準備叢集進行自動調整。

裸機工作者節點不支援叢集 Autoscaler 附加程式。

  1. 開始之前,請 安裝必要的 CLI 及外掛程式

    • IBM Cloud CLI (ibmcloud)
    • IBM Cloud Kubernetes Service 外掛程式 (ibmcloud oc)
    • IBM Cloud Container Registry 外掛程式 (ibmcloud cr)
    • Kubernetes (kubectl)
  2. 建立標準叢集

  3. 存取您的 Red Hat OpenShift 叢集

  4. 確認 IBM Cloud Identity and Access Management 認證儲存在叢集裡。 叢集 Autoscaler 會使用此密碼對認證進行鑑別。 如果遺漏密碼,請藉由重設認證來建立密碼

    oc get secrets -n kube-system | grep storage-secret-store
    
  5. 計劃自動調整非 default 工作者節點儲存區的工作者節點儲存區,因為 default 工作者節點儲存區具有可防止自動縮減的系統元件。 包括工作者節點儲存區的標籤,以便您可以針對要部署至已啟用自動調整大小的工作者節點儲存區的工作量設定 節點親緣性。 例如,標籤可能為 app: nginx。 從下列選項進行選擇:

    • 建立除 default 工作者節點儲存區以外的 VPC標準 工作者節點儲存區,並使用您要與工作負載搭配使用的標籤,以在自動調整的工作者節點儲存區上執行。
    • default 工作者節點儲存區以外的 將標籤新增至現有工作程式儲存區
  6. 確認工作者節點儲存區具有用於自動調整的必要標籤。 在輸出中,您會看到必要的 ibm-cloud.kubernetes.io/worker-pool-id 標籤,以及您先前為節點親緣性建立的標籤。 如果您看不到這些標籤,請新增工作者節點儲存區,然後 新增節點親緣性的標籤

    ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep Labels
    

    帶有標籤的工作者池的輸出範例。

    Labels:             ibm-cloud.kubernetes.io/worker-pool-id=a1aa111111b22b22cc3c3cc444444d44-4d555e5
    
  7. 污染 您要自動調整的工作者節點儲存區,讓工作者節點儲存區不接受工作負載,但您要在自動調整的工作者節點儲存區上執行的工作負載除外。 您可以在 社群 Kubernetes 文件中進一步瞭解污染及容錯。 例如,您可以設定 use=autoscale:NoExecute 的污點。 在此範例中,NoExecute 污點收回 Pod 沒有對應於此污點的容錯。

下一步

準備好群集後,安裝群集 autoscaler 附加元件