译者 | 李睿
审校 | 重楼
Kube.NETes彻底改变了组织部署和管理容器化应用程序的方式,使跨集群编排和扩展应用程序变得更加容易。然而,在共享的Kubernetes集群上运行多个异构工作负载会带来资源争用、安全风险、缺乏定制和复杂管理等挑战。
以下几种方法可以在Kubernetes中实现隔离和多租户:
Vcluster是一个开源工具,允许用户创建和管理虚拟Kubernetes集群。虚拟Kubernetes集群是一个功能齐全的Kubernetes集群,它运行在另一个Kubernetes集群之上。Vcluster的工作原理是在底层Kubernetes集群的命名空间中创建一个Vcluster。Vcluster有自己的控制平台,但它共享底层集群的工作节点和网络。这使得Vcluster成为一个轻量级的解决方案,可以部署在任何Kubernetes集群上。
用户在创建Vcluster时,可以指定希望Vcluster拥有的工作节点的数量。然后,Vcluster命令行将创建Vcluster,并在工作节点上启动控制平台pod。然后可以使用kubectl CLI将工作负载部署到Vcluster。
用户可以在Vcluster网站上了解更多关于Vcluster的信息。
(1)资源隔离
Vcluster允许用户将中央集群的一部分资源(例如CPU、内存和存储)分配给单个Vcluster。当多个团队共享相同的物理集群时,这可以防止“嘈杂邻居”问题。可以确保关键工作负载不受干扰地获得所需的资源。
(2)访问控制
使用Vcluster,可以在Vcluster级别实施访问策略,确保只有授权用户才能访问。例如,像金融应用程序这样的敏感工作负载可以在隔离的Vcluster中运行。与命名空间级策略相比,限制访问要简单得多。
(3)定制
Vcluster允许针对各个团队的需求进行广泛的定制,并且可以定制不同的Kubernetes版本、网络策略、进入规则和资源配额。开发人员可以在不影响其他人的情况下修改他们的Vcluster。
(4)多租户
组织必须经常向多个内部团队或外部客户提供Kubernetes访问。通过在同一物理集群中创建独立的隔离环境,Vcluster使多租户易于实现。
(5)容易扩展
额外的Vcluster可以快速启动或关闭,以处理动态工作负载和扩展需求。可以立即提供新的开发和测试环境,而无需扩展整个物理集群。
在Vcluster作为解决方案出现之前,组织已经利用了各种Kubernetes的本地特性来实现一些工作负载隔离:
(1)安装Vcluster命令行
要求:
使用以下命令下载基于arm64的Ubuntu机器的Vcluster CLI二进制文件:
curl -L -o vcluster
"https://Github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-arm64" && sudo install -c -m 0755 cluste /usr/local/bin && rm -f vcluster
bash
要确认Vcluster CLI已成功安装,通过以下方式测试:
vcluster --version
bash
要在其他服务器上安装,可以参考以下链接。安装Vcluster命令行。
(2)部署Vcluster
创建一个Vclustermy-first-Vcluster
vcluster create my-first-vcluster
bash
(3)连接到Vcluster
输入以下命令连接Vcluster:
vcluster connect my-first-vcluster
bash
使用kubectl命令获取连接的Vcluster中的名称空间。
kubectl get namespaces
bash
现在,在Vcluster中部署一个示例Nginx部署。创建一个部署:
kubectl create namespace demo-nginx
kubectl create deployment nginx-deployment -n demo-nginx --image=nginx
bash
这将把应用程序隔离在Vcluster中的一个命名空间demo-nginx中。
可以检查此演示部署是否会在Vcluster中创建pod:
kubectl get pods -n demo-nginx
bash
既然已经确认了Vcluster中的部署,现在尝试检查主机集群中的部署。
断开与Vcluster的连接。
vcluster disconnect
bash
这将把kube场景移回主机集群。现在检查主机集群中是否有可用的部署。
kubectl get deployments -n vcluster-my-first-vcluster
bash
在Vcluster-my-Vcluster命名空间中找不到任何资源。这是因为部署被隔离在其他集群无法访问的Vcluster中。
现在使用以下命令检查所有名称空间中是否有pod正在运行。
kubectl get pods -n vcluster-my-first-vcluster
bash
现在可以看到Nginx容器在Vcluster命名空间中运行。
Vcluster通过在单个物理集群中提供隔离的和可定制的Kubernetes环境来支持几个重要的用例。以下更详细地探讨其中的一些:
(1)开发和测试环境
为开发团队分配专用的Vcluster允许他们完全控制配置,而不会影响生产工作负载或其他开发人员。开发团队可以使用所需的Kubernetes版本、网络策略、资源配额和访问控制来定制他们的Vcluster。开发团队可以快速启动和关闭Vcluster以测试不同的配置。由于Vcluster提供了有保证的计算和存储资源,开发人员不需要开展竞争,它们也不会影响在其他Vcluster中运行的应用程序的性能。
(2)生产应用程序隔离
企业应用程序(例如ERP、CRM和财务系统)需要可预测的性能、高可用性和严格的安全性。专用Vcluster允许这些生产工作负载不受其他应用程序的影响。可以为关键任务应用程序分配预留容量,以避免资源争用。定制网络策略保证隔离。集群还允许基于角色的粒度访问控制,以满足合规性需求。与过度配置大型集群以避免干扰不同,Vcluster以较低的成本提供有保证的资源。
(3)多租户
服务提供商和拥有多个业务单元的企业通常需要向不同的内部团队或外部客户安全地提供Kubernetes访问权限。通过为每个租户创建单独的自助服务环境并应用适当的资源限制和访问策略,Vcluster简化了多租户。提供商可以通过采用额外的Vcluster轻松地为新客户提供服务。这消除了“嘈杂邻居”问题,并通过根据实际使用情况(而不是峰值需求)打包Vcluster来实现高密度的工作负载。
(4)合规性
金融和医疗保健等受到严格监管的行业在数据隐私、地理位置和访问控制方面有严格的安全性和合规性要求。具有内部网络分段、基于角色的访问控制和资源隔离的专用Vcluster可以更轻松地与同一集群中的其他应用程序一起安全地托管兼容的工作负载。
(5)临时资源
Vcluster允许立即启动临时Kubernetes环境来处理以下用例:
一旦不再需要,就可以简单地删除这些Vcluster,而不会在集群上留下持久的足迹。
(6)工作负载整合
随着组织扩展Kubernetes的足迹,需要在不干扰现有应用程序的情况下将多个集群合并到共享的基础设施上。将应用程序迁移到Vcluster提供了逻辑隔离和定制,允许它们与其他工作负载一起无缝运行。这提高了利用率并减少了操作开销。Vcluster允许企业IT在保持隔离的同时在整个组织中提供一致的Kubernetes平台。总之,Vcluster是通过工作负载隔离、定制、安全性和密度来优化Kubernetes环境的重要工具。用例强调了它们如何使组织内从开发人员到运维人员再到业务部门的各种需求受益。
虽然带来了显著的好处,但也有一些缺点需要权衡:
(1)复杂性
与单个大型Kubernetes集群相比,管理多个Vcluster(尽管规模较小)会带来更多的操作开销。其他任务包括:
例如,集群管理员必须在20个Vcluster中而不是单个集群中配置和更新RBAC策略。与单个集群的集中管理相比,这需要付出更多的努力。Kubernetes上的静态IP地址和端口可能会导致冲突或错误。
(2)资源分配与管理
平衡Vcluster的资源消耗和性能可能很棘手,因为它们可能有不同的需求或期望。
例如,Vcluster可能需要根据工作负载扩展或缩减,或者与其他Vcluster或名称空间共享资源。应用程序峰值需求的Vcluster大小可能在非峰值期间有多余的未使用容量,这些容量处于闲置状态,无法被其他Vcluster利用。
(3)有限的定制
定制Vcluster的能力因实现而异。命名空间提供的灵活性最低,而集群API提供的灵活性最高。像OpenShift这样的工具通过简单性平衡了定制。例如,命名空间不能运行不同的Kubernetes版本或网络插件。Cluster API允许完全定制,但更复杂。
Vcluster使Kubernetes用户能够在共享的物理集群中定制、隔离和扩展工作负载。通过分配专用的控制平台资源和访问策略,Vcluster提供了强大的技术隔离。对于多租户这样的用例,Vcluster提供了更简单、更安全的Kubernetes管理。
Vcluster还可以用于减少Kubernetes的成本开销,并可用于临时环境。像OpenShift、Rancher和Kubernetes Cluster API这样的工具使得部署和管理Vcluster变得更加容易。随着采用的增加,可以期待在Vcluster空间中有更多的创新,以进一步简化操作并最大化利用率。虽然Vcluster有一些缺点,但对于许多组织来说,其带来的好处显然超过所增加的复杂性。
原文标题:Multi-Tenancy in Kubernetes Using Vcluster,作者:Pavan Shiraguppi