oneinfra是一个开源项目,用于跨不同公有云、私有云和裸金属服务器管理和运行多个Kubernetes集群。
oneinfra 安装的主要部分包括“Hypervisor”、集群抽象和组件。Hypervisor 机器上必须运行着容器运行时接口(CRI)实现。集群抽象表示一个 Kubernetes 集群,包括控制平面及其 Ingress。还有其他组件(属于控制平面和控制平面 Ingress)运行在集群上。控制平面组件包括典型的 Kubernetes 主节点组件:etcd、API 服务器、调度器等,而 Ingress 组件则包括 haproxy 和 VPN 端点。oneinfra 可以以声明的方式用不同的版本创建不同的集群,并且允许我们同时使用不同的Kubernetes版本。它类似于开源的 GKE 或 EKS。
为了了解更多关于这个项目的信息,InfoQ 联系了 oneinfra 的作者、软件架构师Rafael Fernandez Lopez。
按照 López 的说法,oneinfra 主要是填补这样一项空白,即“提供一个非常简单的设置系统,让你可以根据需要创建和销毁孤立的 Kubernetes 控制平面,而不需要为它们创建专门的基础设施”。oneinfra 可以使用来自多个提供商的底层基础设施和机器(包括裸金属实例)来创建控制平面实例。关于这一点,López 介绍了一些最佳做法:
你可以使用不同的云提供商来创建控制平面实例。控制平面跨不同的公有云或服务提供商会带来运营方面的挑战,因此,建议将控制平面的所有组件放在同一个服务提供商那里,不过你也可以在不同的服务提供商那里创建不同的控制平面。
图片来源:https://github.com/oneinfra/oneinfra(授权使用)
在 oneinfra 的术语中,Hypervisor 是“物理机或虚拟机,oneinfra 将在上面创建控制平面组件”。oneinfra 中的 Hypervisor 节点必须运行着容器运行时接口(CRI)实现。Hypervisor 可以是“public”的,并运行 Ingress 组件,也可以是“private”的,并运行控制平面组件。Hypervisor 节点需要有一个 CRI 实现的服务包装器来连接 oneinfra。López 解释说,在未来的版本中,这个过程会变得更简单:
简化新建 Hypervisor 的过程是其路线图的一部分——将来会添加类似“oi hypervisor join”这样的命令,类似于当前的“oi node join”命令。后者与托管集群通信以加入集群,而前者与管理集群通信并作为 Hypervisor 加入集群。
该系统有一个“协调器”模块——这是一组可以做很多事情的控制器。它调度 Hypervisor 上的控制平面组件,并创建已定义但缺少的组件。它还负责删除被用户删除的控制平面组件,使系统达到期望的状态。协调器处理工作节点向托管集群发出的加入请求,并确保RBAC规则设置正确。
在当前的架构中,控制平面实例是相互隔离的,因此,Kubernetes 的主节点软件(如 etcd)不能共享或者被另一个持久层代替。Lopez 说,还需要解决性能方面的问题,比如,确定在一个 Hypervisor 中可以容纳多少个控制平面的基准测试。未来的另一项改进工作是使工作节点可以位于异构网络上。
GitHub 上提供了 oneinfra 的源代码。
原文链接:
oneinfra : Platform to Manage Multiple Kubernetes Clusters as a Service
评论 1 条评论