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

Koordinator Descheduler與Kubernetes Descheduler的對比說明

ack-koordinator組件中的重調(diào)度器模塊Koordinator Descheduler提供了重調(diào)度功能,可以將運(yùn)行中的不合理的Pod重新調(diào)度到另一個(gè)節(jié)點(diǎn)。Koordinator Descheduler基于Kubernetes Descheduler社區(qū)提出的Descheduling Framework重調(diào)度框架實(shí)現(xiàn),并在兼容社區(qū)Kubernetes Descheduler重調(diào)度策略的基礎(chǔ)上進(jìn)行了能力增強(qiáng)。

閱讀前提示

本文主要面向使用社區(qū)Kubernetes Descheduler的用戶,介紹Koordinator Descheduler與Kubernetes Descheduler的關(guān)聯(lián),并指引如何完成組件的遷移。閱讀本文前,期望您已經(jīng)了解社區(qū)Kubernetes Descheduler的功能說明、接口屬性、策略配置(例如系統(tǒng)配置、模板概要配置、策略插件配置、驅(qū)逐器插件配置)等內(nèi)容。

Koordinator Descheduler與Kubernetes Descheduler的關(guān)聯(lián)

社區(qū)Kubernetes Descheduler在發(fā)布0.25.0前設(shè)計(jì)了Descheduling Framework,支持以插件式框架的方式管理重調(diào)度的工作周期。Descheduling Framework主要包含兩個(gè)核心任務(wù):

  • 將現(xiàn)有的重調(diào)度策略和Pod驅(qū)逐邏輯進(jìn)行插件化改造,提高重調(diào)度策略的靈活性。

  • 實(shí)現(xiàn)一個(gè)運(yùn)行時(shí)環(huán)境,支持插件的加載、執(zhí)行,并管理整個(gè)重調(diào)度的工作周期。

在Kubernetes Descheduler發(fā)布0.26.0版本后,Koordinator Descheduler在v1.2.0版本完成了對社區(qū)重調(diào)度器全部的策略和驅(qū)逐插件DefaultEvictor的引入,并進(jìn)一步提供了驅(qū)逐器插件MirgrationController

功能差異

image

Koordinator Descheduler能夠兼容Kubernetes Descheduler的絕大多數(shù)使用場景,但二者在配置方法、重調(diào)度策略、驅(qū)逐器與驅(qū)逐控制能力等方面具有一定的差異。主要如下。

  1. 由于Koordinator Descheduler在Descheduler Framework方面的研發(fā)早于Kubenetes Descheduler,所以使用了不同的配置接口v1alpha2/DeschedulerConfiguration

  2. Koordinator Descheduler中新增了感知節(jié)點(diǎn)真實(shí)利用率的LowNodeLoad負(fù)載熱點(diǎn)打散重調(diào)度策略插件。Kubernetes原生的Descheduler插件LowNodeUtilization根據(jù)資源分配率決定如何進(jìn)行重調(diào)度,而LowNodeLoad則基于節(jié)點(diǎn)真實(shí)利用率,更為精準(zhǔn)。關(guān)于LowNodeLoad插件的詳細(xì)介紹,請參見使用負(fù)載熱點(diǎn)打散重調(diào)度

  3. Koordinator Descheduler中新增了MigrationController作為Pod驅(qū)逐器。MigrationController支持更加安全、更豐富的驅(qū)逐控制能力,請參見驅(qū)逐器插件配置

配置示例對比

下面以開啟RemovePodsViolatingNodeTaints策略(RemovePodsViolatingNodeTaints)為例,對比Kubernetes Descheduler和Koordinator Descheduler的配置格式,配置版本由apiVersionkind兩個(gè)字段定義。各版本的組件支持情況如下。

配置版本屬性

Kubernetes Descheduler

Kubernetes Descheduler

Koordinator Descheduler

組件版本

所有版本

v0.27.0及以上

所有版本

apiVersion

descheduler/v1alpha1

descheduler/v1alpha2

descheduler/v1alpha2

kind

DeschedulerPolicy

DeschedulerPolicy

DeschedulerConfiguration

  • Kubernetes Descheduler配置示例

    • v0.27.0以下版本,使用的配置版本為descheduler/v1alpha1/DeschedulerPolicy

      # 接口屬性。
      apiVersion: "descheduler/v1alpha1"
      kind: "DeschedulerPolicy"
      
      # 以下為系統(tǒng)配置。
      nodeSelector: "node=node1"
      maxNoOfPodsToEvictPerNode: 10
      maxNoOfPodsToEvictPerNamespace: 10
      
      # 以下為驅(qū)逐配置。在另外兩種配置接口中,這些參數(shù)屬于驅(qū)逐器插件的配置項(xiàng)。
      evictFailedBarePods: false
      evictLocalStoragePods: true
      evictSystemCriticalPods: true
      evictDaemonSetPods: false
      ignorePvcPods: false
      
      # 以下為策略配置。在另外兩種配置接口中,以重調(diào)度模板的形式提供,并拆分成插件啟停和插件參數(shù)兩部分。
      strategies:
        "RemovePodsViolatingNodeTaints":
          enabled: true
          params:
            nodeFit: true # nodeFit需要在每個(gè)策略中打開。在另外兩種配置接口中,nodeFit屬于驅(qū)逐器插件的配置項(xiàng)。
            excludedTaints:
              - deschedule=not-allow # 忽略包含key為"deschedule"且value為"not-allow"的污點(diǎn)的節(jié)點(diǎn)。
    • v0.27.0及以上版本,使用的配置版本為descheduler/v1alpha2/DeschedulerPolicy

      # 接口屬性。
      apiVersion: "descheduler/v1alpha2"
      kind: "DeschedulerPolicy"
      
      # 以下為系統(tǒng)配置。
      nodeSelector: "node=node1" 
      maxNoOfPodsToEvictPerNode: 10
      maxNoOfPodsToEvictPerNamespace: 10
      # 以上為系統(tǒng)配置。
      
      # 以下為模板列表。
      profiles:
      - name: kubernetes-descheduler  # 指定重調(diào)度模板的名稱。
          
        # 以下為模板概要配置。 
        plugins:      
          deschedule:
            enabled:
              - "RemovePodsViolatingNodeTaints" # enabled字段的數(shù)據(jù)類型是字符串列表。
          balance:
            disabled: 
              - "*"
        # 以上為模板概要配置。         
            
        # 以下為插件列表。
        pluginConfig:
          
        # 以下為策略插件RemovePodsViolatingNodeTaints的配置。    
        - name: RemovePodsViolatingNodeTaints # 節(jié)點(diǎn)污點(diǎn)校驗(yàn)插件配置。
            args:        
              excludedTaints: 
              - deschedule=not-allow # 忽略包含key為"deschedule"且value為"not-allow"的污點(diǎn)的節(jié)點(diǎn)。
          
        # 以下為驅(qū)逐器插件DefaultEvictor的配置。  
        - name: "DefaultEvictor"
          args:                
            evictFailedBarePods: false
            evictLocalStoragePods: true
            evictSystemCriticalPods: true
            evictDaemonSetPods: false
            ignorePvcPods: false
            nodeFit: true # nodeFit作為驅(qū)逐器插件的配置項(xiàng)。               
  • Koordinator Descheduler的配置示例

    配置版本為descheduler/v1alpha2/DeschedulerConfiguration

    # 接口屬性。
    apiVersion: descheduler/v1alpha2
    kind: DeschedulerConfiguration
    
    # 以下為系統(tǒng)配置。
    dryRun: false  
    deschedulingInterval: 120s 
    nodeSelector: 
      node: node1 # nodeSelector的數(shù)據(jù)類型與其他兩個(gè)配置接口不同。
    maxNoOfPodsToEvictPerNode: 10 
    maxNoOfPodsToEvictPerNamespace: 10 
    # 以上為系統(tǒng)配置。
    
    # 以下為模板列表。            
    profiles:
    - name: koord-descheduler
      
      # 以下為模板概要配置。
      plugins:
        deschedule: 
          enabled: 
            - name: RemovePodsViolatingNodeTaints # enabled字段的數(shù)據(jù)類型是結(jié)構(gòu)體列表。          
        balance: 
          disabled: 
            - name: "*" 
        evict: # 支持通過evict字段配置需要使用的驅(qū)逐器。          
          enabled:
            - name: MigrationController # 默認(rèn)開啟MigrationController。 
            # - name: DefaultEvictor # 可選DefaultEvictor。 
        filter: # 支持通過filter字段配置需要使用的驅(qū)逐篩選策略。 
          enabled:
            - name: MigrationController # 默認(rèn)開啟MigrationController。
            # - name: DefaultEvictor # 可選DefaultEvictor。
      # 以上為模板概要配置。
              
      # 以下為插件列表。
      pluginConfig:
        
      # 以下為策略插件RemovePodsViolatingNodeTaints的配置。    
      - name: RemovePodsViolatingNodeTaints # 節(jié)點(diǎn)污點(diǎn)校驗(yàn)插件配置。
          args:        
            excludedTaints: 
            - deschedule=not-allow # 忽略包含key為"deschedule"且value為"not-allow"的污點(diǎn)的節(jié)點(diǎn)。
        
      # 以下為驅(qū)逐器插件DefaultEvictor的配置。  
      - name: "DefaultEvictor"
        args:                
          evictFailedBarePods: false
          evictLocalStoragePods: true
          evictSystemCriticalPods: true
          evictDaemonSetPods: false
          ignorePvcPods: false
          nodeFit: true # nodeFit作為驅(qū)逐器插件的配置項(xiàng)。    

說明

以下僅根據(jù)配置示例介紹不同配置版本之間的差異,不介紹具體配置參數(shù)的詳細(xì)說明。詳細(xì)說明,請參見系統(tǒng)配置模板概要配置策略插件配置驅(qū)逐器插件配置

系統(tǒng)配置差異

  • Kubernetes Descheduler的系統(tǒng)配置(Top Level configuration)中僅支持nodeSelectormaxNoOfPodsToEvictPerNodemaxNoOfPodsToEvictPerNamespace三個(gè)參數(shù)。在此基礎(chǔ)上,Koordinator Descheduler的系統(tǒng)配置中新增了dryRundeschedulingInterval參數(shù)。

  • Kubernetes Descheduler的v1alpha1/DeschedulerPolicy接口在系統(tǒng)配置中配置Pod驅(qū)逐器的參數(shù),在其他兩個(gè)配置接口中,這些參數(shù)作為驅(qū)逐器插件的配置項(xiàng)在args字段中提供。

  • Koordinator Descheduler的v1alpha2/DeschedulerConfiguration配置接口中,nodeSelector的數(shù)據(jù)類型與其他兩個(gè)配置接口略有不同,具體請參見系統(tǒng)配置

模板概要配置差異

  • Kubernetes Descheduler的v1alpha1/DeschedulerPolicy配置版本不支持重調(diào)度模板,與當(dāng)前Koordinator Descheduler的配置格式差異較大。

  • Kubernetes Descheduler的v1alpha2/DeschedulerPolicy配置版本與Koordinator Deschedulerv1alpha2/DeschedulerConfiguration類似,都使用重調(diào)度模板的配置形式。二者僅在模板概要配置中的數(shù)據(jù)類型以及驅(qū)逐插件的開啟方法上有一定差異。

    • v1alpha2/DeschedulerPolicy使用字符串列表開啟或禁用多個(gè)插件;v1alpha2/DeschedulerConfiguration使用plugins結(jié)構(gòu)體列表進(jìn)行配置。

    • v1alpha2/DeschedulerPolicy僅支持DefaultEvictor驅(qū)逐器插件,無需手動開啟;v1alpha2/DeschedulerConfiguration支持MigrationController和DefaultEvictor兩種驅(qū)逐器插件,其中DefaultEvictor的行為與社區(qū)版本一致。您可以在模板概要配置的evictfilter字段中指定需要開啟的驅(qū)逐器插件。

策略插件配置差異

Koordinator Descheduler適配了Kubernetes Descheduler 0.26.0版本中的全部重調(diào)度策略。在Kubernetes Descheduler 0.26.0以上的版本中,某些重調(diào)度策略插件新增的配置參數(shù)無法在Koordinator Descheduler中使用。請參見下表了解相較于Kubernetes Descheduler 0.26.0以上版本,Koordinator Descheduler的重調(diào)度策略的配置參數(shù)變更。

策略插件的參數(shù)變更說明

示例代碼

RemovePodsViolatingNodeAffinity:支持在nodeAffinityType字段中使用preferredDuringSchedulingIgnoredDuringExecution

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsViolatingNodeAffinity"
      args:
        nodeAffinityType:
        - "preferredDuringSchedulingIgnoredDuringExecution"
    plugins:
      deschedule:
        enabled:
          - "RemovePodsViolatingNodeAffinity"

RemovepodsViolatingTopologySpreadConstraint

  • 新增constraints字段。

  • 新增topologyBalanceNodeFit字段。

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsViolatingTopologySpreadConstraint"
      args:
        constraints:
          - DoNotSchedule
        topologyBalanceNodeFit: false  
    plugins:
      balance:
        enabled:
          - "RemovePodsViolatingTopologySpreadConstraint"

RemovePodsHavingTooManyRestarts:新增states字段。

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemovePodsHavingTooManyRestarts"
      args:
        states:
        - "CrashLoopBackOff"
    plugins:
      deschedule:
        enabled:
          - "RemovePodsHavingTooManyRestarts"

PodLifeTime

  • state字段允許配置CrashLoopBackOff

  • state字段允許配置ImagePullBackOff

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "PodLifeTime"
      args:
        states:
        - "CrashLoopBackOff"
        - "ImagePullBackOff"
    plugins:
      deschedule:
        enabled:
          - "PodLifeTime"

RemoveFailedPods:新增exitCodes字段。

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "RemoveFailedPods"
      args:
        exitCodes:
        - 1
    plugins:
      deschedule:
        enabled:
          - "RemoveFailedPods"

驅(qū)逐器插件配置差異

Koordinator Descheduler適配了Kubernetes Descheduler 0.26.0版本中的Pod驅(qū)逐器DefaultEvictor。但對于Kubernetes Descheduler 0.26.0以上的版本DefaultEvictor的新增參數(shù),Koordinator Descheduler無法使用。

Default Evictor

驅(qū)逐插件的參數(shù)變更說明

樣例

DefaultEvictor

  • 新增evictDaemonSetPods字段

  • 新增minReplicas字段

apiVersion: "descheduler/v1alpha2"
kind: "DeschedulerPolicy"
profiles:
  - name: ProfileName
    pluginConfig:
    - name: "DefaultEvictor"
      args:
        evictDaemonSetPods: false
        minReplicas: 2
    - name: "PodLifeTime"
      args:
        maxPodLifeTimeSeconds: 86400
    plugins:
      deschedule:
        enabled:
          - "PodLifeTime"

MigrationController

Koordinator Descheduler額外支持了MigrationController驅(qū)逐器插件,支持多種驅(qū)逐方法。詳細(xì)介紹,請參見MigrationController

遷移Kubernetes Descheduler至Koordinator Descheduler

不同版本的Kubernetes Descheduler遷移至Koordinator Descheduler的方式有所不同。遷移流程如下。

  1. 卸載正在使用的Kubernetes Descheduler。集群中存在多個(gè)重調(diào)度器可能會導(dǎo)致出現(xiàn)不可預(yù)知的競態(tài)條件。

  2. 參見啟用重調(diào)度功能,對Koordinator Descheduler進(jìn)行安裝與配置。

    1. 參見系統(tǒng)配置差異,在Koordinator Descheduler中配置您需要使用的系統(tǒng)級配置。

    2. 編寫與Koordinator Descheduler適配的重調(diào)度模板。

      • 若您當(dāng)前使用0.26.0版本及之前的Kubernetes Descheduler,該版本僅支持使用v1alpha1/DeschedulerPolicy配置接口。請參見模板概要配置差異完成配置。

      • 若您當(dāng)前使用大于0.26.0版本的Kubernetes Descheduler,請進(jìn)一步確認(rèn)您所使用的配置接口。

        • 若配置接口為v1alpha1/DeschedulerPolicy,請參見模板概要配置差異,編寫與Koordinator Descheduler適配的重調(diào)度模板。

        • 若接口配置為v1alpha2/DeschedulerPolicy,請參見模板概要配置差異,修改Koordinator Descheduler中的部分配置字段。

    3. 請參見策略插件配置差異驅(qū)逐器插件配置差異,在Koordinator Descheduler中設(shè)置插件的具體配置。

相關(guān)文檔