从单集群到多集群:Kubernetes在多云混合云环境的演进

Kubernetes 作为一项核心技术已成为现代应用程序架构的基础,越来越多的企业使用 Kubernetes 作为容器编排系统。

下面的数据来自 2020 CNCF Survey 的原始数据,可以看到使用 Kubernete 的企业占比达到了 80%。

从单集群到多集群:Kubernetes在多云混合云环境的演进_第1张图片

Kubernetes 的流行主要有以下几个原因:

  • 自动化:Kubernetes 实现了容器的部署、扩展、负载均衡、故障恢复、滚动更新等操作的自动化,极大地简化了应用程序的管理和维护工作。这种自动化也提升了应用程序的弹性和可用性。

  • 可移植性:Kubernetes 基于容器的架构模型,使得应用无需重新编码或更新配置就可以在任何云平台、物理机或者虚拟机中运行。

  • 生态系统:Kubernetes 作为一个成功地开源项目,拥有强大的社区支持和生态系统,使其可以获得更好的创新、优化和安全性保障。从社区中,我们可以找到各种插件和工具,为开发者提供了丰富的选择和扩展性。

从单 Kubernetes 集群到多 Kubernetes 集群

初露端倪

企业中的应用程序通常比较复杂,需要不同的环境来进行开发、测试和生产部署。为了避免应用程序之间的干扰和交叉,通常需要在不同的 Kubernetes 集群中分别部署和管理应用程序。

在同一个数据中心不同的环境部署独立的 Kubernetes 集群之后不同环境下的集群规模、管理方式、可靠性和安全性各有不同,从开发、测试到生产,成本的投入也逐步地提升,来保证更好的性能、更高的可靠性和安全性。

这也是多 Kubernetes 集群的一种形式(注意这里说的是 多 Kubernetes 集群)。

从单集群到多集群:Kubernetes在多云混合云环境的演进_第2张图片

迅猛发展

随着对云计算接受程度不断提高、企业规模的持续增长,越来越多的企业开始考虑采用或者已经采用多云和混合云的架构。多云和混合云的驱动因素很多,总结之后分成了两类:主动因素和被动因素。

主动因素

  • 避免厂商锁定:避免厂商锁定:企业通过采用多云混合云策略,可以避免过度依赖单一云服务提供商,从而减轻由厂商锁定带来的风险。

  • 提升性能、降低延迟:企业根据业务需求,将服务部署在地理位置更接近用户的数据中心。

  • 更大范围的伸缩性:在不同的云服务提供商之间实现资源的弹性伸缩,从而提供更大范围的伸缩性以满足业务需求。

  • 提升可靠性:在不同的云服务提供商和私有数据中心之间进行应用部署之后,即使某个云服务提供商出现故障,企业的应用仍可继续运行。

  • 成本因素:可以选择性地使用各个云服务提供商提供的服务,以便在成本和性能之间找到最佳平衡。

被动因素

  • 数据中心能力限制:数据中心基础设施的规模、性能无法满足需求。

  • 上云、下云的过渡期:在上云或下云的过程中,存在着公有云和私有云共存的现象,过渡期可能会被拉长。

  • 单一云覆盖区域有限:尽管云服务提供商不断扩展其全球数据中心的覆盖范围,但仍然可能存在单一云服务提供商无法满足企业在特定地区的部署需求的情况。

  • 业务隔离:在某些情况下,企业需要对不同业务进行隔离,以降低风险和提高安全性。将应用部署到不同的数据中心,来确保敏感数据和关键应用的安全。

  • 合规和数据隔离:不同国家和地区可能有不同的法规要求,这些要求可能会限制企业在特定云服务提供商上存储和处理数据。

多云混合云策略的引入,相应地,Kubernetes 集群的数量也变得越来越多。虽然集群的数量在增加,但是本质与单集群无异:每个 Kubernetes 集群有自己的控制平面(api-server、控制器)和一组工作节点,可以独立进行应用程序的部署和管理(这就是为何前面称之为多 Kubernetes 集群)。在“多集群”环境下,每个集群是独立的,当需要管理的时候,采用的是“一个一个管理”的方式。

从单集群到多集群:Kubernetes在多云混合云环境的演进_第3张图片

挑战多多

多 Kubernetes 集群可以在不同的云平台、不同的数据中心、不同的网络环境和不同的物理基础设施中部署,以满足不同的应用程序和业务需求。但随着集群数量的增加,也面临着诸多挑战:

  • 集群管理复杂性增加:不同的 Kubernetes 集群部署在不同的云服务商平台上,拥有不同的网络架构和安全策略。随着数量的增加,集群管理的复杂性也会相应增加。这包括资源分配、访问控制、网络管理、集群升级和维护等方面。

  • 应用管理成本增加:企业需要在多个 Kubernetes 集群上部署和管理应用程序。

  • 跨集群网络和服务通信:Kubernetes 天然的网络隔离特性,又因为部署在不同网络架构的云平台上,需要解决跨集群网络和服务通信的问题。这包括跨平台网络互联、跨集群服务发现和路由等问题。

从多 Kubernetes 集群到 Kubernetes 多集群

为了应对上面的种种挑战,出现了另一个概念 Kubernetes 多集群。Kubernetes 多集群和多 Kubernetes 集群是两个不同的概念,为了便于区分我们也可以将其称为 Kubernetes 联邦。

Kubernetes 联邦是将多个 Kubernetes 集群连接在一起,以便协同工作和实现跨集群资源和应用的统一管理、跨地域和跨云的故障切换、根据实际需求动态分配资源降低成本、提升业务的灵活性和扩展性。

虽然对于如何连接多个 Kubernetes 集群没有官方的解决方案,但是得益于强大的社区和生态,已有不少开源和商业化的解决方案。

集群管理复杂性

使用集中式的多集群管理平台,在一个统一的界面中管理多云混合云中的 Kubernetes 集群,提供集群创建、配置、监控和故障排查的功能,使集群管理变得更加简单和高效,同时提高集群的可靠性和可用性。

在工具方面有 KubeSphere、Rancher 以及众多公有云的方案 Google Anthos、Azure Arc、Red Hat Advanced Cluster Management(ACM)、AliCloud ACK 等等。

应用管理

使用自动化的多集群应用编排和管理平台,解决多集群、多云环境下应用程序的快速部署、扩展和管理问题,保证应用程序的可靠性。

除了前面提到多集群管理平台提供了应用管理能力以外,还有如 Kubernetes Federation(前者 22 年 8 月已存档)、Karmada 等开源多集群应用管理平台。

跨集群网络和服务通信

降低多集群环境中的网络复杂性。使用服务网格技术,管理跨多个集群的服务流量、安全性和可观测性,实现跨集群的服务发现和通信;或者采用跨集群的网络解决方案实现网络互通。

服务网格技术有 Istio、Linkerd、Flomesh 等,网络解决方案有 Submariner。

总结

在多云、混合云成为趋势的当下,Kubernetes 多集群也不断地被提及并逐渐成为重要的解决方案。Kubernetes 多集群的讨论已不再局限于集群和应用的管理,还引入了跨集群的服务通信。

多集群可以为企业提供更灵活、更可靠的应用部署和管理能力,使企业能够更好地利用混合多云环境中的资源,降低运营成本,提高应用的可靠性。除此以外,还可以助力企业更快速地进行应用迁移。

你可能感兴趣的:(kubernetes,java,运维,容器,云原生)