本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

在 Cluster API 中引入 ClusterClass 和託管拓撲

Cluster API 社群很高興地宣佈實現 ClusterClass 和託管拓撲,這是一項新功能,將極大地簡化您以宣告方式配置、升級和操作多個 Kubernetes 叢集的方式。

一點背景資訊……

在深入瞭解細節之前,讓我們回顧一下 Cluster API 的歷史。

Cluster API 專案始於三年前,最初的版本側重於可擴充套件性以及實現一個宣告性 API,該 API 允許跨基礎設施提供商實現無縫體驗。這在許多雲提供商中取得了成功:AWS、Azure、Digital Ocean、GCP、Metal3、vSphere 等等。

解決了可擴充套件性問題後,重心轉向了功能,例如自動控制平面和 etcd 管理、基於健康的機器修復、機器滾動策略等等。

快進到 2021 年,隨著許多公司使用 Cluster API 來管理在生產中執行工作負載的 Kubernetes 叢集,社群將其精力集中在程式碼、API、文件的穩定性以及為 Kubernetes 版本提供資訊的廣泛測試訊號上。

有了堅實的基礎,以及一個充滿活力和熱情且仍在不斷壯大的社群,是時候為新使用者和高階使用者規劃另一個使用者體驗迭代了。

ClusterClass 和託管拓撲隆重登場!

ClusterClass

顧名思義,ClusterClass 和託管拓撲分為兩部分。

ClusterClass 背後的理念很簡單:一次定義叢集的形狀,並多次重用它,從而抽象掉 Kubernetes 叢集的複雜性和內部結構。

Defining a ClusterClass

ClusterClass 的核心是一組叢集和機器模板。您可以將其用作“圖章”,可用於建立許多形狀相似的叢集。

---
apiVersion: cluster.x-k8s.io/v1beta1
kind: ClusterClass
metadata:
  name: my-amazing-cluster-class
spec:
  controlPlane:
    ref:
      apiVersion: controlplane.cluster.x-k8s.io/v1beta1
      kind: KubeadmControlPlaneTemplate
      name: high-availability-control-plane
    machineInfrastructure:
      ref:
        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
        kind: DockerMachineTemplate
        name: control-plane-machine
  workers:
    machineDeployments:
      - class: type1-workers
        template:
          bootstrap:
            ref:
              apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
              kind: KubeadmConfigTemplate
              name: type1-bootstrap
          infrastructure:
            ref:
              apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
              kind: DockerMachineTemplate
              name: type1-machine
      - class: type2-workers
        template:
          bootstrap:
            ref:
              apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
              kind: KubeadmConfigTemplate
              name: type2-bootstrap
          infrastructure:
            ref:
              kind: DockerMachineTemplate
              apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
              name: type2-machine
  infrastructure:
    ref:
      apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
      kind: DockerClusterTemplate
      name: cluster-infrastructure

可能性是無限的;您可以從社群獲得預設的 ClusterClass,從您選擇的供應商處獲得“現成”的類,從您公司的平臺管理員處獲得“認證”的類,甚至可以為高階場景建立自定義類。

託管拓撲

託管拓撲讓您能夠將 ClusterClass 的強大功能付諸實踐。

給定一個 ClusterClass,您可以透過提供單個資源(即叢集)來建立許多形狀相似的叢集。

Create a Cluster with ClusterClass

這是一個示例

---
apiVersion: cluster.x-k8s.io/v1beta1
 kind: Cluster
 metadata:
   name: my-amazing-cluster
   namespace: bar
 spec:
   topology: # define a managed topology
     class: my-amazing-cluster-class # use the ClusterClass mentioned earlier
     version: v1.21.2
     controlPlane:
       replicas: 3
     workers:
       machineDeployments:
       - class: type1-workers
         name: big-pool-of-machines
         replicas: 5
       - class: type2-workers
         name: small-pool-of-machines
         replicas: 1

但它不僅僅是簡化了叢集建立。現在,叢集充當整個拓撲的單一控制點。

Cluster API 的所有強大功能、可擴充套件性、生命週期自動化、穩定性以及管理您選擇的基礎設施提供商上的企業級 Kubernetes 叢集所需的所有功能現在都觸手可及:您可以建立叢集、新增新機器、升級到下一個 Kubernetes 版本,所有這些都可以在一個地方完成。

它就像看起來一樣簡單!

接下來是什麼

雖然出色的 Cluster API 社群正在努力在今年晚些時候釋出 ClusterClass 和託管拓撲的第一個版本,但我們已經期待著該專案及其生態系統的下一步發展。

前方有許多偉大的想法和機遇!

我們希望使託管拓撲更加強大和靈活,允許使用者根據叢集的特定需求動態更改 ClusterClass 的部分內容;這將確保相同的簡單直觀的使用者體驗,以解決複雜的問題,例如為特定 Kubernetes 版本和特定基礎設施提供商區域選擇機器映象,或在整個叢集中注入代理配置等等。

請繼續關注接下來的內容,如果您有任何問題、意見或建議