如何使用Vcluster实现Kubernetes中的多租户

news2024/9/24 17:09:23

Kubernetes彻底改变了组织部署和管理容器化应用程序的方式,使跨集群编排和扩展应用程序变得更加容易。然而,在共享的Kubernetes集群上运行多个异构工作负载会带来资源争用、安全风险、缺乏定制和复杂管理等挑战。

以下几种方法可以在Kubernetes中实现隔离和多租户:

  • Kubernetes命名空间:命名空间通过在不同用户之间划分集群资源来实现一定的隔离。但是,命名空间共享相同的物理基础设施和内核资源。因此,隔离和定制是有限制的。
  • Kubernetes发行版:流行的Kubernetes发行版(例如Red Hat OpenShift和Rancher)支持Vcluster。它们更有效地利用了Kubernetes的原生功能,例如命名空间、RBAC和网络策略。其他优点包括集中控制平台、预配置集群模板和易于使用的管理。
  • 分层命名空间:在传统的Kubernetes集群中,每个命名空间都是独立的。这意味着一个名称空间中的用户和应用程序不能访问另一个名称空间中的资源,除非他们具有明确的权限。分层命名空间通过允许在命名空间之间定义父子关系来解决这个问题。这意味着在父命名空间中拥有权限的用户或应用程序将自动在所有子命名空间中拥有权限。这使得跨多个名称空间管理权限变得容易得多。
  • Vcluster项目:Vcluster项目通过将物理Kubernetes集群划分为多个独立的软件定义集群来解决这些痛点。Vcluster允许组织为开发团队、应用程序和客户提供专用的Kubernetes环境,这些环境具有有保证的资源、安全策略和自定义配置。本文将深入探讨Vcluster、它的功能、不同的实现选项、用例和挑战,还将研究最大化利用率和简化Vcluster管理的最佳实践。

一、什么是Vcluster?

Vcluster是一个开源工具,允许用户创建和管理虚拟Kubernetes集群。虚拟Kubernetes集群是一个功能齐全的Kubernetes集群,它运行在另一个Kubernetes集群之上。Vcluster的工作原理是在底层Kubernetes集群的命名空间中创建一个Vcluster。Vcluster有自己的控制平台,但它共享底层集群的工作节点和网络。这使得Vcluster成为一个轻量级的解决方案,可以部署在任何Kubernetes集群上。

用户在创建Vcluster时,可以指定希望Vcluster拥有的工作节点的数量。然后,Vcluster命令行将创建Vcluster,并在工作节点上启动控制平台pod。然后可以使用kubectl CLI将工作负载部署到Vcluster。

用户可以在Vcluster网站上了解更多关于Vcluster的信息。

二、使用Vcluster的好处

(1)资源隔离

Vcluster允许用户将中央集群的一部分资源(例如CPU、内存和存储)分配给单个Vcluster。当多个团队共享相同的物理集群时,这可以防止“嘈杂邻居”问题。可以确保关键工作负载不受干扰地获得所需的资源。

(2)访问控制

使用Vcluster,可以在Vcluster级别实施访问策略,确保只有授权用户才能访问。例如,像金融应用程序这样的敏感工作负载可以在隔离的Vcluster中运行。与命名空间级策略相比,限制访问要简单得多。

(3)定制

Vcluster允许针对各个团队的需求进行广泛的定制,并且可以定制不同的Kubernetes版本、网络策略、进入规则和资源配额。开发人员可以在不影响其他人的情况下修改他们的Vcluster。

(4)多租户

组织必须经常向多个内部团队或外部客户提供Kubernetes访问。通过在同一物理集群中创建独立的隔离环境,Vcluster使多租户易于实现。

(5)容易扩展

额外的Vcluster可以快速启动或关闭,以处理动态工作负载和扩展需求。可以立即提供新的开发和测试环境,而无需扩展整个物理集群。

三、Vcluster之前的工作负载隔离方法

在Vcluster作为解决方案出现之前,组织已经利用了各种Kubernetes的本地特性来实现一些工作负载隔离:

  • 命名空间:命名空间在不同的团队或应用程序之间隔离集群资源。它们通过资源配额和网络策略提供基本的隔离。但是,没有系统管理程序级别的隔离。
  • 网络策略:细粒度的网络策略限制pod和命名空间之间的通信。这会在工作负载之间创建网络分段。但是,仍然可能发生资源争用。
  • 污点和容忍度:对节点应用污点可以防止指定的pod在节点上进行调度。pod必须具有与污点相匹配的容忍度。这样可以将pod限制为特定节点。
  • 云虚拟网络:在公共云上,使用多个虚拟网络有助于隔离Kubernetes集群流量。但是集群中的pod仍然可以通信。
  • 第三方网络插件:像Calico、Weave和Cilium这样的CNI插件可以构建覆盖网络和细粒度的网络策略来隔离流量。
  • 定制控制器:开发定制Kubernetes控制器允许以编程方式隔离资源。但这需要大量的编程专业知识。

四、Vcluster的演示

(1)安装Vcluster命令行

要求:

  • kubectl(通过kubectl版本检查)
  • helm v3(检查helm版本)
  • 一个可以访问Kubernetes集群的工作kube-context(通过kubectl查询名称空间)。

使用以下命令下载基于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

现在,在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用例

Vcluster通过在单个物理集群中提供隔离的和可定制的Kubernetes环境来支持几个重要的用例。以下更详细地探讨其中的一些:

(1)开发和测试环境

为开发团队分配专用的Vcluster允许他们完全控制配置,而不会影响生产工作负载或其他开发人员。开发团队可以使用所需的Kubernetes版本、网络策略、资源配额和访问控制来定制他们的Vcluster。开发团队可以快速启动和关闭Vcluster以测试不同的配置。由于Vcluster提供了有保证的计算和存储资源,开发人员不需要开展竞争,它们也不会影响在其他Vcluster中运行的应用程序的性能。

(2)生产应用程序隔离

企业应用程序(例如ERP、CRM和财务系统)需要可预测的性能、高可用性和严格的安全性。专用Vcluster允许这些生产工作负载不受其他应用程序的影响。可以为关键任务应用程序分配预留容量,以避免资源争用。定制网络策略保证隔离。集群还允许基于角色的粒度访问控制,以满足合规性需求。与过度配置大型集群以避免干扰不同,Vcluster以较低的成本提供有保证的资源。

(3)多租户

服务提供商和拥有多个业务单元的企业通常需要向不同的内部团队或外部客户安全地提供Kubernetes访问权限。通过为每个租户创建单独的自助服务环境并应用适当的资源限制和访问策略,Vcluster简化了多租户。提供商可以通过采用额外的Vcluster轻松地为新客户提供服务。这消除了“嘈杂邻居”问题,并通过根据实际使用情况(而不是峰值需求)打包Vcluster来实现高密度的工作负载。

(4)合规性

金融和医疗保健等受到严格监管的行业在数据隐私、地理位置和访问控制方面有严格的安全性和合规性要求。具有内部网络分段、基于角色的访问控制和资源隔离的专用Vcluster可以更轻松地与同一集群中的其他应用程序一起安全地托管兼容的工作负载。

(5)临时资源

Vcluster允许立即启动临时Kubernetes环境来处理以下用例:

  • 测试集群升级:新的Kubernetes版本可以部署到较低的环境中,而不会停机或影响生产。
  • 评估新的应用程序:应用程序可以部署到一次性的Vcluster中,而不是共享的开发集群,以防止冲突。
  • 容量峰值:新的Vcluster为流量峰值提供突发容量,而不是过度配置整个集群。
  • 特殊事件:可以为研讨会、会议和其他事件临时创建Vcluster。

一旦不再需要,就可以简单地删除这些Vcluster,而不会在集群上留下持久的足迹。

(6)工作负载整合

随着组织扩展Kubernetes的足迹,需要在不干扰现有应用程序的情况下将多个集群合并到共享的基础设施上。将应用程序迁移到Vcluster提供了逻辑隔离和定制,允许它们与其他工作负载一起无缝运行。这提高了利用率并减少了操作开销。Vcluster允许企业IT在保持隔离的同时在整个组织中提供一致的Kubernetes平台。总之,Vcluster是通过工作负载隔离、定制、安全性和密度来优化Kubernetes环境的重要工具。用例强调了它们如何使组织内从开发人员到运维人员再到业务部门的各种需求受益。

八、使用Vcluster的挑战

虽然带来了显著的好处,但也有一些缺点需要权衡:

(1)复杂性

与单个大型Kubernetes集群相比,管理多个Vcluster(尽管规模较小)会带来更多的操作开销。其他任务包括:

  • 提供和配置多个控制平台。
  • 在Vcluster之间一致地应用安全策略和访问控制。
  • 在Vcluster之间进行监控和日志记录。
  • 为每个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有一些缺点,但对于许多组织来说,其带来的好处显然超过所增加的复杂性。

十、支持Kubernetes部署的开发者工具

低代码开发是近年来在网络开发领域备受关注的一个趋势。低代码开发是指使用最少的编程代码来开发应用程序或业务逻辑,这使得即使是没有IT或编程经验的初学者也能快速创建所需的功能。

虽然低代码开发还没有威胁到传统开发者的角色,但不可否认的是,这种趋势正在向低代码(或无代码)开发发展。据美国研究公司Gartner预测,到2024年,约65%的应用开发项目将通过低代码平台开发。这个趋势对于开发者来说是不容忽视的,预计未来几年开发者的工作方式也将逐渐发生变化。

市场上有众多低代码平台,JNPF开发平台是一款基于SpringBoot+Vue3的全栈开发平台,采用微服务、前后端分离架构,基于可视化流程建模、表单建模、报表建模工具,快速构建业务应用,平台即可本地化部署,也支持K8S部署。

应用体验地址:https://www.jnpfsoft.com/?csdn,你可以操作一下试试!

引擎式软件快速开发模式,除了上述功能,还配置了图表引擎、接口引擎、门户引擎、组织用户引擎等可视化功能引擎,基本实现页面UI的可视化搭建。内置有百种功能控件及使用模板,使得在拖拉拽的简单操作下,也能大限度满足用户个性化需求。由于JNPF平台的功能比较完善,本文选择这项工具进行展开,使你更加直观看到低代码的优势

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《golang设计模式》第二部分·结构型模式-05-门面模式Facade)

文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.2 类图 1. 概述 门面(Facade)向客户端提供使用子系统的统一接口,用于简化客户端使用子系统的操作。 1.1 角色 门面角色(Facade) 客户端可以调用的接…

数字孪生和元宇宙:打造未来的数字边界

数字孪生和元宇宙是近两年来被热议的两个概念,但由于技术的交叉两者也极易被混淆。本文希望带大家深入探讨一下这两者之间的关系,以及它们如何一起构建了数字时代的新格局。 1. 数字孪生的本质 数字孪生是一种虚拟模型,它通过数字手段对现实…

在微信公众号怎么实现投票活动

微信公众号实现投票活动的方法和步骤 一、投票活动的优势 通过投票活动,微信公众号可以实现用户参与、增加互动、了解用户需求等功能,同时也可以提升品牌知名度和用户粘性。以下是一些投票活动的优势: 增加用户参与度:通过投票活…

Seata四种事务模式AT、TCC、SAGA 、 XA详解

文章目录 一、 GlobalTransactional一、AT模式1、原理2 、优缺点3、实现 二、TCC模式1、原理2 、优缺点3、实现 三、SAGA模式1 、原理2 、优缺点3 、实现 四、XA模式1 、原理2 、优缺点3、 实现 五、 四种模式对比 我们知道Seata是一款开源的分布式事务解决方案,致力…

【LeetCode75】第五十八题 组合总和Ⅲ

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目让我们找出长度为k并且总和为n的所有组合,我们能用的元素只有1~9。 那么这种要求排列组合的题,基本是是离不…

2023客服管理者面临的挑战

客服管理者在当今的数字化时代也面临着许多挑战。以下是一些主要的挑战: 同行业竞争加剧:客服行业面临着来自同行业的竞争压力。为了获得竞争优势,企业需要不断提高自身的产品和服务质量,同时还需要不断降低成本、提高效率。然而…

go调用so库

来源:微信公众号「编程学习基地」 文章目录 go调用so库生成so库调用so库 go调用so库 生成so库 load_so.h #ifndef _LOAD_SO_H #define _LOAD_SO_Hint do_test_so_func(int a,int b);#endif load_so.c #include "load_so.h"int do_test_so_func(int …

数据结构——四叉树

四叉树(Quadtree)是一种用于表示和管理二维空间的树状数据结构。它将二维空间递归地分割成四个象限,每个象限可以继续分割,以实现对空间的更精细的划分。四叉树通常用于解决空间搜索和查询问题,例如碰撞检测、图像压缩…

vector使用和模拟实现

💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大…

2.6W字系统总结,带你实现 Linux 自由!

以前就聊过大多数应届生入职后会遇到的两大拦路虎分别是Git和Linux,其中关于Git,前段时间已经分享过自己工作两年多以来用过的比较实用的一些命令了,这些命令可能不是最花哨的,但绝对是最实用的。 今天分享一份很全面的Linux常用…

springboot+canal+mysql+redis缓存双写一致性

canal官网地址:https://github.com/alibaba/canal/wiki/QuickStart 基本上按照官网的步骤来就行 准备 首先服务器上要安装好jdk,因为canal运行需要jdk,同时把canal对应的端口在服务中开放,否则连接不上 对于自建 MySQL , 需要先开启 Binl…

linux安装python3.x版本

linux安装python3.x版本 ① 安装依赖环境② 下载python版本包③ 安装python④ 建立软链接⑤ 加入path⑥ 验证 官网版本地址:https://www.python.org/ftp/python/ ① 安装依赖环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel…

Vue 使用vue-pdf 显示pdf文件 切换页面 缩放 全屏 自动播放等

<template><div id"container"><!-- 上一页、下一页--><div class"right-btn"><div click"toFullOrExit" class"turn-btn"><span>{{ isFull 1 ? "取消全屏" : "全屏" }}&l…

GLTF-pipeline

gltf-pipeline可用作命令行工具或 Node.js 模块。 开始 安装 Node.js如果还没有&#xff0c;然后&#xff1a; npm install -g gltf-pipeline使用 gltf-pipeline 作为命令行工具&#xff1a; 将 glTF 转换为 glb gltf-pipeline -i model.gltf -o model.glb gltf-pipeline…

python萌新爬虫学习笔记【建议收藏】

文章目录 1. 如何何请求解析url2. 如何获取标签里面的文本3. 如何解析JSON格式4. 如何添加常用的header5. 如何合并两个div6. 如何删除html dom的部分结构7. 如何一次性获取所有div标签里的文本8. python爬虫如何改变响应文本字符集编码9. 如何进行字符集转码11. response.text…

骨髓小游戏

欢迎来到程序小院 骨髓 玩法&#xff1a; 骨髓推塔小游戏&#xff0c;敌方士兵进入到我方高塔会毁坏建筑&#xff0c;我方可派兵前去迎战&#xff0c;我方&#xff1a;骑兵、长枪兵、弓兵、敌法&#xff1a;骷髅骑兵、骷髅长枪兵、 骷髅弓兵,快去消灭敌人吧^^。开始游戏https:…

利用爬虫技术自动化采集汽车之家的车型参数数据

导语 汽车之家是一个专业的汽车网站&#xff0c;提供了丰富的汽车信息&#xff0c;包括车型参数、图片、视频、评测、报价等。如果我们想要获取这些信息&#xff0c;我们可以通过浏览器手动访问网站&#xff0c;或者利用爬虫技术自动化采集数据。本文将介绍如何使用Python编写…

flutter开发实战-长按TextField输入框cut、copy设置为中文复制、粘贴

flutter开发实战-长按TextField输入框cut、copy设置为中文复制、粘贴 在开发过程中&#xff0c;需要长按TextField输入框cut、copy设置为中文“复制、粘贴”&#xff0c;这里记录一下设置的代码。 一、pubspec.yaml设置flutter_localizations 在pubspec.yaml中设置flutter_l…

教你制作简单的洪水淹没模型

制作思路&#xff1a; 利用GIS软件将地形图通过高程垂直夸大&#xff0c;显示出其地形地貌&#xff0c;绘制一个面&#xff0c;使面从下向上移动&#xff0c;因地形高程的不同&#xff0c;面穿过地形图的面积不同&#xff0c;从而视觉上模拟出了水淹没的过程。 前期准备&…

facechain环境部署

环境安装 # 创建虚拟环境facechain conda create -n facechain python3.8 conda activate facechain # 克隆 GIT_LFS_SKIP_SMUDGE1 git clone https://github.com/modelscope/facechain.git --depth 1 # 安装第三方库 cd facechain pip install -r requirements.txt pip insta…