K8s 多租户方案的挑战与价值

在当今企业环境中,随着业务的快速增长和多样化,服务器和云资源的管理会越来越让人头疼。K8s 虽然很强大,但在处理多个部门或团队的业务部署需求时,如果缺乏有效的多租户支持,在效率和资源管理方面都会不尽如人意。

本文将深入探讨 K8s 多租户的概念、其在现代企业中的应用价值,以及实现这一机制所面临的技术挑战和解决方案。

K8s 多租户的价值

“多租户”是一种软件架构的设计方式,允许多个用户(租户)共享相同的系统或程序组件,同时保持各自数据的隔离性和安全性。在 K8s 环境中,实现有效的多租户机制意味着能够在同一 K8s 集群中运行多个独立的租户工作负载,而无需担心资源冲突、数据泄露或安全问题。

没有多租户支持的挑战

当企业购买很多服务器并安装 K8s 后,企业内部多个部门 (例如 20 个) 可能都需要在同一集群上部署各自的业务应用。在没有多租户机制的情况下,这种集群使用方式有很多弊端:

  1. 低效率:每个部门不能自主使用集群,必须通过集群管理员进行部署和管理。不仅减慢了部署进程,还可能造成排队等待的情况,大大降低工作效率。

  2. 资源利用不充分:业务应用不能混合部署,需要对服务器资源进行划分,最终可能会导致资源无法充分利用,造成浪费。

  3. 业务和资源管理混乱:在一个没有租户隔离的集群中,各部门的业务相互干扰,难以管理。随着时间的推移,集群的管理和运维变得越来越复杂。

  4. 规模扩展受限:在一个单一租户的环境下,集群难以支持多样化的业务需求,限制了企业的扩展能力。

多租户架构的优势

一旦有了多租户能力,企业就可以真正意义上构建自己的云环境,实现资源的最大化利用和高效管理:

  1. 资源管理有序:通过账户系统,每个部门可以自主管理其资源使用,无需担心资源分配和使用上的混乱。

  2. 效率大幅提升:各部门可以独立进行业务部署和更新,无需麻烦集群管理员,极大提高了操作效率和业务的灵活性。

  3. 资源扩展灵活:集群管理员只需关注整个集群的资源状况,而不是单个业务应用,资源按需分配和扩展会更加灵活和高效。

  4. 业务隔离保障稳定性:不同部门的业务应用在集群中彼此隔离,避免了相互干扰,保障了业务的稳定运行。

K8s 多租户的挑战

在 K8s 环境中实现多租户架构难度非常大,不是简单使用命名空间的能力就能实现的,还涉及到非常多的技术挑战。

挑战 1:防止越权

在 K8s 多租户环境中,限制每个用户的权限是关键。当多个用户共享一个集群时,一个权限过高的用户可能会对整个集群构成致命威胁。例如,禁止用户访问服务器节点或执行节点级别的操作,如使用 kubectl get node 命令。此外,需要限制其他高风险操作,如启用容器特权模式、共享主机文件系统、端口和网络等。

为了解决这些问题,Sealos 在其底层架构中采用了多种隔离手段。例如,使用 OpenEBS 进行存储的块级别隔离,Firecracker 以及 Cloud Hypervisor 用于计算运行时的隔离,以及通过 Cilium 实现网络隔离。这些措施确保即使在共享环境中,每个租户的操作也不会影响到其他租户。

挑战 2:用户的概念、授权与命名空间绑定

K8s 本身不具备原生的用户管理系统。因此,需要通过扩展功能来构建用户概念,与第三方用户系统对接,为每个用户生成独立的 kubeconfig 认证文件或 token。此外,需要建立用户与命名空间 (namespace) 之间的多对多关系,并为用户分配适当的权限。

Sealos 的设计允许管理员将用户加入特定的命名空间,并对其角色进行管理,从而有效地控制权限。这样管理员就可以细粒度地管理用户权限,确保每个用户只能访问和修改他们被授权的资源。

挑战 3:计量与配额管理

在多租户环境中,合理地分配和监控资源使用是另一个重大挑战。需要明确每个租户使用了多少 CPU、内存、磁盘和网络资源,并在资源使用超出配额时进行适当的处理。网络计量尤其复杂,需要区分内外网流量,而且要追踪到达特定容器的流量,并确定这些容器属于哪个租户。

Sealos 采用 eBPF 技术来监控网络流量,并通过控制器将流量数据与租户信息相关联,存储到数据库中。这样可以与计量计费系统对接,实现对资源使用的准确计费。对于计算和存储资源的监控,Sealos 同样采用了控制器来收集和管理这些信息。

Sealos 多租户的挑战

如果说上面的这些问题很难解决,那么 Sealos 的场景是在上述难度上乘以了 10 倍,因为 Sealos 选择了在公网这个不可信的环境中解决多租户问题,意味着给任意的开发者公开注册,然后一起共享一个 K8s 集群。

公网环境的不可信性和开放性使得实现多租户变得尤为复杂。在这种环境下,任何开发者都可以注册并共享同一个 K8s 集群,这就带来了巨大的安全和稳定性挑战。但是,如果能够成功实现,其好处也是显而易见的:

  1. 成本效益:用户无需单独搭建和维护完整的集群,显著降低了云服务的使用成本。
  2. 资源优化:允许每个容器运行在更小的规模上,充分利用平台的弹性和资源。
  3. 强隔离性:在公网环境中实现良好的多租户隔离,可以确保更高的安全性和稳定性。

前途的光明的,但挑战也是巨大的。

挑战 1:网关限制

Sealos 目前拥有数万注册用户,流量很大,我们几乎已经打爆了市面上很多主流的开源网关。在这种情况下,一个用户的更新可能导致所有其他用户受到影响,因为 Nginx 需要重新加载配置,这显然是不能接受的。

还有某知名网关 (不便透露),控制器 CPU 很容易就被打爆。

还有某知名网关 (同样不便透露),数量一多配置生效需要超过两分钟。不过我们已经和上游社区进行了反馈,应该很快会有改进。

挑战 2:运行时隔离问题

Sealos 需要实现强隔离以保证多租户环境的安全。然而,市面上的主流运行时环境并不能满足 Sealos 的隔离需求。例如,Firecracker 无法提供对 GPU 的良好支持,这对于需要高性能计算的应用来说是一个比较严重的限制。

挑战 3:存储隔离问题

Sealos 需要确保不同租户的数据彼此隔离,防止数据泄露或被其他租户错误访问。这就需要实现块级别的存储隔离,挑战也很大。

挑战 4:网络计量和争用管理

最后,网络资源的计量和管理也是多租户环境中的关键问题。Sealos 需要准确地计量每个用户的网络使用情况,并且在资源有限的情况下合理地分配网络资源。当网络资源产生争用时,需要有机制来公平地解决这些争用,确保所有用户都能公平合理地使用网络资源。

总结

多租户成熟了才能算作是一朵真正的云,才能把云的威力发挥到九成以上。面对公网这一极其复杂和不可预测的环境,Sealos 不仅实现了多租户的隔离和安全,还在保障高效运行的同时,降低了成本。且底层使用了非常多优雅的技术方案,彻底解决企业所有开发者共享一朵云的需求。

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

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

相关文章

为什么 AWS 数据库不讲 HTAP

在 AWS re:Invent 2023 掌门人 Adam Selipsky 的 Keynote 上,数据库方面最重磅的主题是 Zero-ETL,从 TP 数据库 (RDS, Aurora, DynamoDB) 同步数据到 AP 数据库 (Redshift)。 Zero-ETL 是 AWS 在去年 re:invent 2022 上推出的概念,今年则继…

Java爬虫攻略:应对JavaScript登录表单

问题背景 在进行网络抓取数据时,经常会遇到需要登录的网站,特别是使用JavaScript动态生成登录表单的情况。传统的爬虫工具可能无法直接处理这种情况,因此需要一种能够模拟用户行为登录的情况解决方案。 在实际项目中,我们可能需要…

鸿蒙操作系统架构

下面是Android和鸿蒙的主要区别的简要总结: Android鸿蒙开发语言Java、Kotlin鸿蒙开发语言(HML、JS、Java等)架构单一系统架构分布式系统架构设备适配性需要针对不同设备进行适配支持全场景设备,适配性更高用户界面使用XML布局文…

两个旋转矩阵相乘的李代数扰动求导

有一些非常有意思的求导方式,特此记录下来 1. 2. 所以看起来是个小量,可以去掉的 3. 4. 同样,是个小量

文件的隐藏属性 chattr 和 lsattr 详解

chattr 命令 chattr 命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐 藏功能添加到文件上,则需要在命令后面追加“参数”,如果想要把某个隐藏功能移出文件, 则需要追加“-参数”。 命令参数如下&am…

电压放大器可用于什么电路

电压放大器是一种常见的电子器件,其主要功能是放大输入信号的电压幅度。它可以用于多种电路中,下面西安安泰将详细介绍几个典型的应用场景。 首先,电压放大器可以用于音频放大器电路。音频放大器广泛应用于音响设备、电视机、电脑音箱等&…

想转行IT,有前途嘛?30个详细理由中会得到你想要的答案

目录 前言: 一、转行IT的前景 二、IT行业的情况 三、技能需求 四、如何准备转行IT 如果你想转行IT,以下是一些建议: 前言: 转行IT是一个颇具吸引力的选择,尤其在当前社会,IT行业的需求非常广泛。然而…

上证指数计算公式详解

作为中国证券市场的重要代表之一,上证指数(Shanghai Composite Index)对投资者而言具有重要意义。了解其计算公式,对于理解市场走势和投资决策至关重要。本文将深入探讨上证指数的计算公式,帮助读者更全面地理解这一指…

处理合并目录下的Excel文件数据并指定列去重

处理合并目录下的Excel文件数据并指定列去重 需求:读取指定目录下的Excel文件并给数据做合并与去重处理 Python代码实现 import os import pandas as pd import warnings import time from tqdm import tqdm #进度条展示def read_excel(path):dfs []for file in…

LaTex 数学公式:单个编号连等式

单个编号连等式的 LaTeX 写法如下: %%%%%% Equations %%%%%% \begin{align}L & (a b)^2 \nonumber \\& a^2 2ab b^2 \end{align}LaTex渲染结果如下: L ( a b ) 2 a 2 2 a b b 2 \begin{align} L & (a b)^2 \nonumber \\ &…

MySQL数据库中SQL语句分几类?

SQL语句主要分为四类,分别是数据查询语言(DQL)、数据操作语言(DML)、数据定义语言(DDL)和数据控制语言(DCL)。 1.数据查询语言(DQL):…

word中如何插入公式,如何高效使用mathtype,遇到他人论文的复杂公式如何直接粘贴复制,为你一一答疑解惑!!

文章目录 一、论文中插入公式---最原始,最好用,最稳定的方法1.1 主页--插入---对象1.2 找到公式编辑器,对应你的版本1.3 直接输入公式,关闭界面 二、如何做好一个懒人——如何直接粘贴别人PDF等格式论文中的公式?2.1 使…

UVM:field automation机制

(1)field automation机制相关的宏 最简单的uvm_field系列宏有如下几 种: define uvm_field_int(ARG,FLAG) define uvm_field_real(ARG,FLAG) define uvm_field_enum(T,ARG,FLAG) define uvm_field_object(ARG,FLAG) define uvm_field_event(…

Nginx反向代理导致请求头丢失

nginx默认request的header的那么中包含’_’时,会自动忽略掉。 解决方法是:在nginx里的nginx.conf配置文件中的http部分中添加如下配置: underscores_in_headers on; (默认 underscores_in_headers 为off)参考博文&am…

Maven能为我们解决什么问题?

Maven是一个流行的Java项目管理工具,它可以帮助开发人员更有效地管理项目的构建、报告和文档。Maven可以解决以下问题: 项目管理:Maven提供了一个标准的项目结构,使得项目的管理更加有序和一致。它可以帮助开发者组织代码、配置文…

python笔记argmax()

一维数组 返回数组中最大值元素的索引位置 import numpy as np a np.array([6, 2, 3, 10, 12, 1]) print(np.argmax(a)) #输出结果为4 # 也可以这样用 print(a.argmax())二维数组 参数axis可取(0,1),默认是0,表示数组第几维的最大值。 axis 0&#…

摄像头3A算法概述

摄像头3A算法概述 一、前言二、自动对焦(Auto Focus)三、自动曝光(Auto Exposure)四、自动白平衡(Auto White Balance)五、在自动驾驶中的应用 一、前言 摄像头的3A算法指的是自动对焦(Auto Fo…

JPA(Java Persistence API)是什么

JPA的官网地址:https://jcp.org/en/jsr/detail?id338 当前最新的版本是2.2版本:https://jcp.org/aboutJava/communityprocess/mrel/jsr338/index.html JPA是一个Java持久化的API,通过这个API,在Java EE和Java SE 环境中管理持…

echarts绘制一个饼图

其他echarts&#xff1a; qecharts绘制一个柱状图&#xff0c;柱状折线图 效果图&#xff1a; 代码&#xff1a; <template><div class"wrapper"><div ref"pieChart1" id"pieChart1"></div><div ref"pieCha…

《LeetCode力扣练习》代码随想录——字符串(反转字符串II---Java)

《LeetCode力扣练习》代码随想录——字符串&#xff08;反转字符串II—Java&#xff09; 刷题思路来源于 代码随想录 541. 反转字符串 II 模拟过程 class Solution {public String reverseStr(String s, int k) {if(s.length()1){return s;}char[] chs.toCharArray();for(int i…