当前位置: 首页 > 科技观察

实施虚拟Kubernetes集群时的关键考虑

时间:2023-03-15 16:09:50 科技观察

在Kubernetes环境中,多租户是指在开发和测试等环境中,多个团队、应用程序或用户共享一个大型集群,主要是为了减少管理开销。集群的成本和运营开销。多租户正在成为平台团队部署Kubernetes基础设施的基本要求。Kubernetes命名空间的多租户到目前为止,实现多租户最流行的方法是使用Kubernetes命名空间。Kubernetes命名空间提供了一种简单的方法来划分一组只能在该命名空间内访问的资源,例如Pod、服务和部署。平台团队通常管理和运营集群,并拥有完整的集群级别权限。它们通过创建一个或多个特定于每个团队、应用程序、用户的名称空间并限制作为开发人员、DevOps工程师和应用程序所有者的最终用户对这些名称空间的访问来实现多租户。最终用户只能执行特定于他们拥有的命名空间的操作。这适用于绝大多数多租户用例。vcluster框架在这里很有用。使用Vcluster开源框架的多租户在一些极端情况下,限制最终用户只能访问命名空间是不合理的,因为最终用户需要访问集群范围的对象(例如CRD、ingresscontroller、集群APIserver、等)开发工作。通常,参与开发自定义资源和自定义控制器以扩展KubernetesAPI、准入控制器以实现突变和验证webhook以及可能需要自定义Kubernetes配置的其他服务的用户需要集群级访问权限。VirtualCluster(vcluster)是一个旨在解决这个问题的开源框架。vcluster本质上是一个可以在物理集群中创建的虚拟集群。默认情况下,Vcluster在每个虚拟集群实例的主机集群命名空间中安装一个K3s集群(可选k0s、k8s和EKS),并安装API服务器、控制器管理器、存储后端和(可选)调度程序等核心Kubernetes组件作为程序。最终用户与虚拟集群API服务器交互并获得对虚拟集群的完全访问权限,但资源隔离和安全性得到维护,因为他们被限制在主机命名空间并且无权访问主机集群API服务器。平台团队在主机集群中创建命名空间,为主机命名空间配置资源配额和策略,创建虚拟集群实例,并将虚拟集群交给最终用户。部署Vcluster之前要回答的关键问题虽然为一小部分最终用户部署vcluster相当简单,但平台团队必须清楚地了解以下问题,并围绕vcluster实施其他解决方案,以满足他们的组织,然后再继续进行大型部署-scalevclusterdeployments自动化、安全、治理和合规性要求:1.如何为每个命名空间创建主机级命名空间和资源配额,并将它们映射到内部用户和团队?平台团队仍然需要命名空间级多租户的解决方案,因为必须在部署vcluster实例之前创建主机命名空间。2、如何将vcluster的生命周期管理自动化,以应对大规模使用?平台团队需要解决诸如创建、修改、删除虚拟集群实例、向最终用户公开虚拟集群API服务器(使用入口或负载均衡器)、向最终用户安全分发虚拟集群Kubeconfig文件以及升级虚拟集群实例(K3)等问题),以解决软件更新和安全漏洞等问题。3.如何确保每个虚拟集群中只运行经过批准和授权的集群范围的服务?它们是否部署在每个虚拟集群中?如何保证不漂移?这些服务通常包括安全插件、日志记录、监控、服务网格、入口控制器、存储插件等。4.如何在命名空间级别为主机命名空间创建网络策略?这种级别的网络隔离仍然是必需的,因为物理集群可能在多个BU和应用程序团队之间共享,这需要主机名称空间之间的网络隔离。5、如何在各个虚拟集群中实现OPA等安全策略?这些策略是否需要部署在每个虚拟集群中?大多数平台团队通过标准化安全团队推荐的一组安全策略并将它们部署到每个集群来维护安全态势。6.如何检索每个虚拟集群的Kubectl审计日志?对于某些组织,无论环境如何,Kubectl审计都是一项关键要求。7、成本分摊如何处理?由于资源由不同的开发团队共享,它们可能属于不同的成本中心,平台团队需要实施适当的费用分摊政策。8.如何让其他开发工具(如ArgoCD)与vcluster一起工作?ArgoCD等GitOps工具需要集群访问才能部署应用程序,每个vcluster实例都必须在ArgoCD中配置,以便最终用户使用ArgoCDGitOps部署。这可能适用于其他常用工具,例如可观察性、日志记录和监控工具。9.每个vcluster实例会产生哪些额外的资源和操作开销?每个虚拟集群本质上都是一个K3s/K8s集群,带有所有附加组件,例如安全插件、日志插件、监控插件、入口控制器等。当部署更多虚拟集群实例时,每个vclusterKubernetes资源和附加组件都会产生大量开销。此外,由于每个虚拟集群本质上都是一个Kubernetes集群,平台团队可能会产生额外的开销来管理这些集群,以进行Kubernetes版本更新、补丁管理和附加组件管理。10、vcluster是否符合实际生产环境?对于某些组织,开发环境必须与生产环境紧密匹配。vcluster支持K8s和EKS等其他发行版,但平台团队必须检查它是否等同于为接近生产的用例运行独立集群。例如,EKS支持许多高级功能,包括第三方CNI、各种存储类、自动缩放、IRSA和虚拟EKS集群中可能不可用的附加组件。结论对于大多数平台团队而言,基于命名空间的多租户以及围绕命名空间生命周期管理、安全性和成本控制的额外自动化可以解决他们的多租户用例。vcluster解决了Kubernetes命名空间多租户中的一个特定差距,其中没有集群级别权限的最终用户可以访问其虚拟集群中的集群范围的对象。平台团队必须在内部验证其最终用户是否存在此类需求,针对其安全性、合规性和治理需求进行全面的成本效益分析,并围绕它实施额外的自动化以确保其成功部署。