設定工作者節點儲存區的自動調整大小

更新叢集 Autoscaler configmap,以根據您設定的最小值和最大值來自動調整工作者節點儲存區中的工作者節點。

在您編輯配置映射以啟用工作壟池的自動擴展功能後,叢集自動擴展器會根據您的工作負載需求來調整叢集規模。 這意味著您無法 調整重新平衡 您的工作池。 隨著時間推移,掃描與擴增和縮減會定期進行,並根據工作者節點數目而定,有可能需要較長的時間來完成,例如 30 分鐘。 稍後,如果您想要移除叢集 Autoscaler,必須先停用 configmap 中的每一個工作者節點儲存區。

從 1.2.4 版本開始,不再支援 maxEmptyBulkDelete 選項。 執行 kubectl edit configmap iks-ca-configmap -n kube-system 指令並刪除選項,從您的 configmap 中移除此選項。 作為替代,您可以使用 maxScaleDownParallelism 選項,該選項是在 1.2.4 版本中新增的。 如需詳細資訊,請參閱 configmap 參考資料

開始之前

  1. 編輯叢集 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
    
  2. 使用參數編輯 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 中的每一個工作者節點儲存區。
    
    
  3. 儲存配置檔。

  4. 取得叢集 Autoscaler Pod。

    oc get pods -n kube-system
    
  5. 檢閱叢集 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 設定,例如它在工作者節點擴增或縮減之前等待的時間量。

  1. 檢閱 cluster autoscaler ConfigMap 參數。

  2. 下載叢集 Autoscaler 附加程式 ConfigMap,並檢閱參數。

    oc get cm iks-ca-configmap -n kube-system -o yaml > configmap.yaml
    
  3. 開啟 configmap.yaml 檔案,並更新您要變更的設定。

  4. 重新套用叢集 Autoscaler 附加程式 configmap。

    oc apply -f configmap.yaml
    
  5. 驗證 Pod 已順利重新啟動。

    oc get pods -n kube-system | grep autoscaler
    

叢集 Autoscaler configmap 參照

balancingIgnoreLabel
在區域平衡期間要忽略的節點標籤索引鍵。 除了固定節點標籤之外,Autoscaler 還可以在區域平衡期間忽略其他 5 個節點標籤。 例如,balancingIgnoreLabel1:label1balancingIgnoreLabel2: custom-label2
coresTotal
叢集中的核心數目下限及上限。 叢集 Autoscaler 不會調整叢集超過這些數目。 預設值為 0:320000
enforceNodeGroupMinSize
必要的話,將此值設為 true,以將工作者節點儲存區擴增至已配置的大小下限。 預設值為 false
expander
當您擁有多個工作壺時,叢集自動擴展器如何決定應擴展哪個工作壺。 預設值為 random
random:在 most-podsleast-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
livenessProbePeriodSeconds
kubelet 執行存活性探測的間隔 (秒)。 預設值為 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_bucket prometheus 直方圖度量指標,以監控縮放行為。
okTotalUnreadyCount
不論 maxTotalUnreadyPercentage 值為何,容許的未備妥節點數目。 預設值為 3
OSReservedCPUMili
預留的 CPU 數量,以 MiliCPU 表示。 預設值為 30
OSReservedMemoryGi
GiB 中預留的記憶體量。 預設值為 0.3
parallelDrain
設為 true 可容許平行排除節點。 預設值為 false
prometheusScrape
設為 true 以傳送 Prometheus 度量值。 若要停止傳送度量值,請設為 false
resourcesLimitsCPU
ibm-iks-cluster-autoscaler 匣所能佔用的工作節點 CPU 最大值。 預設值為 600m
resourcesLimitsMemory
ibm-iks-cluster-autoscaler 匣子可佔用的工作節點記憶體最大容量。 預設值為 600Mi
resourcesRequestsCPU
ibm-iks-cluster-autoscaler 匣啟動時,工作節點 CPU 的最低配額。 預設值為 200m
resourcesRequestsMemory
ibm-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-system Pod 的工作者節點不會縮減。 請勿將此值設為 false,因為縮減 kube-system Pod 可能會有非預期的結果。 預設值為 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 值為 2min 值為 1