隨着數據中心遍佈全球,用戶越來越多地尋求跨區域或集羣傳播其應用或服務的方法。這種需求由多種用例驅動:實現多集羣負載均衡,避免單集羣故障造成巨大損失;通過可訪問和使用多集羣的混合雲解決方案避免提供商鎖定。
Red Hat一直在研究Kubernetes Multicluster Special Interest Group(SIG)和Federation Working Group,近日發佈在OpenShift 3.11上的Kubernetes Federation V2預覽版本,旨在允許用戶通過單一API將服務和工作負載部署到多個集羣。
目的
Red Hat對多集羣問題的探索出於用戶需求推動,其用例包括:
- 將應用程序、服務和策略分發到多集羣;
- 應用程序和服務遷移及其在集羣之間的存儲;
- 應用程序和服務的災難恢復。
爲了滿足這些需求並儘可能獲取廣泛受衆,Red Hat在設計時考慮了模塊化,這意味着已經添加接受個別特殊用例的能力,並且改變系統行爲,可用於自定義資源。
Federation V2簡介
Federation V2是Kubernetes運營商利用自定義資源定義,提供管理Kubernetes Cluster Registry跟蹤的多個Kubernetes集羣應用和服務工具。Federation允許用戶將工作負載部署到集羣註冊表,使用有關工作負載信息對DNS進行編程,並動態調整部署工作負載的不同集羣副本。隨着Federation的成熟,Red Hat也打算添加處理存儲、工作負載等功能。
Federation概念
從根本上說,Federation必須配置兩種類型信息:
- Federation要處理的API類型信息
- Federation目標分發集羣資源
對於Federation處理的每種API類型,聲明狀態的不同部分存在於不同的API資源中:
- “template”類型包含資源的基本規範;
- “placement”類型包含資源應分發到的集羣規範;
- 可選“overrides”類型包含在某些集羣中更改模板資源的規範;
Propagation是指資源如何分配到目標集羣,目前存在主動協調方法。其中,Federation運行控制器,該控制器主動將資源推送到目標集羣。Scheduling是指決策能力,可以決定工作負載如何在不同集羣中傳播,類似於人爲操作。
最後,部署在多個集羣中的應用程序和服務經常需要將外部請求路由到其中一個服務集羣的DNS記錄,Federation的DNS功能爲服務或入口的每個端點維護DNS條目。
示例
本示例展示使用Deployment資源的情況,此示例描述了分佈在兩個集羣上的Deployment資源,其中一個集羣是3副本,另一個集羣是5副本。
Deployment的基本定義位於FederatedDeployment中:
apiVersion: core.federation.k8s.io/v1alpha1
kind: FederatedDeploymentmetadata: name: test-deployment namespace: test-namespacespec: template: metadata: labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx
具有相同名稱的FederatedDeploymentPlacement資源包含有關Deployment應存在的集羣信息:
apiVersion: core.federation.k8s.io/v1alpha1
kind: FederatedDeploymentPlacementmetadata:
name: test-deployment
namespace: test-namespacespec:
clusternames:
- cluster2
- cluster1
FederatedDeploymentOverrides同名資源包含有關如何在某些集羣中區分副本的信息:
apiVersion: core.federation.k8s.io/v1alpha1
kind: FederatedDeploymentOverridemetadata:
name: test-deployment
namespace: test-namespacespec:
overrides:
- clusterName: cluster2
replicas: 5
此時,只能覆蓋給定Federation類型的單個字段(在“Deployments”情況下是“replicas”字段)。 如果必須在成員集羣初始創建目標資源時進行應用覆蓋,則應在Template資源之前創建Override資源。
未來
Red Hat在Kubernetes社區的下一步改進由Federation開發者預覽版收到的反饋驅動,如果你對該功能感興趣並希望Federation在某些部分進行改進,可以在社區中進行反饋。
參考鏈接:https://blog.openshift.com/kubernetes-federation-v2-on-openshift-3-11/