最初发表在InfraCloud博客上的客座文章,作者是Deepankur Singh Baliyan
什么是多租户?
在不同租户之间共享一个应用程序或软件的单一实例的想法被称为多租户。自从云环境兴起以来,这种方法相当流行。现在,随着Kubernetes的引入,开发者和管理员要求在Kubernetes集群上实现同样的方法。因为这将提供更好的资源利用率,对底层计算资源提供更好的管理,并降低成本。
这篇博文将讨论在Kubernetes集群中引入多租户的各种可用方法,并将尝试对所有这些方法进行比较。
多租户在哪方面服务更好?
在讨论多租户架构之前,我们应该知道是部署一个支持多租户的Kubernetes集群更好,还是应该部署多个集群,为每个租户配备不同的集群。
首先,这没有具体的规则,大多数组织是根据使用和管理的便利性来决定的。部署多个集群很简单,因为你不必担心遵循额外的最佳实践,如审计RBAC,为用户设置标准实践。除此之外,在做这个决定时,成本也起着重要作用。如果成本不是一个问题,而且你想要简单的架构,就部署多个集群。而如果你的计算需求少得多,你想节省一些额外的成本,多租户可能是一个更好的选择。其他一些因素也起着至关重要的作用,比如你的集群的生命周期,如果你的需求只是暂时的,多集群可能是一个可行的选择,因为你不需要在你的集群上安装任何其他东西。
拥有多个集群的一个主要缺点是管理开销的增加,特别是对于大型环境,它需要大量的努力来保持每个集群的更新,也需要更多的安全审计。值得注意的是,虽然你可以使用多集群的方法,但你不应该因为犯了一些小错误而阻止未来围绕多租户的扩展,比如将所有应用程序部署在同一个命名空间。
多租户架构的不同方法
Kubernetes中的多租户可以分为两大类。
- 软隔离。在这种情况下,我们有一个单一的企业,不同的团队访问同一个集群,这需要较少的安全开销,因为用户可以相互信任。
- 硬隔离。当Kubernetes被暴露在多个企业的独立和完全不受信任的用户面前时,就需要这种隔离。
在KubeCon Europe 2019中讨论了各种方法,其中每一种方法都可以被列入上述两个类别中的任何一个。
上述图表概述了在你的环境中消费Kubernetes集群的4种不同方法。
- 方法A这并没有提供一个确切的多租户解决方案,因为它部署了不同的Kubernetes集群。但是,仍然可以考虑,因为在这个解决方案中,每个租户将收到一个不同的Kubernetes集群,它与任何其他计算资源完全隔离。这可以通过使用隔离的虚拟机提供商来实现,如Amazon EC2、GCP计算实例和vSphere虚拟机。
- 方法B这是流行的架构之一,其中隔离是基于命名空间的。这提供了不同租户之间的软隔离。这样,租户只能看到、修改和创建其命名空间内的对象。此外,他们可以在自己的命名空间内创建安全和角色策略。这种方法有两个主要的缺点,主要的缺点是共享主组件,如API服务器,另一个缺点是提供集群范围内的资源。开发这种方法的主要工作是由HNC项目(分层命名空间)完成的。
- 方法C这种方法提供了一种在Kubernetes租户之间实现硬隔离的方法,这些租户之间没有信任。这通过在超级Kubernetes集群上创建一个迷你的虚拟集群,为每个租户提供隔离的主平面组件。管理员也可以在这些虚拟集群中创建自定义资源。这是由VirtualCluster和vCluster等项目提供的。
- 方法D与上述所有方法不同,这表明Kubernetes应该提供对开箱即用的租户创建的支持。由于需要修改Kubernetes的源代码,所以目前尚未开发。
各种解决方案的比较
基于虚拟机的隔离 | 基于命名空间的隔离 | 虚拟集群 | |
---|---|---|---|
隔离 | 硬隔离 | 软隔离 | 硬性 |
有效资源消耗 | 低 | 高 | 高 |
租户可以使用所有本地Kubernetes对象 | 有 | 不能使用集群范围内的资源 | 不能使用需要底层节点信息的资源,如DaemonSets。 |
可用性 | 准备就绪 | 仍在等待普遍可用,但已经可以生产。 | 有些解决方案是可用的,如vCluster,但有些仍在等待普遍可用,如VirtualCluster。 |
Kubernetes上的额外开销 | 无 | 非常少 | 很少到中等,因为它为每个小型集群启动了一个新的控制平面。 |
Kubernetes中多租户的一些用例
- SaaS应用多租户的实施可以使企业集中管理多个客户的基础设施。这使得SaaS组织很容易管理他们在不同租户之间共享的基础设施。
- 更好的资源利用由于多个团队可以共享一个集群,因此将需要更少的集群。因此,更有效地利用集群资源。
结论
总之,多租户是Kubernetes的一个重要方面,它不是开箱即用的,但可以通过各种策略来实现。它可以扩展Kubernetes的可用性,有助于实现更好的资源利用,可以节省计费成本,对集群管理员有效管理各种微服务也很重要。
就这样吧,伙计们。希望你觉得这篇文章对开始使用Kubernetes的多租户有帮助。请通过Twitter提出您的问题并分享您的经验。
参考资料
- Slide Deck:深入研究。多租户的Kubernetes WG - KubeCon EU 2019
- 深入探讨。多租户的Kubernetes工作组 - KubeCon EU 2019
- HNC项目
- 虚拟集群项目
- 虚拟集群框架