日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用負(fù)載熱點(diǎn)打散重調(diào)度

更新時(shí)間:

ack-koordinator組件提供負(fù)載熱點(diǎn)打散重調(diào)度能力,可以感知集群內(nèi)節(jié)點(diǎn)負(fù)載的變化,自動(dòng)優(yōu)化超過負(fù)載水位安全閾值的節(jié)點(diǎn),防止出現(xiàn)負(fù)載極端不均衡的情況。本文介紹如何使用負(fù)載熱點(diǎn)打散重調(diào)度及其高級配置參數(shù)。

使用限制

  • 僅支持ACK集群Pro版。具體操作,請參見創(chuàng)建ACK托管集群

  • 使用負(fù)載熱點(diǎn)打散重調(diào)度,需滿足以下版本要求。

    組件

    版本要求

    ACK Scheduler

    v1.22.15-ack-4.0及以上,v1.24.6-ack-4.0及以上

    ack-koordinator

    v1.1.1-ack.1及以上

    Helm

    v3.0及以上

重要
  • 重調(diào)度器只負(fù)責(zé)驅(qū)逐,調(diào)度過程仍由ACK Scheduler負(fù)責(zé)。在使用重調(diào)度功能時(shí),建議和負(fù)載感知調(diào)度搭配使用,ACK Scheduler將盡量避免Pod被重新分配到熱點(diǎn)節(jié)點(diǎn)。

  • 重調(diào)度在執(zhí)行過程中會(huì)先驅(qū)逐舊Pod,再創(chuàng)建新Pod。請確保您的應(yīng)用有充足的冗余副本,避免驅(qū)逐時(shí)影響應(yīng)用可用性。

  • 重調(diào)度在驅(qū)逐時(shí)使用的是Kubernetes標(biāo)準(zhǔn)的驅(qū)逐接口,請確保應(yīng)用Pod自身邏輯具備可重入性,不會(huì)因驅(qū)逐后重新啟動(dòng)而導(dǎo)致服務(wù)受損。

費(fèi)用說明

ack-koordinator組件本身的安裝和使用是免費(fèi)的,不過需要注意的是,在以下場景中可能產(chǎn)生額外的費(fèi)用:

  • ack-koordinator是非托管組件,安裝后將占用Worker節(jié)點(diǎn)資源。您可以在安裝組件時(shí)配置各模塊的資源申請量。

  • ack-koordinator默認(rèn)會(huì)將資源畫像、精細(xì)化調(diào)度等功能的監(jiān)控指標(biāo)以Prometheus的格式對外透出。若您配置組件時(shí)開啟了ACK-Koordinator開啟Prometheus監(jiān)控指標(biāo)選項(xiàng)并使用了阿里云Prometheus服務(wù),這些指標(biāo)將被視為自定義指標(biāo)并產(chǎn)生相應(yīng)費(fèi)用。具體費(fèi)用取決于您的集群規(guī)模和應(yīng)用數(shù)量等因素。建議您在啟用此功能前,仔細(xì)閱讀阿里云Prometheus計(jì)費(fèi)說明,了解自定義指標(biāo)的免費(fèi)額度和收費(fèi)策略。您可以通過賬單和用量查詢,監(jiān)控和管理您的資源使用情況。

負(fù)載熱點(diǎn)打散重調(diào)度介紹

負(fù)載感知調(diào)度

調(diào)度器支持負(fù)載感知調(diào)度,能夠在調(diào)度時(shí)選擇負(fù)載較低的節(jié)點(diǎn)運(yùn)行新的Pod。節(jié)點(diǎn)的利用率會(huì)隨著時(shí)間、集群環(huán)境變化、工作負(fù)載的流量或請求等動(dòng)態(tài)變化,繼而導(dǎo)致集群內(nèi)節(jié)點(diǎn)間原本負(fù)載均衡的情況被打破,甚至有可能出現(xiàn)極端負(fù)載不均衡的情況,影響到工作負(fù)載運(yùn)行時(shí)質(zhì)量。ack-koordinator組件提供重調(diào)度能力,防止負(fù)載出現(xiàn)極端不均衡的情況。通過將負(fù)載感知調(diào)度和熱點(diǎn)打散重調(diào)度結(jié)合使用,可以獲得集群良好的負(fù)載均衡效果。關(guān)于負(fù)載感知調(diào)度,請參見使用負(fù)載感知調(diào)度

Koordinator Descheduler模塊工作原理

ack-koordinator組件提供Koordinator Descheduler模塊,其中LowNodeLoad插件負(fù)責(zé)感知負(fù)載水位并完成熱點(diǎn)打散重調(diào)度工作。與Kubernetes原生的Descheduler的插件LowNodeUtilization不同,LowNodeLoad是根據(jù)節(jié)點(diǎn)真實(shí)利用率決策重調(diào)度,而LowNodeUtilization是根據(jù)資源分配率決策重調(diào)度。

模塊執(zhí)行過程

Koordinator Descheduler模塊周期性運(yùn)行,每個(gè)周期內(nèi)的執(zhí)行過程分為以下三個(gè)階段。

koorle-descheduler執(zhí)行過程

  1. 數(shù)據(jù)收集:獲取集群內(nèi)的節(jié)點(diǎn)和工作負(fù)載信息,以及相關(guān)的資源利用率數(shù)據(jù)。

  2. 策略插件執(zhí)行。

    下文以LowNodeLoad為例。

    1. 篩選負(fù)載熱點(diǎn)節(jié)點(diǎn)。關(guān)于節(jié)點(diǎn)分類,請參見下文LowNodeLoad負(fù)載水位參數(shù)說明

    2. 遍歷熱點(diǎn)節(jié)點(diǎn),從中篩選可以遷移的Pod,并進(jìn)行排序。關(guān)于Pod打分排序,請參見下文Pod打分策略

    3. 遍歷每個(gè)待遷移的Pod,檢查其是否滿足遷移條件,綜合考慮集群容量、資源利用率水位、副本數(shù)比例等約束。詳細(xì)信息,請參見下文負(fù)載熱點(diǎn)打散重調(diào)度策略說明

    4. 若滿足條件則將Pod歸類為待遷移副本,若不滿足則繼續(xù)遍歷其他Pod和熱點(diǎn)節(jié)點(diǎn)。

  3. 容器驅(qū)逐遷移:針對待遷移的Pod發(fā)起Evict驅(qū)逐操作。關(guān)于Evict驅(qū)逐,請參見Evict驅(qū)逐

LowNodeLoad負(fù)載水位參數(shù)說明

LowNodeLoad插件有兩個(gè)重要的參數(shù)。

  • highThresholds負(fù)載的熱點(diǎn)水位。僅超過該閾值的節(jié)點(diǎn)上的Pod會(huì)參與重調(diào)度,低于該閾值的節(jié)點(diǎn)上的Pod不會(huì)被重調(diào)度。建議您同時(shí)開啟調(diào)度器的負(fù)載感知調(diào)度能力,請參見策略說明。關(guān)于兩者如何搭配使用,請參見負(fù)載感知調(diào)度和熱點(diǎn)打散重調(diào)度如何搭配使用?

  • lowThresholds:負(fù)載的空閑水位。

如果所有節(jié)點(diǎn)水位均高于 lowThresholds,表明此時(shí)集群整體水位偏高,即便有節(jié)點(diǎn)水位大于highThresholdsKoordinator Descheduler也不會(huì)執(zhí)行重調(diào)度。

以下圖為例,將lowThresholds設(shè)置為45%,將highThresholds設(shè)置為70%,那么節(jié)點(diǎn)的分類標(biāo)準(zhǔn)如下。同理,如果lowThresholdshighThresholds的值發(fā)生變更,節(jié)點(diǎn)的分類標(biāo)準(zhǔn)也會(huì)相應(yīng)發(fā)生變化。

image

資源利用率數(shù)據(jù)默認(rèn)每分鐘更新一次,粒度為最近5分鐘的平均值。

  • 空閑節(jié)點(diǎn)(Idle Node):資源利用率低于45%的節(jié)點(diǎn)。

  • 正常節(jié)點(diǎn)(Normal Node):資源利用率高于等于45%且低于等于70%的節(jié)點(diǎn)。此節(jié)點(diǎn)的負(fù)載水位區(qū)間是期望達(dá)到的合理區(qū)間范圍。

  • 熱點(diǎn)節(jié)點(diǎn)(Hotspot Node):資源利用率高于70%的節(jié)點(diǎn)。熱點(diǎn)節(jié)點(diǎn)將驅(qū)逐一部分Pod,降低負(fù)載水位,使其不超過70%。

負(fù)載熱點(diǎn)打散重調(diào)度策略說明

策略名稱

說明

熱點(diǎn)檢查重試次數(shù)策略

為了確保熱點(diǎn)識(shí)別的準(zhǔn)確性,避免部分毛刺監(jiān)控?cái)?shù)據(jù)觸發(fā)應(yīng)用頻繁遷移,Koordinator Descheduler支持為熱點(diǎn)檢查配置重試次數(shù)。只有節(jié)點(diǎn)連續(xù)多次觸發(fā)閾值時(shí)才會(huì)被識(shí)別為熱點(diǎn)節(jié)點(diǎn)。

節(jié)點(diǎn)排序策略

在識(shí)別到的熱點(diǎn)節(jié)點(diǎn)中,Koordinator Descheduler會(huì)按資源用量從高到低的順序,依次對節(jié)點(diǎn)發(fā)起重調(diào)度。其中,節(jié)點(diǎn)排序過程中會(huì)依次比較內(nèi)存資源用量和CPU資源用量,優(yōu)先選取資源用量更高的節(jié)點(diǎn)。

Pod打分策略

對于每個(gè)熱點(diǎn)節(jié)點(diǎn),Koordinator Descheduler會(huì)對其中的Pod逐個(gè)打分排序,依次發(fā)起驅(qū)逐操作,將其遷移到空閑節(jié)點(diǎn)上。比較順序如下:

  1. 優(yōu)先級(Priority)更低的Pod,未設(shè)置時(shí)值為0,表示優(yōu)先級最低。

  2. QoS等級更低的Pod。

  3. 對于優(yōu)先級、QoS等級相同的Pod,Koordinator Descheduler會(huì)綜合考慮資源使用率、啟動(dòng)時(shí)間等因素進(jìn)行排序。

說明

若您對Pod的驅(qū)逐順序有要求,建議您考慮對Pod配置不同的優(yōu)先級或QoS。

篩選策略

Koordinator Descheduler模塊支持為Pod和Node配置多種篩選參數(shù),方便您在使用過程中進(jìn)行灰度控制。

  • 按Namespace過濾:指定開啟或關(guān)閉某些Namespace下Pod的重調(diào)度能力。詳細(xì)信息,請參見高級配置中關(guān)于evictableNamespaces字段的描述。

  • 按Pod Selector過濾:指定Pod的Label Selector,選定開啟重調(diào)度能力的Pod范圍。詳細(xì)信息,請參見高級配置中關(guān)于podSelectors字段的描述。

  • 按Node Selector過濾:指定Node的Label Selector,選定開啟重調(diào)度能力的Node范圍。詳細(xì)信息,請參見高級配置中關(guān)于nodeSelector字段的描述。

前置檢查策略

Koordinator Descheduler模塊支持在Pod遷移前提供前置檢查能力,確保每個(gè)Pod的遷移過程盡量安全。

  • 檢查節(jié)點(diǎn)親和性和資源調(diào)度容量,確保Pod在重調(diào)度后,集群內(nèi)有可以匹配的Node節(jié)點(diǎn)后再發(fā)起遷移。檢查的屬性包括Node Affinity、Node Selector、Toleration以及節(jié)點(diǎn)未分配的資源容量。

  • 檢查空閑節(jié)點(diǎn)實(shí)際的資源用量情況,確保節(jié)點(diǎn)在收到新Pod后不會(huì)觸及熱點(diǎn)水位,避免出現(xiàn)頻繁的抖動(dòng)問題。

    計(jì)算公式:空閑節(jié)點(diǎn)實(shí)際空閑容量 = (highThresholds - 空閑節(jié)點(diǎn)當(dāng)前負(fù)載) * 空閑節(jié)點(diǎn)總?cè)萘?/b>

    計(jì)算示例:假設(shè)空閑節(jié)點(diǎn)的負(fù)載水位是20%,highThresholds是70%,節(jié)點(diǎn)CPU總?cè)萘繛?6核。則節(jié)點(diǎn)實(shí)際空閑容量為48核( (70% - 20%) * 96)。此時(shí),Koordinator Descheduler會(huì)確保所有遷移Pod申請的CPU總量(Request)不超過48核。

遷移流量控制策略

為了滿足Pod在遷移過程中應(yīng)用的高可用要求,Koordinator Descheduler模塊還提供多種類型的限制能力,支持配置節(jié)點(diǎn)維度、命名空間維度以及工作負(fù)載維度下處于遷移狀態(tài)Pod的最大數(shù)量。此外,它還提供基于時(shí)間窗口的流控機(jī)制,保證同一Workload下Pod的遷移不會(huì)過于頻繁。Koordinator Descheduler同樣兼容Kubernetes社區(qū)的干擾預(yù)算機(jī)制PDB(Pod Disruption Budgets),支持配置更精細(xì)的管理策略來保障工作負(fù)載的高可用。

可觀測性策略

您可以通過Event觀測重調(diào)度的遷移過程,并在詳細(xì)信息中查看遷移的具體原因和當(dāng)前狀態(tài)。樣例如下。

kubectl get event | grep stress-demo-588f9646cf-7****
55s         Normal    Evicting           podmigrationjob/3bf8f623-4d10-4fc5-ab4e-2bead3c4****   Pod "default/stress-demo-588f9646cf-7****" evicted from node "cn-beijing.10.XX.XX.53" by the reason "node is overutilized, cpu usage(76.72%)>threshold(50.00%)"
22s         Normal    EvictComplete      podmigrationjob/3bf8f623-4d10-4fc5-ab4e-2bead3c4****   Pod "default/stress-demo-588f9646cf-7****" has been evicted
55s         Normal    Descheduled        pod/stress-demo-588f9646cf-7****                       Pod evicted from node "cn-beijing.10.XX.XX.53" by the reason "node is overutilized, cpu usage(76.72%)>threshold(50.00%)"
55s         Normal    Killing            pod/stress-demo-588f9646cf-7****                       Stopping container stress

步驟一:安裝或修改組件ack-koordinator并開啟重調(diào)度

未安裝ack-koordinator組件

安裝ack-koordinator組件,并在安裝組件 ack-koordinator(ack-slo-manager)頁面選中ack-koordinator開啟重調(diào)度模塊。安裝ack-koordinator組件,請參見安裝ack-koordinator組件

已安裝ack-koordinator組件

修改ack-koordinator組件,并在ack-koordinator參數(shù)配置頁面選中ack-koordinator開啟重調(diào)度模塊。修改ack-koordinator組件,請參見修改ack-koordinator組件

步驟二:開啟負(fù)載熱點(diǎn)打散重調(diào)度插件

  1. 使用如下YAML文件,創(chuàng)建koord-descheduler-config.yaml。

    koord-descheduler-config.yaml是ConfigMap格式的對象,用于啟用重調(diào)度插件LowNodeLoad。

    展開查看YAML文件內(nèi)容

    # koord-descheduler-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: koord-descheduler-config
      namespace: kube-system
    data:
      koord-descheduler-config: |
        # 以下為koord-desheduler系統(tǒng)配置,請保持不變。
        apiVersion: descheduler/v1alpha2
        kind: DeschedulerConfiguration
        leaderElection:
          resourceLock: leases
          resourceName: koord-descheduler
          resourceNamespace: kube-system
        deschedulingInterval: 120s # 執(zhí)行周期間隔,120s執(zhí)行一次重調(diào)度插件。
        dryRun: false # 全局只讀模式開關(guān),開啟后Koordinator Descheduler整體不做任何操作。
        # 以上為系統(tǒng)配置。
    
        profiles:
        - name: koord-descheduler
          plugins:
            deschedule:
              disabled:
                - name: "*"
            balance:
              enabled:
                - name: LowNodeLoad # 配置開啟負(fù)載熱點(diǎn)打散插件LowNodeLoad。
            evict:
              disabled:
                - name: "*"
              enabled:
                - name: MigrationController # 配置開啟驅(qū)逐遷移控制器。
    
          pluginConfig:
          - name: MigrationController # 重調(diào)度遷移控制參數(shù)。
            args:
              apiVersion: descheduler/v1alpha2
              kind: MigrationControllerArgs
              defaultJobMode: EvictDirectly
    
          - name: LowNodeLoad # 負(fù)載熱點(diǎn)打散插件配置。
            args:
              apiVersion: descheduler/v1alpha2
              kind: LowNodeLoadArgs
    
              lowThresholds:  # lowThresholds表示空閑節(jié)點(diǎn)的準(zhǔn)入水位閾值,判斷條件為“所有資源維度均低于閾值”。
                cpu: 20 # CPU利用率為20%。
                memory: 30  # Memory利用率為30%。
              highThresholds: # highThresholds表示熱點(diǎn)節(jié)點(diǎn)的準(zhǔn)入水位閾值,判斷條件為“只要有一個(gè)資源維度均高于閾值”。
                cpu: 50  # CPU利用率為50%。
                memory: 60 # Memory利用率為60%。
    
              evictableNamespaces: # 參與重調(diào)度的Namespace,include和exclude是互斥的,只能配置其中一種。
                include: # include表示只處理下面配置的Namespace。
                  - default
                # exclude: # exclude表示需要排除的Namespace。
                  # - "kube-system"
                  # - "koordinator-system"
  2. 執(zhí)行如下命令,將配置更新到集群。

    kubectl apply -f koord-descheduler-config.yaml
  3. 執(zhí)行如下命令,重啟重調(diào)度器模塊Koordinator Descheduler

    重啟重調(diào)度器模塊Koordinator Descheduler后,Koordinator Descheduler會(huì)使用修改后的最新配置。

    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 0
    deployment.apps/ack-koord-descheduler scaled
    kubectl -n kube-system scale deploy ack-koord-descheduler --replicas 1
    deployment.apps/ack-koord-descheduler scaled

步驟三(可選):開啟調(diào)度器負(fù)載均衡插件

開啟調(diào)度器負(fù)載均衡插件,以獲得集群良好的負(fù)載均衡效果。具體操作步驟,請參見步驟一:開啟負(fù)載感知調(diào)度

步驟四:驗(yàn)證重調(diào)度能力

下文以擁有3臺(tái)104核 396 GB節(jié)點(diǎn)的集群為例進(jìn)行說明。

  1. 使用如下YAML文件,創(chuàng)建stress-demo.yaml

    展開查看YAML文件內(nèi)容。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: stress-demo
      namespace: default
      labels:
        app: stress-demo
    spec:
      replicas: 6
      selector:
        matchLabels:
          app: stress-demo
      template:
        metadata:
          name: stress-demo
          labels:
            app: stress-demo
        spec:
          containers:
            - args:
                - '--vm'
                - '2'
                - '--vm-bytes'
                - '1600M'
                - '-c'
                - '2'
                - '--vm-hang'
                - '2'
              command:
                - stress
              image: polinux/stress
              imagePullPolicy: Always
              name: stress
              resources:
                limits:
                  cpu: '2'
                  memory: 4Gi
                requests:
                  cpu: '2'
                  memory: 4Gi
          restartPolicy: Always
  2. 執(zhí)行如下命令,創(chuàng)建壓測Pod。

    kubectl create -f stress-demo.yaml
    deployment.apps/stress-demo created
  3. 執(zhí)行如下命令,觀察Pod的狀態(tài),直到它開始運(yùn)行。

    kubectl get pod -o wide

    預(yù)期輸出:

    NAME                           READY   STATUS    RESTARTS   AGE   IP            NODE                    NOMINATED NODE   READINESS GATES
    stress-demo-588f9646cf-s****   1/1     Running   0          82s   10.XX.XX.53   cn-beijing.10.XX.XX.53   <none>           <none>

    可以看到,Pod stress-demo-588f9646cf-s****調(diào)度在節(jié)點(diǎn)cn-beijing.10.XX.XX.53上。

  4. 提升節(jié)點(diǎn)cn-beijing.10.XX.XX.53的負(fù)載水位,然后執(zhí)行如下命令,檢查每個(gè)Node節(jié)點(diǎn)的負(fù)載。

    kubectl top node

    預(yù)期輸出:

    NAME                      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
    cn-beijing.10.XX.XX.215   17611m       17%    24358Mi         6%
    cn-beijing.10.XX.XX.53    63472m       63%    11969Mi         3%

    可以看到,節(jié)點(diǎn)cn-beijing.10.XX.XX.53的負(fù)載較高,為63%,已經(jīng)超過配置的熱點(diǎn)水位50%。節(jié)點(diǎn)cn-beijing.10.XX.XX.215負(fù)載較低,為17%,低于配置的空閑水位20%。

  5. 開啟重調(diào)度。具體操作,請參見步驟二:開啟負(fù)載熱點(diǎn)打散重調(diào)度插件

  6. 執(zhí)行如下命令,觀察Pod變化。

    等待重調(diào)度器檢查熱點(diǎn)節(jié)點(diǎn),并執(zhí)行驅(qū)逐遷移操作。

    說明

    判定為熱點(diǎn)節(jié)點(diǎn)的默認(rèn)條件為連續(xù)5次檢查節(jié)點(diǎn)均超過熱點(diǎn)水位,即10分鐘。

    kubectl get pod -w

    預(yù)期輸出:

    NAME                           READY   STATUS               RESTARTS   AGE     IP           NODE                     NOMINATED NODE   READINESS GATES
    stress-demo-588f9646cf-s****   1/1     Terminating          0          59s   10.XX.XX.53    cn-beijing.10.XX.XX.53     <none>           <none>
    stress-demo-588f9646cf-7****   1/1     ContainerCreating    0          10s   10.XX.XX.215   cn-beijing.10.XX.XX.215    <none>           <none>
  7. 執(zhí)行如下命令,觀察Event。

    kubectl get event | grep stress-demo-588f9646cf-s****

    預(yù)期輸出:

    2m14s       Normal    Evicting            podmigrationjob/00fe88bd-8d4c-428d-b2a8-d15bcdeb****   Pod "default/stress-demo-588f9646cf-s****" evicted from node "cn-beijing.10.XX.XX.53" by the reason "node is overutilized, cpu usage(68.53%)>threshold(50.00%)"
    101s        Normal    EvictComplete       podmigrationjob/00fe88bd-8d4c-428d-b2a8-d15bcdeb****   Pod "default/stress-demo-588f9646cf-s****" has been evicted
    2m14s       Normal    Descheduled         pod/stress-demo-588f9646cf-s****                       Pod evicted from node "cn-beijing.10.XX.XX.53" by the reason "node is overutilized, cpu usage(68.53%)>threshold(50.00%)"
    2m14s       Normal    Killing             pod/stress-demo-588f9646cf-s****                       Stopping container stress

    預(yù)期輸出為遷移記錄,可以看出結(jié)果符合預(yù)期。熱點(diǎn)節(jié)點(diǎn)上的Pod被重調(diào)度到其他節(jié)點(diǎn)。

高級配置參數(shù)

Koordinator Descheduler模塊高級配置參數(shù)介紹

Koordinator Descheduler的所有參數(shù)配置以ConfigMap形式提供,以下展示了負(fù)載熱點(diǎn)打散重調(diào)度的高級配置參數(shù)格式。

展開查看YAML文件內(nèi)容。

# koord-descheduler-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: koord-descheduler-config
  namespace: kube-system
data:
  koord-descheduler-config: |
    # 以下為koord-desheduler系統(tǒng)配置,請保持不變。
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    leaderElection:
      resourceLock: leases
      resourceName: koord-descheduler
      resourceNamespace: kube-system
    deschedulingInterval: 120s # 執(zhí)行周期間隔,120s執(zhí)行一次重調(diào)度插件。
    dryRun: false # 全局只讀模式開關(guān),開啟后koord-descheduler整體不做任何操作。
    # 以上為系統(tǒng)配置。

    profiles:
    - name: koord-descheduler
      plugins:
        deschedule:
          disabled:
            - name: "*"
        balance:
          enabled:
            - name: LowNodeLoad # 配置開啟負(fù)載熱點(diǎn)打散插件LowNodeLoad。
        evict:
          disabled:
            - name: "*"
          enabled:
            - name: MigrationController # 配置開啟驅(qū)逐遷移控制器。

      pluginConfig:
      - name: MigrationController # 重調(diào)度遷移控制參數(shù)。
        args:
          apiVersion: descheduler/v1alpha2
          kind: MigrationControllerArgs
          defaultJobMode: EvictDirectly
          maxMigratingPerNode: 1 # 每個(gè)節(jié)點(diǎn)處于遷移狀態(tài)的Pod的最大數(shù)量。
          maxMigratingPerNamespace: 1  # 每個(gè)Namespace處于遷移狀態(tài)的Pod的最大數(shù)量。
          maxMigratingPerWorkload: 1 # 每個(gè)Workload(例如Deployment)中處于遷移狀態(tài)的Pod的最大數(shù)量。
          maxUnavailablePerWorkload: 2 # 每個(gè)Workload(例如Deployment)最大不可用副本數(shù)。
          evictLocalStoragePods: false # 是否允許配置了HostPath或EmptyDir的Pod參與重調(diào)度
          objectLimiters:
            workload: # Workload級別Pod遷移的流量控制.默認(rèn)為首次驅(qū)逐后,5分鐘內(nèi)最多遷移1個(gè)副本。
              duration: 5m
              maxMigrating: 1

      - name: LowNodeLoad # 負(fù)載熱點(diǎn)打散插件配置。
        args:
          apiVersion: descheduler/v1alpha2
          kind: LowNodeLoadArgs

          lowThresholds:  # lowThresholds表示空閑節(jié)點(diǎn)的準(zhǔn)入水位閾值,判斷條件為“所有資源維度均低于閾值”。
            cpu: 20 # CPU利用率為20%。
            memory: 30  # Memory利用率為30%。
          highThresholds: # highThresholds表示熱點(diǎn)節(jié)點(diǎn)的準(zhǔn)入水位閾值,判斷條件為“只要有一個(gè)資源維度均高于閾值”。
            cpu: 50  # CPU利用率為50%。
            memory: 60 # Memory利用率為60%。

          anomalyCondition: # 熱點(diǎn)節(jié)點(diǎn)檢查配置。
            consecutiveAbnormalities: 5 # 連續(xù)多個(gè)執(zhí)行周期檢查中,均超過highThresholds的節(jié)點(diǎn),才會(huì)被判定為熱點(diǎn)節(jié)點(diǎn)。熱點(diǎn)節(jié)點(diǎn)被驅(qū)逐后會(huì)重新計(jì)數(shù)。

          evictableNamespaces: # 參與重調(diào)度的Namespace。include和exclude是互斥的,只能配置其中一種。
            include: # include表示只處理下面配置的Namespace。
              - default
            # exclude: # exclude表示需要排除的Namespace。
              # - "kube-system"
              # - "koordinator-system"

          nodeSelector: # 只處理指定的部分節(jié)點(diǎn)。
            matchLabels:
              alibabacloud.com/nodepool-id: np77f520e1108f47559e63809713ce****

          podSelectors: # 只處理部分類型的Pod。
          - name: lsPods
            selector:
              matchLabels:
                koordinator.sh/qosClass: "LS"

Koordinator Descheduler系統(tǒng)配置

參數(shù)

類型

取值

說明

示例值

dryRun

boolean

  • true

  • false(默認(rèn)值)

只讀模式開關(guān),開啟后將不會(huì)發(fā)起Pod遷移。

false

deschedulingInterval

time.Duration

>0s

重調(diào)度執(zhí)行周期。

120s

驅(qū)逐遷移控制配置

參數(shù)

類型

取值

說明

示例值

maxMigratingPerNode

int64

≥0(默認(rèn)值為2)

每個(gè)節(jié)點(diǎn)處于遷移狀態(tài)的Pod的最大數(shù)量。0表示不限制。

2

maxMigratingPerNamespace

int64

≥0(默認(rèn)不限制)

每個(gè)命名空間處于遷移狀態(tài)的Pod的最大數(shù)量。0表示不限制。

1

maxMigratingPerWorkload

intOrString

≥0(默認(rèn)值為10%)

每個(gè)工作負(fù)載(例如Deployment)中處于遷移狀態(tài)的Pod的最大數(shù)量或百分比。0表示不限制。

若工作負(fù)載只有單副本,則不參與重調(diào)度。

1或10%

maxUnavailablePerWorkload

intOrString

≥0(默認(rèn)值為10%),且小于工作負(fù)載對應(yīng)的副本總數(shù)

每個(gè)工作負(fù)載(例如Deployment)最大不可用副本數(shù)或百分比。0表示不限制。

1或10%

evictLocalStoragePods

boolean

  • true

  • false(默認(rèn)值)

是否允許配置了HostPath或EmptyDir的Pod參與重調(diào)度。出于安全考慮,默認(rèn)不開啟。

false

objectLimiters.workload

結(jié)構(gòu)體,數(shù)據(jù)格式為:

type MigrationObjectLimiter struct {
    Duration time.Duration `json:"duration,omitempty"`
    MaxMigrating *intstr.IntOrString `json:"maxMigrating,omitempty"`
}
  • Duration的值大于0秒(默認(rèn)值5m

  • MaxMigrating的值≥0(默認(rèn)值為10%)

工作級別Pod遷移的流量控制。

  • Duration:時(shí)間窗口長度,例如5m表示5分鐘。

  • MaxMigrating:副本數(shù)量或百分比,可設(shè)置為整數(shù)或百分比(默認(rèn)值取自maxMigratingPerWorkload的值)。

objectLimiters:
  workload:
    duration: 5m
    maxMigrating: 1

表示5分鐘內(nèi)單個(gè)工作負(fù)載最多遷移1個(gè)副本。

LowNodeLoad插件配置

參數(shù)

類型

取值

說明

示例值

highThresholds

map[string]float64

說明

支持CPU和內(nèi)存兩個(gè)維度,值的單位為百分比。

[0,100]

負(fù)載的熱點(diǎn)水位。僅超過該閾值的節(jié)點(diǎn)上的Pod會(huì)參與重調(diào)度,低于該閾值的節(jié)點(diǎn)上的Pod不會(huì)被重調(diào)度。建議您同時(shí)開啟調(diào)度器的負(fù)載感知調(diào)度能力,請參見策略說明。關(guān)于兩者如何搭配使用,請參見負(fù)載感知調(diào)度和熱點(diǎn)打散重調(diào)度如何搭配使用?

如果所有節(jié)點(diǎn)水位均高于 lowThresholds,表明此時(shí)集群整體水位偏高,即便有節(jié)點(diǎn)水位大于highThresholdsKoordinator Descheduler也不會(huì)執(zhí)行重調(diào)度。

highThresholds:
  cpu: 55 # CPU利用率熱點(diǎn)水位55%。
  memory: 75 # Memory利用率熱點(diǎn)水位75%。

lowThresholds

map[string]float64

說明

支持CPU和內(nèi)存兩個(gè)維度,值的單位為百分比。

[0,100]

負(fù)載的空閑水位。

如果所有節(jié)點(diǎn)水位均高于 lowThresholds,表明此時(shí)集群整體水位偏高,即便有節(jié)點(diǎn)水位大于highThresholdsKoordinator Descheduler也不會(huì)執(zhí)行重調(diào)度。

lowThresholds:
  cpu: 25 # CPU利用率空閑水位25%。
  memory: 25 # Memory利用率空閑水位25%。

anomalyCondition.consecutiveAbnormalities

int64

>0(默認(rèn)值為5)

熱點(diǎn)檢查重試次數(shù)。連續(xù)多個(gè)執(zhí)行周期檢查后,均超過highThresholds的節(jié)點(diǎn),才會(huì)被判定為熱點(diǎn)節(jié)點(diǎn)。熱點(diǎn)節(jié)點(diǎn)發(fā)生驅(qū)逐后會(huì)重新計(jì)數(shù)。

5

evictableNamespaces

  • include: string

  • exclude: string

集群內(nèi)的命名空間

可以參與重調(diào)度的Namespace,不填表示所有Pod均可參與。

支持配置includeexclude策略。兩種策略需二選一。

  • include:只處理指定的Namespace。

  • exclude:只處理指定之外的Namespace。

evictableNamespaces:
  exclude:
    - "kube-system"
    - "koordinator-system"

nodeSelector

metav1.LabelSelector

關(guān)于LabelSelector的格式,請參見Labels and Selectors

通過LabelSelector選擇目標(biāo)節(jié)點(diǎn)。

分為兩種方式,一種是指定單個(gè)節(jié)點(diǎn)池時(shí)的配置方式,一個(gè)是指定多個(gè)節(jié)點(diǎn)池時(shí)的配置方式。

  • 方式一

    # 只處理指定的單個(gè)節(jié)點(diǎn)池的機(jī)器
    nodeSelector:
      matchLabels:
        alibabacloud.com/nodepool-id: np77f520e1108f47559e63809713ce****
  • 方式二

    # 只處理指定的多個(gè)節(jié)點(diǎn)池的機(jī)器
    nodeSelector:
      matchExpressions:
      - key: alibabacloud.com/nodepool-id
        operator: In
        values:
        - node-pool1
        - node-pool2

podSelectors

由PodSelector組成的List,支持配置多組Pod。PodSelector的數(shù)據(jù)格式為:

type PodSelector struct {
    name     string
    selector metav1.LabelSelector
}

關(guān)于LabelSelector的格式,請參見Labels and Selectors

通過LabelSelector選擇開啟重調(diào)度的Pod。

# 只處理LS類型的Pod。
podSelectors:
- name: lsPods
  selector:
    matchLabels:
      koordinator.sh/qosClass: "LS"

常見問題

節(jié)點(diǎn)利用率閾值已經(jīng)達(dá)到閾值,但是節(jié)點(diǎn)上Pod沒有被驅(qū)逐怎么辦?

出現(xiàn)這種情況時(shí),一般可能是有以下幾種原因,請參考對應(yīng)的解決方法進(jìn)行調(diào)整。

原因分類

原因描述

解決方法

組件配置未生效

開啟范圍未指定

重調(diào)度器配置中包含Pod和節(jié)點(diǎn)的開啟范圍配置,請檢查對應(yīng)的命名空間和節(jié)點(diǎn)是否開啟。

重調(diào)度器配置修改后未重啟

重調(diào)度器配置修改后,需要對其進(jìn)行重啟才能生效。關(guān)于重啟重調(diào)度器,請參見步驟二:開啟負(fù)載熱點(diǎn)打散重調(diào)度插件

節(jié)點(diǎn)狀態(tài)不滿足條件

節(jié)點(diǎn)的平均利用率長時(shí)間低于閾值

重調(diào)度器會(huì)持續(xù)對利用率監(jiān)控一段時(shí)間,并對監(jiān)控?cái)?shù)據(jù)做平滑均值處理,因此只有節(jié)點(diǎn)持續(xù)超過閾值才會(huì)觸發(fā)重調(diào)度,默認(rèn)為10分鐘左右。而kubectl top node返回的利用率只是最近1分鐘的情況。請結(jié)合重試次數(shù)和執(zhí)行周期配置綜合觀察節(jié)點(diǎn)一段時(shí)間的利用率情況,并按需調(diào)整配置。

集群內(nèi)剩余的容量不足

在對Pod驅(qū)逐前,重調(diào)度器會(huì)對集群內(nèi)其他節(jié)點(diǎn)進(jìn)行檢查,確保容量充足才會(huì)進(jìn)行遷移。例如選擇了一個(gè)規(guī)格為8 Core 16 G的Pod準(zhǔn)備驅(qū)逐,而集群所有節(jié)點(diǎn)的空閑容量均低于該值,出于安全考慮重調(diào)度器則不會(huì)對其遷移。請考慮增加節(jié)點(diǎn),確保集群容量充足。

工作負(fù)載屬性約束限制

工作負(fù)載為單副本

為了保證單副本應(yīng)用的高可用,這類Pod默認(rèn)不參與重調(diào)度。如果您評估此類單副本應(yīng)用后,希望該P(yáng)od參與重調(diào)度,請給Pod或者工作負(fù)載(如Deployment或StatefulSet)的TemplateSpec中追加Annotation descheduler.alpha.kubernetes.io/evict: "true"

說明

該Annotation配置僅支持v1.2.0-ack1.3及更早版本。

Pod指定了HostPath或EmptyDir

出于安全考慮,這類指定了HostPath或EmptyDir的Pod默認(rèn)不參與重調(diào)度。如果需要對其進(jìn)行遷移,可以參考evictLocalStoragePods配置允許其參與重調(diào)度。詳細(xì)信息,請參見驅(qū)逐遷移控制配置

不可用或遷移中的副本數(shù)量過多

當(dāng)工作負(fù)載(如Deployment或StatefulSet)的不可用或遷移中的副本數(shù)超過了限制配置(maxUnavailablePerWorkloadmaxMigrationPerWorkload)時(shí),例如,maxUnavailablePerWorkloadmaxMigrationPerWorkload設(shè)置為20%,Deployment的期望副本數(shù)設(shè)置為10,當(dāng)前正好有2個(gè)Pod正在被驅(qū)逐或者正在發(fā)布,重調(diào)度器就不會(huì)對其發(fā)起驅(qū)逐。請等待Pod驅(qū)逐或發(fā)布完成,或?qū)⒁陨蟽蓚€(gè)配置調(diào)大。

副本數(shù)量約束配置錯(cuò)誤

當(dāng)工作負(fù)載的副本總數(shù)小于等于最大遷移數(shù)量配置maxMigrationPerWorkload或最大不可用數(shù)量配置maxUnavailablePerWorkload時(shí),出于安全考慮重調(diào)度器將不會(huì)對其進(jìn)行重調(diào)度。請將以上兩個(gè)配置調(diào)小或修改為百分比模式。

重調(diào)度器頻繁重啟是什么原因?

重調(diào)度器的配置ConfigMap格式錯(cuò)誤或不存在,請參見高級配置參數(shù)檢查ConfigMap文件內(nèi)容和格式并進(jìn)行修改,修改后重啟重調(diào)度器。重啟重調(diào)度器,請參見步驟二:開啟負(fù)載熱點(diǎn)打散重調(diào)度插件

負(fù)載感知調(diào)度和熱點(diǎn)打散重調(diào)度如何搭配使用?

開啟熱點(diǎn)打散重調(diào)度后,負(fù)載熱點(diǎn)上的Pod將會(huì)被驅(qū)逐。對于上層控制器(例如Deployment)新建的Pod,調(diào)度器會(huì)根據(jù)其配置選擇合適的節(jié)點(diǎn)進(jìn)行調(diào)度。為了獲得更好的負(fù)載均衡效果,建議您同時(shí)為調(diào)度器開啟負(fù)載感知調(diào)度能力,請參見使用負(fù)載感知調(diào)度

配置時(shí),建議您將負(fù)載感知調(diào)度中的節(jié)點(diǎn)篩選功能參數(shù)loadAwareThreshold配置為與熱點(diǎn)打散重調(diào)度器的highThresholds參數(shù)相同的值,具體請參見策略說明。當(dāng)節(jié)點(diǎn)的負(fù)載超過highThresholds時(shí),重調(diào)度器將驅(qū)逐該節(jié)點(diǎn)上的Pod,而調(diào)度器則通過loadAwareThreshold拒絕新的Pod被調(diào)度到該熱點(diǎn)節(jié)點(diǎn)上。否則,經(jīng)驅(qū)逐的Pod可能重新被調(diào)度到原來的節(jié)點(diǎn),尤其是在Pod指定了節(jié)點(diǎn)調(diào)度范圍,但對應(yīng)的節(jié)點(diǎn)數(shù)量較少且利用率較為接近時(shí)。

重調(diào)度參考的利用率算法是什么?

重調(diào)度器會(huì)持續(xù)對利用率監(jiān)控一段時(shí)間,并對監(jiān)控?cái)?shù)據(jù)做平滑均值處理,因此只有節(jié)點(diǎn)持續(xù)超過閾值才會(huì)觸發(fā)重調(diào)度,默認(rèn)為10分鐘左右。此外對于內(nèi)存資源維度,重調(diào)度器參考的內(nèi)存用量排除了page cache,因?yàn)檫@部分資源是可以被操作系統(tǒng)回收的,而通過kubectl top node返回的利用率是包含page cache的,您可以通過使用阿里云Prometheus監(jiān)控查看真實(shí)的內(nèi)存用量信息。