与运营多个单租户集群相比,运营多租户集群有几个优点:
Kubernetes Multitenancy WG Deep Dive KubeCon EU 2019 (last updated 5/22/2019) 描述了4种解决方案,并做了对比:
这篇文章将介绍其中的 B 和C 方案
一种常见的设计方案时使用 namespace隔离, 让 namespace 成为多租户隔离的边界。
这种设计里面的推荐做法是:
为了支持这种方案,社区设计了一套 CRD
这种通过 Namespace 隔离的存在问题,
namespace 是 kubernetes 的概念,并非所有资源在 kubernetes 都能通过 namespace 隔离,比如:
这张图来自 https://blog.jessfraz.com/post/hard-multi-tenancy-in-kubernetes/
如果我们使用嵌套都 kubernetes apiserver(以及其他控制组件),那么我们要关心都事情就变得简单了:kubernetes 相关的核心组建,以及资源视图已经做了隔离,那么我们需要做的事情就是:让不同的虚拟kubernetes
共享同一个 ring 0 kubernetes 资源池. 如果我们能做到 虚拟kubernetes
绑定到其中几个 kubelet 就可以做到按照上图所示的按节点的隔离。
然后这种做法似乎和新建多个 kubernetes 集群并无大的区别。记得吗,当我们考虑在同一个kubernetes 上追求多租户,我们首先考虑的在保证安全的前提下,是否能提高资源利用率。我们可能追求的如下图所示方案:
这种方案的带来的问题是 node 视图被混淆了。当然我们有几种做法,比如在 虚拟kubernetes
api 层做一些修改,以过滤掉不适合 用户空间的信息,或者使用 一套有趣的方案 virtural node, 其中一种开源等实现为:virtual-kubelet, virtual-node 成为 node 的上一层封装,对于 虚拟kubernetes
来讲,所有的节点可以都是 virtual-node,而 virtual-node 再通过其他方式,比如调用 ring0 kubernetes API, 完成 pod的创建,以及同步 pod 的状态信息。
在这篇提案中描述了类似设计.
更为具体等工作流程为
虚拟kubernetes
虚拟kubernetes
中的 pod 拷贝到 super master,即上文提的 ring0 kubernetes这种方案的好处是:
这种方案需要解决的问题:
甚至:
当然 上述的两种场景在解决 网络,监控等问题时会变得更为复杂的问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。