多云的优势与挑战

Posted by Poor12 Blog on July 19, 2023

随着云原生技术的不断发展和使用场景的不断丰富,多云、分布式云逐渐成为引领云计算发展的趋势,越来越多的企业将多云作为企业云原生转型的策略之一。

每个企业的出发点各不相同,但大概可以总结为下列几点:

  • 从规模出发的考虑,单个Kubernetes集群无法无限制地扩展资源,Kubernetes社区对于大规模集群的注意事项中,单集群最大节点数为5000,Pod总数不超过150000。在过去的很长一段时间内,不同厂商尝试通过定制Kubernetes原生组件的方式扩展单集群的规模,这在扩大规模的同时也引入了复杂的单集群运维、不清晰的集群升级路径等问题。 而多集群技术能在不侵入修改Kubernetes单集群的基础上横向扩展资源池的规模,在扩展资源池的同时降低了企业的运维管理等成本。
  • 从业务的部署形态出发的考虑,非常典型的场景是企业的出海业务,海外和国内的业务由于安全合规等原因本身有差异,同时为了提供更好的服务质量,企业也更倾向于将业务就近部署,这种部署形态决定了业务需要部署于位于不同物理区的集群内。除此之外,单个集群本质上是同一个故障域,企业为了提升应用的高可用往往会通过容灾的模式来部署应用,比较常见的模式是同城容灾、异地容灾、双活数据中心、两地三中心等等,出于上述形态也会自然而然地想到多集群与多云技术。
  • 从成本与供应链出发的考虑,企业通常不希望绑定于同一家供应商,一个典型的场景是对于同一种云服务,企业想选用价格最低/性能最好的供应商以降本增效,另一种典型的场景是,用户需要大量的GPU资源来训练大模型应用,当某家云厂商在某个region的资源被耗尽时,用户可以转向其他供应商或者同一供应商的其他region。

基于上述的不同原因,其实也催生了不同的多云使用场景,具体的多云架构可以参考以下这篇文章:https://www.infoq.cn/article/WNLMkZmYujIIs9BNHGlk

重新聚焦在Kubernetes集群上,对于多集群技术的挑战,可以归纳为以下几个问题:

  • 集群繁多时的重复配置:集群配置文件的管理等
  • 应用分散的维护难题:应用的差异化配置及业务跨云访问等
  • 集群边界的限制:集群作为一个隔离资源与应用的逻辑概念,在数据、流量等方面天然是孤立的,在多集群的场景我们希望能突破集群的限制统一管理应用和服务,由此催生的典型技术包括多集群HPA,多集群服务等。
  • 业务不被单个云供应商所绑定:集群故障时自动的故障迁移等

为了解决上述的挑战,目前有主流的三条路线:

  • 集群联邦: 引入Cluster的资源抽象,通过集群之上的联邦控制面来管理应用在多集群间的分发,项目包括KubeFed、Karmada、OCM、ClusterNet等
  • VK:集群抽象为一个virtual node,本地工作负载调度至虚拟节点,由VK来控制远端集群真实的Pod的生命周期,并将状态映射到本地的模拟Pod,缺点是使用Node来抽象集群不易扩展,集群内资源统一聚合成一个大节点的可用资源,调度时仍会有资源不够用导致pending的现象, 由于VK作为一个虚拟kubelet,提供的接口仍是Pod颗粒度的,在本地集群上仍会有Pod资源对象产生,在大规模场景下可能存在性能瓶颈。典型场景是本地IDC集群,远端Serviceless集群的混合云场景。
  • 集群凭证管理:将kubeconfig配置于应用的API中,通常用于一些GitOps项目中的多集群应用发布中。

无论是用哪一种技术路线,实际在使用多集群时都需要解决以下三个核心问题:

  • 应用调度,核心问题是如何将应用部署到用户所期望的最适合的集群/集群组上。
  • 统一编排,核心问题是如何统一管理多集群应用,包括应用下发/状态收集/处理控制面与底下集群的冲突等等。
  • 服务治理,核心问题是如何统一管理多集群服务,打破流量的限制。

除此之外,在不同的多云架构中,也有不同的关注点,例如不同集群间的数据同步、流量入口处的智能DNS,这些问题需要结合Kubernetes生态中的周边项目,而不是仅仅在多云管理这一层。