我注意到有一些云提供商为 kubernetes 提供托管解决方案,我想知道此产品中涉及的各种组件是什么。
我的直觉告诉我会涉及到一些组件,例如 , NetworkPolicy
,OPA
但我无法确定整体项目概述应该如何,因为集群的每个用户的 API 都是相同的。
他们是在部署各种控制平面,还是为每个用户部署单独的控制平面?
我注意到有一些云提供商为 kubernetes 提供托管解决方案,我想知道此产品中涉及的各种组件是什么。
我的直觉告诉我会涉及到一些组件,例如 , NetworkPolicy
,OPA
但我无法确定整体项目概述应该如何,因为集群的每个用户的 API 都是相同的。
他们是在部署各种控制平面,还是为每个用户部署单独的控制平面?
我认为您指的是主要云提供商中的 GKE、EKS 和 AKS 等托管解决方案。每个云提供商对于如何管理集群控制平面都有不同的“秘诀”,但共同的主题是控制平面(kube-apiserver、etcd、kube-controller-manager、kubelet 等)被隐藏起来您作为集群所有者。
从您作为这些集群之一的创建者/所有者的角度来看,它是一个完全独立的集群。您可以为自己的集群获取自己的 Kubernetes API 端点的 IP 地址。只有集群的数据会显示在您的 API 中。
现在,至于他们在幕后做了什么让事情看起来像这样——这不是公开的知识,但我们可以对他们可能是如何做的做出一些合理的猜测。
一种方法是,他们实际上是在为每个集群构建独立的控制平面,并配有自己的虚拟机。有像 ClusterAPI 这样的框架可以自动执行此操作。但这并不是在主要云平台上运行数千或数百万个 Kubernetes 集群的一种非常节省资源的方式,因此大玩家可能不是这样做的。
另一种方法是在虚拟机池上的独立容器中运行单独的控制平面组件。甚至可能是另一个 Kubernetes 集群。所以当一个新的 Kubernetes 集群的请求进来时,编排器只是产生一个新的 kube-apiserver 部署、一个新的 etcd StatefulSet 等,并将它们连接到指定的工作节点池。我想这或多或少是谷歌和亚马逊正在做的事情,但可能比我所描述的要复杂得多。
最后,一种方法是一起消除“上游”Kubernetes API 和管理组件(除了 kubelet 和 kube-proxy),而是创建一些定制的、可扩展的、多租户 Kubernetes 控制平面服务。这似乎是谷歌可能会做的事情,因为这将是最容易扩展的,因此可以让他们以最低的成本提供最多的集群和最好的性能。但是,它偏离了上游 Kubernetes 代码,因此需要一个庞大、资金充足且敬业的开发团队来完成这项工作。
如果您正在考虑构建自己的多租户 Kubernetes 基础架构,我建议您考虑使用 Rancher 之类的编排工具来执行此操作,而不是自己动手。使用 Rancher 之类的东西将允许您创建角色来控制租户的访问权限并创建预配置的集群“模板”。租户单击按钮以使用您拥有的任何 VM 编排工具(例如 VMware、Digital Ocean 或 AWS 或 GCP 等云提供商)部署新的 Kubernetes 集群。尤其是 Rancher 还具有运行多租户集群的能力,即构建许多应用程序开发人员同时使用的单个大型 Kubernetes 集群。在这种情况下,您将命名空间分配给每个应用程序团队(Rancher 有一个他们称之为“项目”的抽象),每个应用程序团队可以完全管理其命名空间中的所有资源,但不能在集群级别管理任何东西。然后由“平台运营”团队(我猜是你?)来管理集群本身。