本文发布已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

在 Cluster API 中引入 ClusterClass 和托管拓扑

集群 API 社区很高兴地宣布实现了ClusterClass 和托管拓扑,这是一项新功能,它将极大地简化以声明式方式配置、升级和操作多个 Kubernetes 集群的方式。

一点背景…

在深入了解细节之前,让我们回顾一下集群 API 的历史。

集群 API 项目于三年前启动,最初的版本侧重于可扩展性,并实现了一个声明式的 API,该 API 允许跨基础设施提供商的无缝体验。这在许多云提供商中取得了成功:AWS、Azure、Digital Ocean、GCP、Metal3、vSphere 并且还在不断增加。

在解决了可扩展性问题之后,重点转移到功能上,例如自动控制平面和 etcd 管理、基于健康状况的机器修复、机器推出策略等等。

快进到 2021 年,许多公司使用集群 API 来管理在生产环境中运行工作负载的 Kubernetes 集群,社区的重点是代码、API、文档以及为 Kubernetes 版本提供信息的广泛测试信号的稳定性。

在稳固的基础和充满活力且热情好客的社区仍然在不断发展的情况下,现在是时候为新用户和高级用户计划 UX 的另一次迭代了。

推出 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

但这不仅仅是简化集群创建。现在,集群充当整个拓扑的单一控制点。

集群 API 的所有功能、可扩展性、生命周期自动化、稳定性以及在您选择的基础设施提供商上管理企业级 Kubernetes 集群所需的所有功能现在都触手可及:您可以创建集群、添加新机器、升级到下一个 Kubernetes 版本,所有这些都来自一个地方。

它就像看起来一样简单!

下一步是什么

虽然令人惊叹的集群 API 社区正在努力在今年晚些时候交付第一个版本的 ClusterClass 和托管拓扑,但我们已经在展望该项目及其生态系统的下一步发展。

未来有很多好主意和机会!

我们希望使托管拓扑更加强大和灵活,允许用户根据集群的特定需求动态更改 ClusterClass 的各个部分;这将确保相同的简单直观的 UX 来解决复杂问题,例如为特定 Kubernetes 版本和基础设施提供商的特定区域选择机器镜像,或在整个集群中注入代理配置等等。

请继续关注接下来的内容,如果您有任何问题、意见或建议