<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          CNCF 沙箱項(xiàng)目 OCM Placement 多集群調(diào)度指南

          共 17899字,需瀏覽 36分鐘

           ·

          2022-02-13 11:06


          作者:
          邱見|紅帽資深軟件工程師,Open Cluster Management (OCM) 社區(qū)發(fā)起人,負(fù)責(zé)人
          郝青|紅帽高級(jí)軟件工程師,Open Cluster Management (OCM) 社區(qū)維護(hù)者
           
          Open Cluster Management(OCM) 項(xiàng)目已經(jīng)在 2021 年 11 月 9 日成為 CNCF 的沙箱項(xiàng)目。OCM 作為一個(gè)社區(qū)驅(qū)動(dòng)的項(xiàng)目,專注于 Kubernetes 應(yīng)用程序的多集群和多云場景。

          最新 OCM 社區(qū)版本 0.6.0 已于 2022 年 1 月 21 日正式發(fā)布。詳細(xì)內(nèi)容可訪問 Open Cluster Management 0.6 發(fā)布[1]。

          在多集群環(huán)境中,不同角色的用戶對(duì)多集群操作有著不同的需求。比如管理員等用戶需要對(duì)目標(biāo)集群進(jìn)行一些配置, 應(yīng)用程序開發(fā)人員可能希望將工作負(fù)載部署到特定集群,這些工作負(fù)載可以是 Kubernetes 的 Service、Deployment、ConfigMap 或不同 Kubernetes 對(duì)象的捆綁包。這些用戶對(duì)目標(biāo)集群會(huì)有一些要求,比如:

          • 我只想在 Amazon Web Services(AWS) 上配置集群。
          • 我只想將工作負(fù)載部署到標(biāo)簽為 group=dev 的集群上。
          • 我希望工作負(fù)載始終在具有最大可分配內(nèi)存的 3 個(gè)集群上運(yùn)行。

          為了選擇出目標(biāo)集群,可以選擇在部署管道 (deploy pipeline) 中對(duì)直接指定目標(biāo)集群名稱,或使用某種形式的標(biāo)簽選擇器。對(duì)于對(duì)資源有要求的工作負(fù)載,需要一個(gè)細(xì)粒度的調(diào)度器來將工作負(fù)載分發(fā)到具有足夠資源的群集。當(dāng)群集屬性更改時(shí),調(diào)度結(jié)果應(yīng)該保持動(dòng)態(tài)更新。

          在 OCM 中,前面描述的調(diào)度功能是通過 Placement 來實(shí)現(xiàn)的。在這篇文章中,將介紹 Placement 如何選擇到所需的集群,Placement 可以提供的調(diào)度功能,以及一些場景下的最佳實(shí)踐,使用者可以參考示例來編寫符合自己要求的 Placement。其他一些高級(jí)調(diào)度功能,如支持污點(diǎn) (taints) 和容忍 (tolerations),以及拓?fù)溥x擇 (spread),正在 OCM 社區(qū)[2]討論中。

          在閱讀本文前,可訪問以下鏈接了解相關(guān)基本概念:

          • ManagedCluster 和 ManagedClusterSet[3]
          • Placement[4]


          01

          為什么我們需要

          ManagedClusterSet?

          Cloud Native


          “ClusterSet”是在 Kubernetes SIG 多集群工作小組的“多集群服務(wù) (MultiClusterService/MCS)”API 中已經(jīng)實(shí)踐許久的概念,它意指多個(gè)擁有相同屬性/特征的“集群小組”的概念。在多集群網(wǎng)絡(luò)的場景里我們需要根據(jù)底座基礎(chǔ)設(shè)施的拓?fù)錇榧悍纸M,同樣的在 OCM 多集群管理平臺(tái)里我也可以根據(jù)集群的場景用途,工作特性具體分組。這也是 OCM 引入 ClusterSet 模型的最初緣由之一。

          在此基礎(chǔ)上,OCM 在引入多集群分組的語義的同時(shí)考慮到了不同分組之間的“軟租戶隔離性” — 尤其考慮到不同集群小組可能是由不同的角色/團(tuán)隊(duì)去維護(hù)的,同時(shí)這些團(tuán)隊(duì)之間應(yīng)該相互自治不干擾。在 OCM 的世界中,我們會(huì)允許管理員為每一種角色/團(tuán)隊(duì)會(huì)分配一個(gè)命名空間/namespace,同時(shí)通過利用 Kubernetes 原生提供的命名空間之間的隔離性使不同角色區(qū)別開來(其中所謂的角色落進(jìn)實(shí)際場景里可以是一個(gè)應(yīng)用或者也可以是一個(gè)組織團(tuán)隊(duì)等等)。那么這些角色只要在被分配的命名空間里活動(dòng)就可以充分編排所關(guān)聯(lián)的多個(gè)集群上的資源。

          總而言之,在一個(gè)通用的多集群中樞控制平面里,如何解決多個(gè)用戶/角色分離的問題其實(shí)是最首要的問題之一,OCM 之所以引入了 ClusterSet 模型且額外提供了其到命名空間的映射,是為了希望 OCM 作為一個(gè)平臺(tái)能解決“多集群場景”里幫助用戶解決最瑣碎同時(shí)又最操心的問題。至于如何消費(fèi)所關(guān)聯(lián)的集群列表請(qǐng)參考下面的 Placement 模型。

          02

          什么是 Placement?

          Cloud Native


          Placement API 用于在一個(gè)或多個(gè)托管集群組(ManagedClusterSet)中選擇一組托管群集(ManagedCluster),以便將工作負(fù)載部署到這些群集上。

          如果定義了有效的 Placement,則 Placement 控制器 (controller) 將生成相應(yīng)的調(diào)度決策 (PlacementDecision),并在狀態(tài) (Status) 中列出選定的托管群集 (ManagedCluster)。作為最終用戶,你可以解析出選定的集群,然后對(duì)目標(biāo)集群進(jìn)行操作。你也可以將更高層級(jí)的工作負(fù)載編排器 (orchestrator) 與 PlacementDecision 集成,來擴(kuò)展 Placement 的調(diào)度能力。

          例如,ArgoCD 已經(jīng)與 Placement 集成。ArgoCD 的使用者可以在 ApplicationSet 的 clusterDecisionResource 中指定一個(gè)關(guān)聯(lián)了的 PlacementDecision 資源的 ConfigMap,就可以利用 Placement 的調(diào)度決策,將應(yīng)用自動(dòng)分配到一組目標(biāo)集群。如下:

          apiVersion: argoproj.io/v1alpha1kind: ApplicationSetmetadata:  name: book-importspec:  generators:    - clusterDecisionResource:        configMapRef: ocm-placement        labelSelector:          matchLabels:            cluster.open-cluster-management.io/placement: local-cluster        requeueAfterSeconds: 30  template:

          apiVersion: v1kind: ConfigMapmetadata: name: ocm-placementdata: apiVersion: cluster.open-cluster-management.io/v1alpha1 kind: placementdecisions statusListKey: decisions matchKey: clusterName

          apiVersion: cluster.open-cluster-management.io/v1alpha1kind: PlacementDecisionmetadata: labels: cluster.open-cluster-management.io/placement: local-cluster name: local-cluster-decision-1status: decisions: - clusterName: cluster1 reason: "" - clusterName: cluster2 reason: ""

          KubeVela 作為開放應(yīng)用程序模型 OAM(Open Application Model) 的實(shí)現(xiàn),也即將利用 Placement API 進(jìn)行工作負(fù)載調(diào)度。

          與原生 Kubernetes 調(diào)度模型的區(qū)別與聯(lián)系?


          與 Kubernetes 的靜態(tài)調(diào)度不同,Placement 使用動(dòng)態(tài)調(diào)度的機(jī)制。調(diào)度抉擇會(huì)隨著集群屬性變化也隨之改變,用戶可以通過在 Placement 上調(diào)整調(diào)度的穩(wěn)定值來減少調(diào)度決策的抖動(dòng)。另外,Placement API 嘗試將整個(gè)調(diào)度過程顯示化,讓用戶可以通過 API 查詢調(diào)度抉擇的原委,方便用戶更加容易的調(diào)試調(diào)度配置和參數(shù)。

          同時(shí)在原生 Kubernetes 中的調(diào)度是一次性的,而在多集群場景里我們往往需要的是一個(gè)“聲明式的調(diào)度” — 我們定義出調(diào)度策略的“硬條件”和“軟條件”是什么,再根據(jù)實(shí)際的集群拓?fù)?實(shí)時(shí)狀態(tài)決策最終匹配的集群,所以它更像是原生 Kubernetes 中的驅(qū)散調(diào)度/反調(diào)度 PodDisruptionBudget 的模型而非靜態(tài)調(diào)度中的 Taint/Toleration 的模型。

          OCM 在 Placement 模型中同時(shí)考慮到了大規(guī)模多集群調(diào)度時(shí)集群列表長度暴漲的問題,在 Placement 的匹配產(chǎn)物 PlacementDecision 中所有匹配結(jié)果都是分頁展示的以避免突破 Kubernetes CRD 對(duì)模型的限制。
           
          03

          Placement 如何選擇集群?

          Cloud Native


          有了上述的初步介紹,讓我們更深入地了解 Placement API,看看它是如何選擇所需的集群以及它可以提供哪些調(diào)度功能。

          如下是一個(gè) Placement 例子:

          apiVersion: cluster.open-cluster-management.io/v1alpha1kind: Placementmetadata:  name: placement  namespace: ns1spec:  numberOfClusters: 4  clusterSets:    - clusterset1    - clusterset2  predicates:    - requiredClusterSelector:        labelSelector:          matchLabels:            vendor: OpenShift  prioritizerPolicy:    mode: Exact    configurations:      - scoreCoordinate:          builtIn: ResourceAllocatableMemory      - scoreCoordinate:          builtIn: Steady        weight: 3      - scoreCoordinate:          type: AddOn          addOn:            resourceName: default            scoreName: cpuratio

          Spec 包含以下四個(gè)字段:

          • numberOfClusters: 表示要選擇的符合要求的 ManagedClusters 數(shù)量。

          • clusterSets: 表示從中選擇 ManagedCluster 的 ManagedClusterSet 名稱。

          • predicates: 包括了一組預(yù)選策略??梢允褂脴?biāo)簽選擇器 (labelSelector) 和聲明選擇器 (claimSelector) 來選擇 ManagedCluster。每一個(gè)預(yù)選策略配置之間是或的關(guān)系。

          • prioritizerPolicy: 定義了優(yōu)選策略。優(yōu)選策略中通過 mode 設(shè)置是否使用默認(rèn)的優(yōu)選器 (prioritizer)。同時(shí)也可以在 configurations 中配置具體的優(yōu)選器 (prioritizer)。目前 Placement 內(nèi)置支持的優(yōu)選器 (prioritizer) 包括平衡 (Balance),穩(wěn)定 (Steady),最大可分配CPU資源 (ResourceAllocatableCPU) 和最大可分配內(nèi)存資源 (ResourceAllocatableMemory)。Placement 同時(shí)也支持通過第三方提供的分?jǐn)?shù)來選擇集群。weight 權(quán)重是一個(gè) -10 到 10 的整數(shù),用以調(diào)整不同的優(yōu)選器打分對(duì)總分的影響。

          如果未定義 Spec 中各字段的值,則使用默認(rèn)值。每個(gè)字段中默認(rèn)值的詳細(xì)信息在 PlacementSpec[5] 中定義。

          如果 Spec 為空,所有綁定到 Placement 命名空間 (namespace) 的 ManagedClusterSet 中的所有 ManagedCluster 將作為可能的選項(xiàng)。

          以上每個(gè)字段的定義都在調(diào)度中發(fā)揮著作用。如下是一個(gè)典型的調(diào)度過程:

          1. 調(diào)度框架首先從 clusterSets 中定義的 ManagedClusterSet 中選擇出可用的 ManagedCluster。

          2. 過濾器插件 (filter plugin) 通過預(yù)選策略 predicates 中定義的標(biāo)簽 (label) 和聲明 (claim) 選擇器進(jìn)一步篩選 ManagedCluster。

          3. 在優(yōu)選策略 prioritizerPolicy 啟用的優(yōu)選器插件 (prioritizer plugin) 會(huì)為每個(gè)篩選后的 ManagedCluster 打一個(gè)分?jǐn)?shù),并且按總分從高到低確定優(yōu)先級(jí)。


          4. 調(diào)度框架會(huì)選擇前 k 個(gè) ManagedCluster,并把這些集群列在 PlacementDecision 中。k 的值是在 numberOfClusters 定義的集群數(shù)量。

          如果將以上步驟對(duì)應(yīng)的上述的例子中,調(diào)度過程如下:


          1. 調(diào)度框架首先選擇 ManagedClusterSet clusterset1 和 clusterset2 中的集群作為可用的 ManagedCluster。


          2. 過濾器插件 (filter plugin) 篩選出帶有標(biāo)簽 (label)vendor=OpenShift 的 ManagedCluster。


          3. 優(yōu)選器插件 (prioritizer plugin)ResourceAllocatableMemory 和 Steady 為每一個(gè)篩選的 ManagedCluster 打分。當(dāng)配置了優(yōu)選策略 AddOn,Placement 會(huì)嘗試獲得集群對(duì)應(yīng)的第三方資源提供的分?jǐn)?shù) cpuratio。并用如下公式計(jì)算每個(gè) ManagedCluster 的總分:


          1(ResourceAllocatableMemory 的默認(rèn)權(quán)重) * ResourceAllocatableMemory 的打分 + 3(Steady 的權(quán)重) * Steady 的打分 + 1(AddOn 的默認(rèn)權(quán)重) * cpuratio(AddOn 的分?jǐn)?shù))

           

          1. 調(diào)度框架按照每個(gè) ManagedCluster 的總分從高到低排列,并返回最高分?jǐn)?shù)的 ManagedCluster 作為結(jié)果。


          在第 3 步優(yōu)選器插件工作時(shí),實(shí)際上多個(gè)插件的組合。每個(gè)插件的算法和權(quán)重都會(huì)影響最終的調(diào)度結(jié)果。下一節(jié)中,會(huì)更詳細(xì)的介紹每個(gè)插件,以便你更好的了解 Placement是如何選擇 ManagedCluster 的。

          04

          優(yōu)選器插件如何工作?

          Cloud Native


          在撰寫此文時(shí),我們有如下四個(gè)默認(rèn)的優(yōu)選器:

          • 平衡 (Balance): 平衡每個(gè)集群上的調(diào)度決策 (PlacementDecision) 數(shù)量。擁有 PlacementDecision 數(shù)量最多的集群將得到最低分 -100 分,如果沒有 PlacementDecision 則被賦予最高分 100 分。其他的分?jǐn)?shù)介于 -100 到 100 之間。

          • 穩(wěn)定 (Steady): 確?,F(xiàn)有的 PlacementDecision 中已選集群的結(jié)果保持穩(wěn)定?,F(xiàn)有的 PlacementDecision 已經(jīng)選中的集群將得到最高分 100 分,沒有被選中的集群得到最低分 0 分。

          • 最大可分配 CPU 資源 (ResourceAllocatableCPU) 和最大可分配內(nèi)存資源 (ResourceAllocatableMemory) 基于集群的可分配 CPU 或者內(nèi)存做決策。擁有最多可分配資源(CPU 或者內(nèi)存)的集群將得到最高分 100 分,擁有最少資源的集群將得到最低分 -100分。其他的分?jǐn)?shù)介于 -100 到 100 之間。

          優(yōu)選策略 AddOn 還支持通過第三方提供的分?jǐn)?shù)選擇集群。這部分也是 Placement 在 OCM v0.6.0 中的最新功能。OCM v0.6.0 中提供了新的 API AddOnPlacementScore 用以支持一種基于自定義分?jǐn)?shù)的更具可擴(kuò)展性的調(diào)度方式。

          • 作為使用者,可以在 yaml 文件中 prioritizerPolicy 下配置 AddOn,來指定自定義分?jǐn)?shù)以選擇集群。

          • 作為分?jǐn)?shù)的提供者,第三方的控制器 (controller) 可以在中心 (Hub Cluster) 或托管群集 (Managed Cluster) 上運(yùn)行,controller 需要維護(hù) AddOnPlacementScore 的生命周期并將分?jǐn)?shù)更新到其中。

          關(guān)于可擴(kuò)展調(diào)度的更多詳細(xì)內(nèi)容,可以參考社區(qū)文檔[6]

          在做出調(diào)度決策時(shí),ManagedCluster 按照最終的總分排序??偡质敲總€(gè)優(yōu)選器的打分乘以權(quán)重的總和: 總分 = sum(prioritizer_x_weight * prioritizer_x_score),其中 prioritizer_x_weight 是優(yōu)選器 (prioritizer)X 的權(quán)重,prioritizer_x_score是優(yōu)選器 (prioritizer)X 為一個(gè) ManagedCluster 打的分?jǐn)?shù)。

          可以通過調(diào)整優(yōu)選器 (prioritizer) 的權(quán)重來影響最終的分?jǐn)?shù),比如:

          • 通過給資源類型的優(yōu)選器 ResourceAllocatableCPU 和 ResourceAllocatableMemory 設(shè)置權(quán)重,來基于可分配的資源做調(diào)度。

          • 通過給資源類型的優(yōu)選器設(shè)置一個(gè)更高的權(quán)重,使得調(diào)度結(jié)果對(duì)于資源的變化更加敏感。

          • 通過給優(yōu)選器 Steady 設(shè)置更高的權(quán)重,使得調(diào)度結(jié)果可以忽略資源的變化保持穩(wěn)定。

          如下是一些實(shí)際的例子,來說明多個(gè)優(yōu)選器是如何共同工作以得到最終的調(diào)度結(jié)果。這些例子也可以視為是在一些場景下的最佳實(shí)踐。

          以下示例中假設(shè)有三個(gè)托管集群 (ManagedCluster) 綁定在命名空間 (namespace)ns1, 其中 cluster1,cluster2,cluster3 分別有 60MB,80MB 和 100MB 可分配內(nèi)存。

          示例 1:選擇具有最大可分配內(nèi)存的集群。

          在此示例中,希望選擇具有最大可分配內(nèi)存的集群。為了按可分配內(nèi)存對(duì)集群進(jìn)行優(yōu)先級(jí)排序,可以在優(yōu)選策略 (prioritizerPolicy) 中配置 ResourceAllocatableMemory。

          apiVersion: cluster.open-cluster-management.io/v1alpha1kind: Placementmetadata:  name: demo  namespace: ns1spec:  numberOfClusters: 2  prioritizerPolicy:    configurations:      - scoreCoordinate:          builtIn: ResourceAllocatableMemory

          Placement創(chuàng)建之后,可以通過oc describe placement命令,查看events來了解優(yōu)先級(jí)排序是如何選中集群的。

          # oc describe placement demo -n ns1Name:         demoNamespace:    ns1Labels:       <none>Annotations:  <none>API Version:  cluster.open-cluster-management.io/v1alpha1Kind:         PlacementStatus:  Conditions:    Last Transition Time:       2021-11-09T07:02:14Z    Message:                    All cluster decisions scheduled    Reason:                     AllDecisionsScheduled    Status:                     True    Type:                       PlacementSatisfied  Number Of Selected Clusters:  2Events:  Type    Reason          Age   From                 Message  ----    ------          ----  ----                 -------  Normal  DecisionCreate  10s   placementController  Decision demo-decision-1 is created with placement demo in namespace ns1  Normal  DecisionUpdate  10s   placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     10s   placementController  cluster1:0 cluster2:100 cluster3:200

          在這個(gè)例子中,在 Additive 模式下,優(yōu)選器包括了默認(rèn)權(quán)重為 1 的 Balance 和 Steady 以及顯示配置了權(quán)重為 1 的 ResourceAllocatableMemory。一個(gè)集群的最終得分將由如下公式?jīng)Q定:

          1 * prioritizer_balance_score +  1 * prioritizer_steady_score +  1 * prioritizer_resourceallocatablememory_score
           
          從上面的 event 中可以看出來,cluster1 總分為 0,cluster2 總分為 100,cluster3 總分為 200。調(diào)度結(jié)果應(yīng)該選擇 cluster2 和 cluster3。

          可以通過 oc describe placementdecision 命令來驗(yàn)證調(diào)度結(jié)果,如下:

          # oc describe placementdecision demo-decision-1 -n ns1Name:         demo-decision-1Namespace:    ns1Labels:       cluster.open-cluster-management.io/placement=placement-jkd42Annotations:  <none>API Version:  cluster.open-cluster-management.io/v1alpha1Kind:         PlacementDecision...Status:  Decisions:    Cluster Name:  cluster2    Reason:            Cluster Name:  cluster3    Reason:        Events:            <none>

          可以看到,在 PlacementDecision 的 status 中,cluster2 和 cluster3 被列在其中。

          讓我們嘗試添加一個(gè)新的集群,并且這個(gè)集群上有著比被選中集群高出一些的可分配內(nèi)存。

          Placement 調(diào)度器會(huì)監(jiān)視 (watch) 托管集群。一旦有資源變化,將觸發(fā)重新調(diào)度?,F(xiàn)在,讓我們?cè)囍砑右粋€(gè)有 100MB 可分配內(nèi)存的新集群 cluster4,同時(shí)檢查 Placement 中的事件 (event)。

          # oc describe placement demo -n ns1... Events:  Type    Reason          Age   From                 Message  ----    ------          ----  ----                 -------  Normal  DecisionCreate  100s   placementController  Decision demo-decision-1 is created with placement demo in namespace ns1  Normal  DecisionUpdate  100s   placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     100s   placementController  cluster1:0 cluster2:100 cluster3:200

          可以看到并沒有事件更新,調(diào)度結(jié)果也沒有發(fā)生變化。所以當(dāng)我們添加一個(gè)僅僅比 cluster2 的內(nèi)存高出 20MB 的 cluster4 時(shí),調(diào)度結(jié)果并不會(huì)被影響。

          讓我們嘗試添加一個(gè)新的集群,并且這個(gè)集群上有著比被選中集群高出很多的可分配內(nèi)存。

          現(xiàn)在,讓我們?cè)囍砑右粋€(gè)有 150MB 可分配內(nèi)存的新集群 cluster4,同時(shí)再次檢查 Placement 中的事件 (event)。

          # oc describe placement demo -n ns1...Events:  Type    Reason          Age   From                 Message  ----    ------          ----  ----                 -------  Normal  DecisionCreate  2m10s   placementController  Decision demo-decision-1 is created with placement demo in namespace ns1  Normal  DecisionUpdate  2m10s   placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     2m10s   placementController  cluster1:0 cluster2:100 cluster3:200  Normal  DecisionUpdate  3s      placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     3s      placementController  cluster1:200 cluster2:145 cluster3:189 cluster4:200

          這一次,調(diào)度結(jié)果更新了,Placement 被重新調(diào)度到了 cluster3 和 cluster4 上。

          # oc describe placementdecision demo-decision-1 -n ns1...Status:  Decisions:    Cluster Name:  cluster3    Reason:            Cluster Name:  cluster4    Reason:

          在上面這個(gè)例子中,當(dāng)資源只發(fā)生了少許變化時(shí),調(diào)度結(jié)果并不會(huì)被影響。而當(dāng)資源發(fā)生比較大的變化時(shí),變化會(huì)立刻反應(yīng)在調(diào)度結(jié)果中。這樣便引發(fā)出如下 2 個(gè)挑戰(zhàn):

          • 如果希望調(diào)度結(jié)果對(duì)資源變化保持敏感,應(yīng)該怎么做?

          • 如果希望調(diào)度結(jié)果保持穩(wěn)定,忽略資源的變化,應(yīng)該怎么做?

          還記得我們?cè)?prioritizerPolicy 中有 4 個(gè)優(yōu)選器并且可以調(diào)整他們的權(quán)重嗎?我們可以通過修改 prioritizerPolicy 的配置來解決上面兩個(gè)問題。

          示例 2:選擇具有最大可分配內(nèi)存的群集,并使 Placement 對(duì)資源變化保持敏感。


          為了使調(diào)度結(jié)果對(duì)資源的變化敏感,這次我們顯式設(shè)置了優(yōu)選器 ResourceAllocatableMemory,權(quán)重為 3。

          apiVersion: cluster.open-cluster-management.io/v1alpha1kind: Placementmetadata:  name: placement7  namespace: ns1spec:  numberOfClusters: 2  prioritizerPolicy:    configurations:      - scoreCoordinate:          builtIn: ResourceAllocatableMemory        weight: 3

          當(dāng) Placement 創(chuàng)建好之后,讓我們通過 oc describe 命令來檢查 Placement 和 PlacementDecision 的結(jié)果。

          # oc describe placement demo -n ns1...Status:  Conditions:    Last Transition Time:       2021-11-09T08:58:40Z    Message:                    All cluster decisions scheduled    Reason:                     AllDecisionsScheduled    Status:                     True    Type:                       PlacementSatisfied  Number Of Selected Clusters:  2Events:  Type    Reason          Age   From                 Message  ----    ------          ----  ----                 -------  Normal  DecisionCreate  35s   placementController  Decision demo-decision-1 is created with placement demo in namespace ns1  Normal  DecisionUpdate  35s   placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     35s   placementController  cluster1:-200 cluster2:100 cluster3:400# oc describe placementdecision demo-decision-1 -n ns1...Status:  Decisions:    Cluster Name:  cluster2    Reason:            Cluster Name:  cluster3    Reason:

          初始的調(diào)度結(jié)果為 cluster2 和 cluster3。現(xiàn)在,讓我們?cè)囍俅渭尤胍粋€(gè)有 100MB 可分配內(nèi)存的集群,然后檢查 Placement 事件。

          # oc describe placement demo -n ns1...Events:  Type    Reason          Age   From                 Message  ----    ------          ----  ----                 -------  Normal  DecisionCreate  3m1s  placementController  Decision demo-decision-1 is created with placement demo in namespace ns1  Normal  DecisionUpdate  3m1s  placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     3m1s  placementController  cluster1:-200 cluster2:100 cluster3:400  Normal  DecisionUpdate  2s    placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     2s    placementController  cluster1:-200 cluster2:200 cluster3:500 cluster4:400

          這一次,PlacementDecision 更新了,并且結(jié)果重新調(diào)度到了 cluster3 和 cluster4。

          # oc describe placementdecision demo-decision-1 -n ns1...Status:  Decisions:    Cluster Name:  cluster3    Reason:            Cluster Name:  cluster4    Reason:

          示例 3:選擇具有最大可分配內(nèi)存的集群并穩(wěn)定調(diào)度結(jié)果。


          為了使調(diào)度結(jié)果保持穩(wěn)定,這次我們顯式設(shè)置了優(yōu)選器 Steady,并且設(shè)置權(quán)重為 3。

          apiVersion: cluster.open-cluster-management.io/v1alpha1kind: Placementmetadata:  name: demo  namespace: ns1spec:  numberOfClusters: 2  prioritizerPolicy:    configurations:      - scoreCoordinate:          builtIn: ResourceAllocatableMemory      - scoreCoordinate:          builtIn: Steady        weight: 3

          Placement 創(chuàng)建好之后,再次通過 oc describe 命令來檢查 Placement 和 PlacementDecision 的結(jié)果。

          # oc describe placement demo -n ns1...Status:  Conditions:    Last Transition Time:       2021-11-09T09:05:36Z    Message:                    All cluster decisions scheduled    Reason:                     AllDecisionsScheduled    Status:                     True    Type:                       PlacementSatisfied  Number Of Selected Clusters:  2Events:  Type    Reason          Age   From                 Message  ----    ------          ----  ----                 -------  Normal  DecisionCreate  15s   placementController  Decision demo-decision-1 is created with placement demo in namespace ns1  Normal  DecisionUpdate  15s   placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     15s   placementController  cluster1:0 cluster2:100 cluster3:200# oc describe placementdecision demo-decision-1 -n ns1...Status:  Decisions:    Cluster Name:  cluster2    Reason:            Cluster Name:  cluster3    Reason:

          初始的調(diào)度結(jié)果為 cluster2 和 cluster3。

          現(xiàn)在,讓我們?cè)囍俅渭尤胍粋€(gè)有 150MB 可分配內(nèi)存的集群,然后檢查 Placement 事件。這一次 event 并沒有更新。

          # oc describe placement demo -n ns1...Events:  Type    Reason          Age   From                 Message  ----    ------          ----  ----                 -------  Normal  DecisionCreate  80s   placementController  Decision demo-decision-1 is created with placement demo in namespace ns1  Normal  DecisionUpdate  80s   placementController  Decision demo-decision-1 is updated with placement demo in namespace ns1  Normal  ScoreUpdate     80s   placementController  cluster1:0 cluster2:100 cluster3:200

          再次檢查 PlacementDecision,可以看到調(diào)度結(jié)果并沒有變化,固定在了 cluster2 和 cluster3。

          # oc describe placementdecision demo-decision-1 -n ns1...Status:  Decisions:    Cluster Name:  cluster2    Reason:            Cluster Name:  cluster3    Reason:

          在前面的三個(gè)示例中,我們展示了多個(gè)優(yōu)選器是如何協(xié)同工作的,以及如何通過調(diào)整每個(gè)優(yōu)選器的權(quán)重來影響最終決策。在使用中,你也可以按需求嘗試調(diào)整權(quán)重或更改已啟用的優(yōu)選器。

          05

          總結(jié)

          Cloud Native


          通過本文,你可以了解到如何在不同的應(yīng)用場景下使用 Placement API。這篇文章解釋了什么是 Placement 以及它如何和一些主流的開源項(xiàng)目配合使用。介紹了 Placement 如何選擇集群,以及通過一些示例展示多個(gè)優(yōu)選器是如何共同工作并做出調(diào)度決策的。在文章的最后,提供了一些示例來展示最佳實(shí)踐。歡迎隨時(shí)在 open-cluster-management-io GitHub 社區(qū)[7]中提出問題,或使用 Slack[8]與我們聯(lián)系,同時(shí)加入我們的 Google Groups 以訂閱我們的定期社區(qū)會(huì)議。
           
          未來我們將在 OCM 里看到更多結(jié)合 OCM 高級(jí)調(diào)度能力的其他高級(jí)功能模塊,比如多集群 Workload 調(diào)度/容災(zāi)等等。

          06

          相關(guān)鏈接

          Cloud Native


          [1] Open Cluster Management 0.6 發(fā)布:
          https://open-cluster-management.io/community/releases/

          [2] OCM 社區(qū):
          https://github.com/open-cluster-management-io/community/issue

          [3] ManagedCluster 和 ManagedClusterSet:
          https://open-cluster-management.io/concepts/managedcluster/

          [4] Placement:
          https://open-cluster-management.io/concepts/placement/

          [5] PlacementSpec:
          https://github.com/open-cluster-management-io/api/blob/main/cluster/v1alpha1/types.go

          [6] 社區(qū)文檔:
          https://github.com/open-cluster-management-io/enhancements/blob/main/enhancements/sig-architecture/32-extensiblescheduling/32-extensiblescheduling.md

          [7] open-cluster-management-io GitHub 社區(qū):
          https://github.com/open-cluster-management-io/community/issues

          [8] Slack:

          https://kubernetes.slack.com/archives/C01GE7YSUUF


          參考:

          https://timewitch.net/post/2020-03-31-multicluster-workloads/

          點(diǎn)擊“閱讀原文”,快速瀏覽 OpenClusterManagement 中文站點(diǎn)。



          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产综合在线视频网 | 黄色一级操逼视频 | 一级a免一级a做免费线看内裤的 | 1超碰在线| 欧美一级婬片A片免费软件 |