kubernetes集群聯(lián)邦

概念

集群聯(lián)邦 Federation 的目的是實現(xiàn)單一集群統(tǒng)一管理多個kubernetes集群的機制榨为。這些集群可以是跨地域的镐依,跨云廠商的或者是用戶內部自建集群。一旦集群建立聯(lián)邦后,就可以使用集群 Federation API 來管理多個集群的 kubernetes API 資源腕侄。

目標

  • 簡化管理多個聯(lián)邦集群的Kubernetes API 資源
  • 在多個集群之間分散工作負載(容器),以提升應用(服務)的可靠性
  • 在不同集群中脐区,能更快速更容易地遷移應用(服務)
  • 跨集群的服務發(fā)現(xiàn)块促,服務可以就近訪問,以降低延遲
  • 實踐多云(Multi-cloud)或混合云(Hybird Cloud)的部署

集群聯(lián)邦最初是 v1 版本淹辞,因為方案設計問題医舆,導致可擴展性比較差,已經(jīng)被廢棄象缀,目前社區(qū)提出了新的方案 Federation V2

Federation V1

image.png

從上圖架構中得知Federation v1 的設計沿用類似Kubernetes 模型蔬将,其主要組件有以下:

  • federation-apiserver :提供Federation API資源,只支持部分Kubernetes API resources央星。
  • federation-controller-manager :協(xié)調不同集群之間的狀態(tài)霞怀,如同步Federated資源與策略,并建立Kubernetes組件至對應集群上莉给。
  • etcd :儲存Federation的狀態(tài)毙石。

該方案設計之初沒有考慮到crd的特性,支持的 Federation API 資源類型都是寫死的颓遏,無法有效的擴展徐矩,不能兼容新的api資源,不支持跨集群權限管理叁幢,如不支持RBAC滤灯。聯(lián)邦層級的設定與策略依賴API 資源的Annotations 內容,這使得彈性不佳曼玩。

Federation V2

Federation V2 是Kubernetes SIG Multi-Cluster團隊新提出的集群聯(lián)邦架構( Architecture Doc與Brainstorming Doc )鳞骤,新架構在Federation v1基礎之上,簡化擴展Federated API過程演训,并加強跨集群服務發(fā)現(xiàn)與編排的功能弟孟。

相較于V1,F(xiàn)ederation V2移除了 federation-apiserver 組件样悟,通過 crd 機制來完成 federated resource的擴充拂募,kubefed-controller 組件通過監(jiān)聽crd的變化來完成聯(lián)邦資源的同步和調度等功能。


image.png

聯(lián)邦成員注冊

集群聯(lián)邦安裝文檔 DOC窟她,集群成員注冊后陈症,會在管理集群創(chuàng)建一個 KubeFedCluster 資源來存儲集群的基本信息,如API Endpoint震糖、CA Bundle等录肯,kubefed controller 通過這些信息來訪問和管理聯(lián)邦集群成員。

image.png

聯(lián)邦化資源

Federation V2 可以聯(lián)邦化任意資源吊说,包括自定義的crd資源论咏。對集群資源聯(lián)邦化的實現(xiàn)主要是通過兩種CRD來完成优炬,分別是 FederatedTypeConfig 和 Federated<API Type> ,F(xiàn)ederatedTypeConfig定義了 Federated<API Type> 和kubernetes api資源的關聯(lián)關系厅贪。而 Federated<API Type> 用來定義怎么去聯(lián)邦化對應的kubernetes api資源蠢护。


image.png

比如我們想將 configmap 通過聯(lián)邦機制在多個集群中創(chuàng)建,則需要先在Federation Host集群中創(chuàng)建 FederatedConfigMap CRD資源养涮,然后創(chuàng)建FederatedTypeConfig 資源將 FederatedConfigMap 和 Configmap 建立關聯(lián)葵硕。

apiVersion: core.kubefed.k8s.io/v1beta1
kind: FederatedTypeConfig
metadata:
  name: configmaps
  namespace: kube-federation-system
spec:
  federatedType:
    group: types.kubefed.k8s.io
    kind: FederatedConfigMap
    pluralName: federatedconfigmaps
    scope: Namespaced
    version: v1beta1
  propagation: Enabled
  targetType:
    kind: ConfigMap
    pluralName: configmaps
    scope: Namespaced
    version: v1

如果要新增新的 federate type api,執(zhí)行 kubefedctl enable <kubernetes resource api type> 贯吓,如下懈凹,如果想要聯(lián)邦化新的資源crd資源 etcdclusters,則可以執(zhí)行 kubefedctl enable etcdclusters 悄谐,執(zhí)行后會自動生成新的crd聯(lián)邦資源 federatedetcdclusters介评,以及類型為 federatedtypeconfigs 的cr資源 etcdclusters.<api_group>。

$ kubefedctl enable etcdclusters
$ kubectl api-resources | grep etcd
etcdclusters                      etcd         etcd.database.coreos.com         true         EtcdCluster
federatedetcdclusters             fetcd        types.kubefed.k8s.io             true         FederatedEtcdCluster

$ kubectl -n kube-federation-system get federatedtypeconfigs | grep etcd
etcdclusters.etcd.database.coreos.com    3m16s

跨集群調度

KubeFed提供了一種自動化機制來將工作負載實例分散到不同的集群中尊沸,且能夠基于總副本數(shù)與集群的定義策略來將Deployment或ReplicaSet資源進行編排威沫。編排策略是通過創(chuàng)建ReplicaSchedulingPreference(RSP),再由KubeFed RSP Controller監(jiān)聽與獲取RSP內容來將工作負載實例建立到指定的集群上洼专。
如下例子,假設有三個集群 cluser1孵构,cluser2屁商,cluser3

apiVersion: scheduling.kubefed.k8s.io/v1alpha1
kind: ReplicaSchedulingPreference
metadata:
  name: test-deployment
  namespace: test-namespace
spec:
  targetKind: FederatedDeployment
  totalReplicas: 15 
  clusters: 
    "*":
      weight: 2
      maxReplicas: 12
    cluster3:
      minReplicas: 1
      maxReplicas: 3
      weight: 1

當rsp創(chuàng)建后,kubefed rsp controller 會監(jiān)聽到變化颈墅,并獲取rsp內容蜡镶,根據(jù)rsp定義的 name/namespace 找到對應的 federatedDeployment 資源,根據(jù)定義的策略計算出每個集群的副本數(shù)量恤筛,之后修改 federatedDeployment 資源的spec.overrides內官还,最好 kubefed sync cnotroller 會監(jiān)聽到 federatedDeployment 的變化,并將新的副本同步到聯(lián)邦集群中毒坛。


image.png

跨集群服務發(fā)現(xiàn)

kubefed 提供了一系列api 資源和controller來實現(xiàn)跨集群Service/Ingress的DNS records自動發(fā)現(xiàn)和生成望伦,并通過 ExternalDNS 將dns記錄同步更新到服務提供商。

apiVersion: multiclusterdns.kubefed.k8s.io/v1alpha1
kind: Domain
metadata:
  name: test
  namespace: kube-federation-system
domain: k8s.example.com
---
apiVersion: multiclusterdns.kubefed.k8s.io/v1alpha1
kind: ServiceDNSRecord
metadata:
  name: nginx
  namespace: development
spec:
  domainRef: test
  recordTTL: 300

假設我們已經(jīng)創(chuàng)建了一個名為nginx 的 FederatedDeployment 煎殷,并且創(chuàng)建了對應的 FederatedService 來提供 LoadBalancer屯伞。這時當創(chuàng)建以上 Domain與ServiceDNSRecord 資源后,KubeFed Service DNS Controller 會監(jiān)聽到 ServiceDNSRecord 的創(chuàng)建豪直,并收集聯(lián)邦集群成員的 Service 信息劣摇,更新到 ServiceDNSRecord 中;同時 DNS Endpoint Controller 會依據(jù) ServiceDNSRecord 的內容生成并更新 DNSEndpoint 資源弓乙,最后ExternalDNS組件收集 DNSEndpoint 信息同步到DNS服務提供商末融。


image.png

若是Ingress 的話钧惧,會由IngressDNSRecord 資源取代,并由Ingress DNS Controller 收集信息勾习。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末垢乙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子语卤,更是在濱河造成了極大的恐慌追逮,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粹舵,死亡現(xiàn)場離奇詭異钮孵,居然都是意外死亡,警方通過查閱死者的電腦和手機眼滤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門巴席,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诅需,你說我怎么就攤上這事漾唉。” “怎么了堰塌?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵赵刑,是天一觀的道長。 經(jīng)常有香客問我场刑,道長般此,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任牵现,我火速辦了婚禮铐懊,結果婚禮上,老公的妹妹穿的比我還像新娘瞎疼。我一直安慰自己科乎,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布贼急。 她就那樣靜靜地躺著茅茂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竿裂。 梳的紋絲不亂的頭發(fā)上玉吁,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音腻异,去河邊找鬼进副。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的影斑。 我是一名探鬼主播给赞,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矫户!你這毒婦竟也來了片迅?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤皆辽,失蹤者是張志新(化名)和其女友劉穎柑蛇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驱闷,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡耻台,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了空另。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盆耽。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扼菠,靈堂內的尸體忽然破棺而出摄杂,到底是詐尸還是另有隱情,我是刑警寧澤循榆,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布析恢,位于F島的核電站,受9級特大地震影響冯痢,放射性物質發(fā)生泄漏氮昧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一浦楣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咪辱,春花似錦振劳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至专筷,卻和暖如春弱贼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磷蛹。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工吮旅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人味咳。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓庇勃,卻偏偏與公主長得像檬嘀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子责嚷,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348