設定工作者節點儲存區的自動調整大小
更新叢集 Autoscaler configmap,以根據您設定的最小值和最大值來自動調整工作者節點儲存區中的工作者節點。
在您編輯配置映射以啟用工作壟池的自動擴展功能後,叢集自動擴展器會根據您的工作負載需求來調整叢集規模。 這意味著您無法 調整 或 重新平衡 您的工作池。 隨著時間推移,掃描與擴增和縮減會定期進行,並根據工作者節點數目而定,有可能需要較長的時間來完成,例如 30 分鐘。 稍後,如果您想要移除叢集 Autoscaler,必須先停用 configmap 中的每一個工作者節點儲存區。
從 1.2.4 版本開始,不再支援 maxEmptyBulkDelete 選項。 執行 kubectl edit configmap iks-ca-configmap -n kube-system 指令並刪除選項,從您的 configmap 中移除此選項。 作為替代,您可以使用 maxScaleDownParallelism 選項,該選項是在 1.2.4 版本中新增的。 如需詳細資訊,請參閱 configmap 參考資料。
開始之前
-
編輯叢集 Autoscaler configmap YAML 檔案。
oc edit cm iks-ca-configmap -n kube-system -o yaml輸出範例
apiVersion: v1 data: workerPoolsConfig.json: | [ {"name": "<worker_pool>","minSize": 1,"maxSize": 2,"enabled":false} ] kind: ConfigMap -
使用參數編輯 configmap,以定義叢集 Autoscaler 如何調整叢集工作者節點儲存區大小。 **附註:**除非在標準叢集的每個區域中停用了所有公用應用程式負載平衡器 (ALB),否則必須將每個區域的
minSize變更為2,以便可以分散 ALB Pod 來達到高可用性。"name": "default": 請將"default"替換為您要進行擴展的工作執行程序池的名稱或 ID。 若要列出工作執行群組,請執行ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID。 若要管理多個工作者節點儲存區,請將 JSON 行複製到以逗點區隔的行,如下所示。
[ {"name": "default","minSize": 1,"maxSize": 2,"enabled":false}, {"name": "Pool2","minSize": 2,"maxSize": 5,"enabled":true} ] ``` 叢集 Autoscaler 只能調整具有 `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`。 如果您的工作執行程序池沒有所需的標籤,請新增一個工作執行程序池,並將此工作執行程序池與叢集自動擴展器搭配使用。 {: note} - `"minSize": 1`:指定每個區域的最小工作節點數。 設定 `minSize` 不會自動觸發擴增。 `minSize` 是一個閾值,用以確保叢集自動擴展器不會將每個區域的工作節點數量縮減至低於特定數量。 如果您的叢集每個區域尚未達該數目,叢集 Autoscaler 不會擴增,直到您有需要更多資源的工作負載資源要求。 例如,如果您有工作者節點儲存區,其中三個區域各一個工作者節點(總計三個工作者節點),並將 `minSize` 設為每個區域 `4`,則叢集 Autoscaler 不會立即為每個區域佈建額外三個工作者節點(總計 12 個工作者節點)。 擴增會改為由資源要求觸發。 如果您建立的工作負載會要求 15 個工作者節點的資源,則叢集 Autoscaler 會擴增工作者節點儲存區,以滿足此要求。 現在,`minSize` 表示,即使您移除了需要該數量工作節點的工作負載,叢集自動擴展器也不會將每個區域的工作節點數量縮減至少於四個。 如需更多資訊,請參閱 [Kubernetes 文件](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#when-does-cluster-autoscaler-change-the-size-of-a-cluster){: external}。 - `"maxSize": 2`: 指定叢集自動擴展器可將每個區域的工作節點池擴展至的最大工作節點數。 這個值必須等於或大於您針對 `minSize` 設定的值。 - `"enabled": false`: 將值設定為 ` `true` `,以便叢集自動擴展器能管理工作節點池的擴展。 將此值設為 `false`,以停止叢集 Autoscaler 調整工作者節點儲存區。 稍後,如果您想要[移除叢集 Autoscaler](/docs/openshift?topic=openshift-cluster-scaling-install-addon&interface=ui#autoscaler-remove-console),必須先停用 configmap 中的每一個工作者節點儲存區。 -
儲存配置檔。
-
取得叢集 Autoscaler Pod。
oc get pods -n kube-system -
檢閱叢集 Autoscaler Pod 的
Events區段中的ConfigUpdated事件,驗證已順利更新 ConfigMap。 您的 ConfigMap 活動訊息格式如下:minSize:maxSize:PoolName:<SUCCESS|FAILED>:error message。oc describe pod -n kube-system <cluster_autoscaler_pod>輸出範例
Name: ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6 Namespace: kube-system ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ConfigUpdated 3m ibm-iks-cluster-autoscaler-857c4d9d54-gwvc6 {"1:3:default":"SUCCESS:"}
若您已為工作節點池啟用自動擴展功能,之後又向該工作節點池新增了一個區域,請重新啟動叢集自動擴展器 Pod,以便其偵測到此變更:oc delete pod -n kube-system <cluster_autoscaler_pod>。
自訂叢集自動擴展器的設定值
自訂叢集 Autoscaler 設定,例如它在工作者節點擴增或縮減之前等待的時間量。
-
當您修改除工作人員池
minSize、maxSize以外的 ConfigMap 參數,或啟用或停用工作人員池時,群集 autoscaler pod 會重新啟動。
-
檢閱 cluster autoscaler ConfigMap 參數。
-
下載叢集 Autoscaler 附加程式 ConfigMap,並檢閱參數。
oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml -
開啟
configmap.yaml檔案,並更新您要變更的設定。 -
重新套用叢集 Autoscaler 附加程式 configmap。
oc apply -f configmap.yaml -
驗證 Pod 已順利重新啟動。
oc get pods -n kube-system | grep autoscaler
叢集 Autoscaler configmap 參照
balancingIgnoreLabel- 在區域平衡期間要忽略的節點標籤索引鍵。 除了固定節點標籤之外,Autoscaler 還可以在區域平衡期間忽略其他 5 個節點標籤。 例如,
balancingIgnoreLabel1:label1、balancingIgnoreLabel2: custom-label2。 coresTotal- 叢集中的核心數目下限及上限。 叢集 Autoscaler 不會調整叢集超過這些數目。 預設值為
0:320000。 enforceNodeGroupMinSize- 必要的話,將此值設為
true,以將工作者節點儲存區擴增至已配置的大小下限。 預設值為false。 expander- 當您擁有多個工作壺時,叢集自動擴展器如何決定應擴展哪個工作壺。 預設值為
random。 random:在most-pods和least-waste之間隨機選取。most-pods:選取當擴增時能夠排定最多 Pod 的工作者節點儲存區。 如果您使用nodeSelector,請使用此方法,以確保 Pod 落在特定工作者節點上。least-waste:選取擴增後具有最少未用 CPU 的工作者節點儲存區。 如果擴增後兩個工作者節點儲存區使用的 CPU 資源數量相同,則將選取具有最少未用記憶體的工作者節點儲存區。expendablePodsPriorityCutoff- 在截止狀態下優先使用的 Pod 是可消耗的。 在縮減期間可以在不考量它們的情況下移除它們,而且它們不會導致擴增。
PodPriority設定為空值的 Pod 不是消耗性 Pod。 預設值為-10。 ignoreDaemonSetsUtilization- 在計算縮放的資源使用率時,忽略 autoscaler DaemonSet pod。 預設值為
false。 imagePullPolicy- 何時應拉取 Docker 映像檔。 預設值為
Always。 Always:每次啟動 Pod 時都取回映像檔。IfNotPresent:僅當影像尚未存在於本機時才擷取影像。 \n -Never:假設影像已存在於本機,並且從不擷取影像。kubeClientBurst- Kubernetes 用戶端允許的連發。 預設值為
300。 kubeClientQPS- Kubernetes 用戶端的 QPS 值。 耗盡快速寄發之後接受的查詢數。 預設值為
5.0。 livenessProbeFailureThreshold- 在 Pod 啟動且第一個存活性探測失敗之後,
kubelet重試存活性探測的次數。 達到失敗臨界值之後,即會重新啟動儲存器,並將 Pod 標示為Unready以進行就緒性探測 (如果適用的話)。 預設值為3。 livenessProbePeriodSecondskubelet執行存活性探測的間隔 (秒)。 預設值為600。livenessProbeTimeoutSeconds- 活性探測逾時之前的時間 (以秒為單位)。 預設值為
10。 logLevel- autoscaler 的記載層次。 記錄層級為
info,debug,warning,error。預設值為info。 maxBulkSoftTaintCount- 可同時透過
PreferNoSchedule指令標記或解除標記的工人節點最大數量。 若要停用此特性,請將其設定為0。 預設值為0。 maxBulkSoftTaintTime- 工作節點同時被
PreferNoSchedule標記為受污染或解除污染狀態的最長持續時間。 預設值為10m。 maxDrainParallelism- 仍需要排除且可平行排除及刪除的節點數目上限。 預設值為
1。 maxEmptyBulkDelete- 僅支援早於 1.2.4 Autoscaler 可同時刪除的最大空節點數量。 預設值為
10。 maxFailingTime- 在自動重新啟動 Pod 之前,叢集 Autoscaler Pod 在沒有完成動作的情況下執行的時間上限 (分鐘)。 預設值為
15m。 maxGracefulTerminationSec- autoscaler 在縮減節點時等待 Pod 結束的秒數上限。 預設值為
600。 maxInactivity- 在自動重新啟動 Pod 之前,叢集 Autoscaler Pod 在沒有任何已記錄活動的情況下執行的時間上限 (分鐘)。 預設值為
10m。 maxNodeGroupBinpackingDuration- 每個工作人員池在 bin packing 模擬中花費的最長時間(以秒計)。 預設值為
10s。 maxNodeProvisionTime- 工作節點在開始進行資源配置前,最多可耗費的時間(以分鐘為單位),超過此時間後,叢集自動擴展器將取消擴展請求。 預設值為
120m。 maxNodeSkipevalTimeTrackerEnabled- 1.35 及更新版本:當評估過程中跳過節點時,啟用額外的指標來分析 Cluster Autoscaler 的縮減行為。 預設值為
false。 - 啟用時,群集 Autoscaler 會在 CA pod 內公開 metric
cluster_autoscaler_skipped_scale_events_count,以監控跳過的縮放事件。 maxNodesPerScaleUp- 單次擴充可增加的最大節點數。 這僅用於最佳化 autoscaler 演算法延遲,不應用作擴增的速率限制。 預設值為
1000。 maxPodEvictionTime- autoscaler 在停止之前嘗試收回 Pod 的時間上限。 預設值為
2m。 maxRetryGap- 無法連接至服務 API 之後重試的時間上限 (以秒為單位)。 使用此參數及
retryAttempts參數來調整叢集 Autoscaler 的重試時間範圍。 預設值為60。 parallelDrain- 設為
true可容許平行排除節點。 預設值為false。 - 已棄用
parallelDrain設定 (映射至--parallel-drain) 僅在群集自動升級器版本 1.26- 1.31 中支援。 對於 1.32 及以後的版本,請改用--max-drain-parallelism和--max-scale-down-parallelism。 maxScaleDownParallelism- 可以並行刪除的最大節點數,包括空節點和需要排空的節點。 預設值為
10。 maxTotalUnreadyPercentage- 叢集中未備妥節點的百分比上限。 超出此值之後,autoscaler 會停止作業。 預設值為
45。 memoryTotal- 叢集的記憶體數量下限及上限 (GB)。 叢集 Autoscaler 不會調整叢集超過這些數目。 預設值為
0:6400000。 minReplicaCount- replicaSet 或複製控制器在縮減規模時必須允許刪除的最小複製數量。 預設值為
0。 newPodScaleUpDelay- 擴增不會考量比此值 (以秒為單位) 晚的 Pod。 可透過
cluster-autoscaler.kubernetes.io/pod-scale-up-delay註釋針對個別 Pod 增加。 預設值為0s。 nodeDeleteDelayAfterTaint- 在將節點污染之後,在刪除節點之前等待的時間 (以秒為單位)。 預設值為
5s。 nodeDeletionBatcherInterval- autoscaler 可以收集節點以批次刪除它們的時間 (分鐘)。 預設值為
0m。 nodeRemovalLatencyTrackingEnabled- 1.35 及更新版本:啟用與節點縮放延遲相關的直方圖指標。 這些指標可提供 Cluster Autoscaler 移除節點或在再次需要節點時取消移除所需時間的能見度。 預設值為
false。 - 啟用時,群集 Autoscaler 會從 CA pod 開啟
cluster_autoscaler_node_removal_latency_seconds_bucketprometheus 直方圖度量指標,以監控縮放行為。 okTotalUnreadyCount- 不論
maxTotalUnreadyPercentage值為何,容許的未備妥節點數目。 預設值為3。 OSReservedCPUMili- 預留的 CPU 數量,以 MiliCPU 表示。 預設值為
30。 OSReservedMemoryGi- GiB 中預留的記憶體量。 預設值為
0.3。 parallelDrain- 設為
true可容許平行排除節點。 預設值為false。 prometheusScrape- 設為
true以傳送 Prometheus 度量值。 若要停止傳送度量值,請設為false。 resourcesLimitsCPUibm-iks-cluster-autoscaler匣所能佔用的工作節點 CPU 最大值。 預設值為600m。resourcesLimitsMemoryibm-iks-cluster-autoscaler匣子可佔用的工作節點記憶體最大容量。 預設值為600Mi。resourcesRequestsCPUibm-iks-cluster-autoscaler匣啟動時,工作節點 CPU 的最低配額。 預設值為200m。resourcesRequestsMemoryibm-iks-cluster-autoscaler匣啟動時,工作節點記憶體的最低起始量。 預設值為200Mi。retryAttempts- 在無法連接至服務 API 之後重試的次數上限。 使用此參數和
maxRetryGap參數調整群集自動調整程式的重試視窗。| 預設值為64。 scaleDownCandidatesPoolMinCount- 當先前反覆運算中的部分候選項不再有效時,視為要縮減的其他非空候選項的節點數目下限。 預設值為
50。 scaleDownCandidatesPoolRatio- 當前一個反覆運算中的部分候選項不再有效時,被視為其他非空候選項以縮減的節點比例。 預設值為
0.1。 scaleDownDelayAfterAdd- 擴增縮減評估回復之後的時間量。 預設值為
10m。
scaleDownDelayAfterDelete | 節點刪除後恢復縮放評估的時間。 預設值與 scan-interval 相同,即 1m。
scaleDownDelayAfterFailure- 在失敗之後 autoscaler 必須等待的時間量 (分鐘)。 預設值為
3m。 scaleDownEnabled- 設為
false時,autoscaler 不會執行縮減。 預設值為true。 scaleDownGPUUtilizationThreshold- 節點上所有 Pod 執行的 GPU 請求總和除以節點的可分配資源。 當資源請求小於此臨界值時,節點可以考慮縮小。 利用率計算僅考慮 GPU 資源。 CPU 和記憶體使用率會被忽略。 預設值為
0.5。 scaleDownNonEmptyCandidatesCount- 在一次迭代中視為隨耗損縮減的候選非空節點的最大數目。| 預設值為
30。 scaleDownUnneededTime- 工作節點在進行縮減規模之前,必須處於閒置狀態的時間(以分鐘為單位)。 預設值為
10m。 scaleDownUnreadyEnabled- 設為
true時,會排定未備妥節點進行縮減。 預設值為true。 scaleDownUnreadyTime- 在考量縮減未備妥節點之前,autoscaler 必須等待的時間量 (分鐘)。 預設值為
20m。 scaleDownUtilizationThreshold- 工作節點的使用率閾值。 若工作節點的使用率低於閾值,則該工作節點將被視為已縮減規模。 工作節點利用率是將所有在該工作節點上運行的 Pod 所請求的 CPU 和記憶體資源總和,除以該工作節點的資源容量後得出的數值。| 預設值為
0.5。 scanInterval- 設定叢集 Autoscaler 掃描觸發擴增或縮減的工作負載用量的頻率(分鐘)。 預設值為
1m。 skipNodesWithLocalStorage- 如果設為
true,則具有能將資料儲存至本端儲存空間的 Pod 的工作者節點不會縮減。 預設值為true。 skipNodesWithSystemPods- 如果設為
true,則具有kube-systemPod 的工作者節點不會縮減。 請勿將此值設為false,因為縮減kube-systemPod 可能會有非預期的結果。 預設值為true。 unremovableNodeRecheckTimeout- autoscaler 重新檢查先前嘗試無法移除的節點之前的逾時 (分鐘)。 預設值為
5m。 workerPoolsConfig.json- 您要自動擴充的 Worker 池,包括其每個區域的最小和最大 Worker 節點數,格式為
{"name": "<pool_name>","minSize": 1,"maxSize": 2,"enabled":false}。 POOL_NAME: 您要啟用或停用其自動擴展功能的工作者群組名稱或 ID。 若要列出可用的工作執行程序池,請執行ibmcloud oc worker-pool ls --cluster CLUSTER_NAME_OR_ID。maxSize: <number_of_workers>: 叢集自動擴展器可將每個區域的工人節點數量擴展至的上限。 該值必須等於或大於您為「minSize: <number_of_workers>」大小所設定的值。min=<number_of_workers>: 叢集自動擴展器可將每個區域的工作節點數量縮減至的最低數量。 如果您需要您的 ALB pod 為了高可用性而分散,您必須將這個值至少設定為 2。 如果您 已停用 標準叢集各區域中的所有公開 ALB,則可將此值設定為0。 請記住,設定min大小不會自動觸發擴增。min的數值是一個閾值,用以確保叢集自動擴展器不會將每個區域的工作節點數量縮減至低於此最低數值。 如果您的叢集每個區域尚未達到這個工作者節點數目,叢集 Autoscaler 不會擴增,直到您有需要更多資源的工作負載資源要求。enabled=:當true時,群集自動分級器可以縮放您的工作人員池。false時,群集自動分量器不會縮放 Worker 池。 日後若要移除叢集自動擴展器,必須先在ConfigMap中停用每個工作叢集。 若您已為工作節點池啟用自動擴展功能,之後又向該工作節點池新增了一個區域,請重新啟動叢集自動擴展器 Pod,以便其偵測到此變更:oc delete pod -n kube-system <cluster_autoscaler_pod>。- 依預設,
default工作者節點儲存區並未啟用,其中max值為2,min值為1。