<track id="awmdf"></track><acronym id="awmdf"></acronym>
    <pre id="awmdf"><strike id="awmdf"></strike></pre>
    <p id="awmdf"></p>
    <td id="awmdf"><option id="awmdf"></option></td>
          1. <object id="awmdf"><label id="awmdf"></label></object>

            智匯華云 | Kubernetes多集群管理方案kubefed原理解析

            來源:微信公眾號 更新時間:2022-03-01
            Kubernetes 原生的管理能力目前仍然停留在單集群級別。每一個集群可以穩定地自治運行,但是卻缺乏橫貫多個集群的統籌管理能力。Kubefed是開源的多集群管理方案,可應用于突破單集群性能瓶頸、異地多集群、混合云管理等場景。通過CRD+Operator的方式定義一系列自定義聯邦資源,并通過自定義Controller實現跨集群資源協調能力。

            Kubernetes 原生的管理能力目前仍然停留在單集群級別。每一個集群可以穩定地自治運行,但是卻缺乏橫貫多個集群的統籌管理能力。Kubefed是開源的多集群管理方案,可應用于突破單集群性能瓶頸、異地多集群、混合云管理等場景。通過CRD+Operator的方式定義一系列自定義聯邦資源,并通過自定義Controller實現跨集群資源協調能力。

            /upload/image/20220302/890a359de9c1970afbe654a154a1bb07.jpeg

            kubefed簡介

            1.kubfed介紹

            Kubefed(Federation v2)即 Kubernetes 聯邦,是開源的多集群解決方案,目前的版本是 v0.8.1,處于beta階段。Federation v1版本因為在擴展性、權限管理、架構等方便存在一定缺陷而被廢棄。v2版本對v1版本架構進行了優化,使用CRD+operator的方式定義一系列自定義聯邦資源,并通過自定義controller實現跨集群資源協調能力。

            Kubefed可應用于突破單集群性能瓶頸、控制故障爆炸半徑、異地多集群、混合云管理等場景,集群建立聯邦后,可以將用戶的k8s資源在多集群中分發并管理。 

            2.Kubfed組成

             WechatIMG47.png

            Kubefed組件圖

            Kubefed所有組件部署在一個集群中,該集群作為Host集群,kubefed通過api訪問其他成員集群的kube-apiserver實現對成員集群的管理,kubefed所在集群也可以配置為成員集群。

            Kubefed主要由三個組件組成:

            Kubefed admission webhook:提供了準入控制,作用在CR的創建過程的校驗階段

            Kubefed controller-manager:kubefed控制平面,處理自定義資源以及協調不同集群間的資源狀態

            Kubfedctl:二進制管理工具,實現用戶和kubefed的交互,比如集群注冊、資源注冊等kubefed CRD

            1.Kubefed CRD介紹

            Kubefed通過crd實現了對任意資源的聯邦管理,相對于Federation v1需要通過擴展api-server的實現,大大提高了靈活性和擴展性。

            Kubefed中CRD API GROUP如下表格所示:

            WechatIMG48.jpeg

            2 kubefed CRD的交互

            WechatIMG49.png

            CRD組成及交互圖

            對集群資源聯邦化的實現主要是通過兩種CRD來完成,分別是 FederatedTypeConfig 和 Federated。

            FederatedTypeConfig定義了 Federated和kubernetes api資源的關聯關系。而 Federated用來定義怎么去聯邦化對應的kubernetes api資源。

            一個典型的deployment的FederatedTypeConfig示例如下:

            apiVersion: types.kubefed.io/v1beta1

            kind: FederatedDeployment

            metadata:

              name: fed-deploy

              namespace: fed-ns

            spec:

              template:

                {deployment-define}  

              overrides:

              - clusterName: cluster-1

                clusterOverrides:

                - path: /spec/replicas

                  value: 10

                - path: /spec/template/spec/containers/0/image

                  value: nginx:1.17.0-alpine

              placement:

                clusters:

                - name: cluster-1

                - name: cluster-2

            status:

              clusters:

              - name: cluster -1

              - name: cluster -2

              conditions:

              - lastTransitionTime: "2021-12-13T09:40:27Z"

                status: "True"

                type: Propagation

            Federated Type CRD包含三個部分:

            Template:該資源本身的定義,用于集群中該資源的創建

            Placement:分發策略,定義該資源部署于哪些集群中 

            Overrides:對template中的字段進行覆蓋重寫,用于對資源的配置更新。如示例中對名稱為cluster-1的member cluster中deployment的副本數和鏡像進行了重新配置。Override中未選擇的集群使用template的定義,保持不變。

            用戶通過kubefedctl enable命令生成指定該資源類型的FederatedTypeConfig  CRD,通過 kubefedctl federate 或者使用定義好的yaml文件對資源進行聯邦部署。

            3.集群資源調度CRD

            RSP(ReplicaSchedulingPreference)可以被視為對用戶更友好的分發副本的機制,方便用戶定義資源在不同集群的部署策略。用戶只需要創建RSP資源和關聯的聯合資源(僅填充spec.template)可以將副本在各集群之前按照定義策略分發。

            RSP模塊可以對Federated Type CRD中placement和Overrides字段內容進行重寫,rs重寫數據來源于用戶配置的調度文件。

            一個典型的RSP文件定義示例如下,該RSP文件定義了一個deployment應用負載在部署時,各集群的部署策略。

            apiVersion: scheduling.kubefed.io/v1alpha1

            kind: ReplicaSchedulingPreference

            metadata:

              name: fed-deploy

              namespace: fed-ns

            spec:

              targetKind: FederatedDeployment

              totalReplicas: 20

              clusters:

               "*":

                 weight: 1

                 maxReplicas: 15

               cluster-1:

                 weight:

                 minReplicas: 3

                 maxReplicas: 10

            RSP文件中主要包含以下字段:

            targetKind:定義該RSP文件應用的聯邦資源類型,目前僅支持FederatedDeployment和FederatedReplicaSet。

            totalReplicas:資源的總副本數,各個集群按照用戶配置的權重或者比例進行資源計算時,會先根據總數進行計算得到一個初步結果,若集群中配置了最大值或最小值與計算得到的值沖突,則會使用用戶配置的最大值或者最小值。因此實際的總副本數可能會和配置的總副本數不一致。

            4.kubefed 實現原理

            kubefed使用自定義CRD和自定義controller 實現聯邦集群的資源管理,原理如下圖所示:

            WechatIMG50.jpeg

            Kubfed控制面主要由三個自定義controller組成:

            ClusterController: 集群控制器,用戶通過kubefedctl join/unjoin 來加入/刪除集群,當成功加入時,會建立一個 KubefedCluster 組件來儲存集群相關信息,如 API Endpoint、CA Bundle 等。這些信息會被用在 KubeFed Controller 訪問各 Kubernetes 集群,以確保能夠建立 Kubernetes API 資源。并定時調用各集群的/healthz接口,維護可用集群列表,用于應用分發前的集群選擇與過濾。

            FederateTypeConfigController:聯邦資源控制器,用于管理各集群間資源分發與狀態監控。聯邦資源控制器會為每種聯邦資源類型創建一個資源分發控制器,和狀態收集控制器,實現該類資源的聯邦功能。StatusController和SyncController 都使用了FederatedInformer用來感知所有member cluster中某中聯邦資源的變更。如果變更則從HostCluster中獲取最新的資源定義同步到各memberCluster中。

            SchedulerManage:調度控制器,用于創建適用于ReplicaSet和Deployment的RSPController,RSPController。當用戶創建RSP資源后,RSP Controller 會收到通知,匹配對應 namespace/name 的 FederatedDeployment 與 FederatedReplicaSet 是否存在,若存在的話,會根據rsp中設定的策略計算出每個集群預期的副本數,之后覆寫 Federated 資源中的 spec.overrides 內容以重新定義每個集群的副本數,最后再由 KubeFed Sync Controller 來同步至每個集群。

            總結

            Kubefed通過crd與自定義controller實現了對任意資源的聯邦,并支持用戶自定義調度策略,易于擴展和維護。

            目前多集群管理除了kubefed項目還有華為推出的karmada、阿里和redhat推出的OCM(open cluster management)項目,相對于karmada部署資源時host cluster上必須要部署,kubefed可以選擇不部署在host cluster,減少了控制面所在集群的負擔,但在資源管理和資源調度上karmada比kubefed有優勢。另外kubefed相對于ocm,聯邦化資源會產生較多的crd,在維護各集群中crd的api版本增加了負擔。因此需要用戶根據實際使用場景選擇合適的多集群管理方案。

            在線咨詢
            400-808-4000
            免費試用
            中文字幕二区亚洲综合