像Kubernetes这样的容器管理器已经成为管理大量容器的关键。通过在集群(一组机器)中运行容器,系统可以优化每个应用程序消耗内存的方式。随着云原生生态系统向微服务设计和日益分散的计算发展,自动化这些容器管理操作变得至关重要。
Kubernetes已成为接近标准的容器编排和调度实用程序,使工程师能够从一个控制平面更好地管理其分布式节点。如今,它是维护最积极的编排器,这意味着该领域的许多其他工具都倾向于与 Kubernetes 集成并将其扩展到独特的开发场景中。例如,kube-rs 使使用 Rust 语言的 Kubernetes 更容易。
云原生计算基金会 (CNCF) 一直是streaming, observability, container runtime, CI/CD等领域新的云原生工具的一股力量。
下面,我们将研究由CNCF托管的七个与调度和编排相关的项目。其中许多开源项目都支持 Kubernetes,并有助于处理多集群管理、多云、数据密集型工作负载和其他特定要求等问题。
1. Kubernetes
用于自动化部署、扩展和管理容器化应用程序的系统。
- GitHub:https://github.com/kubernetes/kubernetes
- 网站:https://kubernetes.io/
Kubernetes,通常缩写为 K8s,是使用最广泛的容器编排器。Kubernetes 最初由 Google 设计,擅长调度和扩展大规模容器工作负载、优化它们的运行位置以及处理许多其他应用程序生命周期职责。正如我们之前详述的,Kubernetes 与 Docker 不同,尽管这两种工具经常同时使用。Kubernetes 于 2014 年开源,现在是一个完全毕业的 CNCF 项目。
2. Crossplane
通用控制平面。
- GitHub:https://github.com/crossplane/crossplane
- 网站:https://crossplane.io/
现在有多种 Kubernetes 风格。Kubernetes 可以通过 EKS、AKS、GKE、ACK 或 PKS 等服务进行自我管理或云管理。多集群管理也有不同的做法。Crossplane 是一种扩展 K8s API 的工具,可以更轻松地与多个云提供商交互。使用 Crossplane,团队可以通过一个通用 API 进行通信,以自定义方式管理多个集群和供应商。Crossplane 还支持插入安全策略和护栏,以帮助保护您的云原生基础架构。Crossplane 由 Upbound 创建,在 CNCF 中处于孵化状态。
3. Fluid
用于弹性数据抽象和加速的云原生编排平台。
- GitHub:https://github.com/fluid-cloudnative/fluid
- 网站:http://pasa-bigdata.nju.edu.cn/fluid/index.html
如今,在 AI/ML 开发等场景中使用数据密集型应用程序很常见。Kubernetes 是一个容器编排器,而 Fluid 则是为编排数据层而设计的。Fluid 是一个开源的 Kubernetes 原生项目,可帮助处理数据并按需扩展数据集缓存。基于 Alluxio,Fluid 为管理数据集提供了运行时和额外的抽象,使其成为处理分布式缓存的主要工具。通过优化数据处理方式,Fluid 可以比其他方法更快地训练AI/ML 模型。在撰写本文时,Fluid 是一个沙盒 CNCF 项目。
4. Karmada
多云、多集群 K8s 编排器。
- GitHub:https://github.com/karmada-io/karmada
- 网站:https://karmada.io/
如前所述,扩展的云原生架构可能使用不同风格的 Kubernetes。Karmada 就是为这一现实而构建的,因为它是一个实用程序,可帮助您跨各种 Kubernetes 集群和云运行应用程序。使用 Karmada 作为集中管理点可以帮助避免供应商锁定并实现混合多云计算安排。Karmada 使用 REST API 服务器运行,该服务器与访问各种云中的集群的控制器进行通信。此过程根据约束和可用资源来调度集群。Karmada 目前是一个由 CNCF 托管的具有开放治理的沙盒项目。
5. kube-rs
Kubernetes 的 Rust 客户端。
- GitHub:https://github.com/kube-rs/kube-rs
- 网站:https://kube.rs/
与 Kubernetes 的Go 客户端类似,kube-rs 为 Kubernetes 自定义资源定义 (CRD) 提供运行时抽象层和宏。该项目使编写与 Rust 中的 Kubernetes API 交互的应用程序变得容易。Kube.rs 将反射器、控制器和自定义资源接口等 Kubrentes 原生元素重新解释为 Rust 语言。查看入门指南以开始使用 kube-rs。在撰写本文时,kube-rs 是 CNCF 的沙盒项目。
6. Open Cluster Management
用于管理多个 K8s 集群的集中控制平面。
- GitHub:https://github.com/open-cluster-management-io/ocm
- 网站:https://open-cluster-management.io/
随着组织部署的 Kubernetes 集群数量的增加,同时管理它们变得越来越困难,更不用说保持对其内部运作的可见性了。跨多个云供应商使用 Kubernetes 的团队加剧了这种情况。开放集群管理 (OCM) 项目是一个有趣的开源计划,旨在提供对多个 Kubernetes 集群的集中控制。借助 OCM,操作员可以从单个控制平面创建和删除多个云上的集群。您也可以注册集群并跨多个集群应用标准安全策略。OCM 提供clusteradm,一个用于多集群管理的命令行工具。在撰写本文时,Open Cluster Management 是 CNCF 的沙盒项目。
7. Volcano
云原生批处理系统。
- GitHub:https://github.com/volcano-sh/volcano
- 网站:https://volcano.sh/en/
Volcano 是一个开源项目,它为批处理和弹性计算提供组件。创建它是因为 Kubernetes 不提供开箱即用的数据密集型工作负载所需的那种批处理调度功能。该工具有助于在 AI/ML 或基因组学等领域将大数据应用程序作为 Kubernetes 工作负载运行。在撰写本文时,Volcano 是 CNCF 的沙盒项目。
想法:开源调度器工具
上面,我们回顾了 CNCF 下一些新兴的容器编排和调度项目。如您所见,Kubernetes 无处不在的后果影响了许多新软件包的创建,以迎合这种新范式。无论运营商是试图统一不同的 Kubernetes 风格,使用他们选择的语言工作,还是在 Kubernetes 集群中运行数据密集型计算,CNCF 都有一些有趣的项目来满足这些特殊需求。