怎么使用kubefed建立Kubernetes联盟

  

这期内容当中小编将会给大家带来有关怎么使用kubefed建立Kubernetes Federation,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

使用kubefed建立Kubernetes Federation

Kubernetes Federation(聯邦) 是實現跨地區與跨服務商多個 Kubernetes 叢集的管理機制。Kubernetes Federation 的架構非常類似純 Kubenretes 叢集,Federation 會擁有自己的 API Server 與 Controller Manager 來提供一個標準的 Kubernetes API,以及管理聯邦叢集,並利用 Etcd 來儲存所有狀態,不過差異在於 Kubenretes 只管理多個節點,而 Federation 是管理所有被註冊的 Kubernetes 叢集。

Federation 使管理多個叢集更為簡單,這主要是透過兩個模型來實現:

  1. 跨叢集的資源同步(Sync resources across clusters):提供在多個叢集中保持資源同步的功能,如確保一個 Deployment 可以存在於多個叢集中。

  2. 跨叢集的服務發現(Cross cluster discovery:):提供自動配置 DNS 服務以及在所有叢集後端上進行負載平衡功能,如提供全域 VIP 或 DNS record,並透過此存取多個叢集後端。

Federation 有以下幾個好處:

  1. 跨叢集的資源排程,能讓 Pod 分配至不同叢集的不同節點上執行,如果當前叢集超出負荷,能夠將額外附載分配到空閒叢集上。

  2. 叢集的高可靠,能夠做到 Pod 故障自動遷移。

  3. 可管理多個 Kubernetes 叢集。

  4. 跨叢集的服務發現。

雖然 Federation 能夠降低管理多叢集門檻,但是目前依據不建議放到生產環境。以下幾個原因:

  • 成熟度問題,目前還處與 Alpha 階段,故很多功能都還處於實現性質,或者不太穩定。

  • 提升網路頻寬與成本,由於 Federation 需要監控所有叢集以確保當前狀態符合預期,因是會增加額外效能開銷。

  • 跨叢集隔離差,Federation 的子叢集git有可能因為 Bug 的引發而影響其他叢集運行狀況。

  • 個人用起來不是很穩定,例如建立的 Deployment 刪除很常會 Timeout。

  • 支援的物件資源有限,如不支援 StatefulSets。可參考 API resources。

Federation 主要包含三個元件:

  • federation-apiserver:主要提供跨叢集的 REST API 伺服器,類似 kube-apiserver。

  • federation-controller-manager:提供多個叢集之間的狀態同步,類似 kube-controller-manager。

  • kubefed:Federation CLI 工具,用來初始化 Federation 元件與加入子叢集。

節點資訊

本次安裝作業系統採用Ubuntu 16.04 Server,測試環境為實體機器,共有三組叢集:

Federation 控制平面叢集(簡稱 F):

IP AddressHostvCPURAM172.22.132.31k8s-f-m1416G172.22.132.32k8s-f-n1416G

叢集 A:

IP AddressHostvCPURAM172.22.132.41k8s-a-m1816G172.22.132.42k8s-a-n1816G

叢集 B:

IP AddressHostvCPURAM172.22.132.51k8s-b-m1816G172.22.132.52k8s-b-n1816G

事前準備

安裝與進行 Federation 之前,需要確保以下條件達成:

  • 所有叢集的節點各自部署成一個 Kubernetes 叢集,請參考 用 kubeadm 部署 Kubernetes 叢集。

  • 修改 F、A 與 B 叢集的 Kubernetes config,並將 A 與 B 複製到 F 節點,如修改成以下:

...
  …
  名称:才能k8s-a-cluster
  背景:
  安康;上下文:
  ,,,集群:k8s-a-cluster
  ,,,用户:a-cluster-admin
  名称:才能a-cluster-context
  当前上下文:a-cluster-context
  :配置
  偏好:{}
  用户:
  安康;名称:a-cluster-admin
  用户:才能
  …

這邊需要修改每個叢集配置。

<李>

接著在F叢集合併F,與B三個配置,透過以下方式進行:

<>之前,美元ls   a-cluster.conf , b-cluster.conf  f-cluster.conf      美元,KUBECONFIG=f-cluster.conf: a-cluster.conf: b-cluster.conf  kubectl  config  view ——flatten 在~/.kube/配置   美元,kubectl  config  get-contexts   CURRENT ,, NAME ,,,,,,,,,,,,,,, CLUSTER ,,,,,,,, AUTHINFO ,,,,,,,,,名称空间   ,,,,,,,,,,,,a-cluster-context  k8s-a-cluster , a-cluster-admin   ,,,,,,,,,,,,b-cluster-context  k8s-b-cluster , b-cluster-admin   *,,,,,,,,,,,,f-cluster-context  k8s-f-cluster ,, f-cluster-admin

怎么使用kubefed建立Kubernetes联盟