返回 文章 学习 CMS 文章

NVIDIA 发布 NVKE 和 NVKR:在 GPU 基础设施上管理 Kubernetes 集群

NVIDIA 推出 NVKE 和 NVKR 两个开源项目,帮助 AI 工厂在 GPU 基础设施上构建和运营托管 Kubernetes 服务。

NVIDIAKubernetesGPU开源
成长分 / 100 68 综合收获、行动、留存与影响

NVIDIA 发布 NVKE 和 NVKR:在 GPU 基础设施上管理 Kubernetes 集群
为什么值得读了解 NVIDIA 如何通过开源项目简化 GPU 基础设施上的 Kubernetes 集群管理。

掌握 NVKE 和 NVKR 的协作方式及从裸金属到客户集群的完整流程。

关键洞察
  1. NVKE 提供运行托管 Kubernetes 服务的软件,包括 API 和控制器,用于供应和管理集群。
  2. NVKR 负责构建节点镜像、容器镜像和软件包,使用配方定义经过验证的软件版本和 GPU 代际组合。
  3. 两个项目可独立或一起使用,NVKE 不依赖 NVKR 运行时,NVKR 也可为其他 Kubernetes 管理系统构建工件。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:13276

NVIDIA 宣布了两个开源项目,用于在 GPU 基础设施上构建和运营托管 Kubernetes 服务——NVIDIA Kubernetes Engine (NVKE) 和 NVIDIA Kubernetes Recipes (NVKR)。这两个新项目均以公开预览版形式提供。

AI 工厂客户通常希望通过他们已经在使用的 Kubernetes API、工具和生态系统来使用 GPU 容量,并由工厂运营他们的集群。交付此服务需要 API 驱动的配置、租户隔离、升级和恢复,并以服务承诺为后盾。还需要对跨 GPU 代际和 Kubernetes 版本的 GPU 硬件、网络、驱动程序和运行时软件进行资格认证。

NVKE 和 NVKR 将这项工作划分为集群管理和可复现软件构建两部分。NVKE 提供运行托管 Kubernetes 服务的软件,安装在工厂的基础设施上,并提供用于配置和管理集群的 API。NVKR 构建这些集群所需的操作系统镜像、容器镜像和软件包,使用定义已验证的软件版本和 GPU 代际组合的配方。AI 工厂保留对其软件、运营、服务和客户体验的控制权。团队可以一起或独立采用 NVKE 和 NVKR 项目。

NVIDIA DSX AI Factory Platform 示意图,显示 DSX OS 服务位于硬件和设施基础设施之上,DSX Sim 提供蓝图、基础设施模拟和 SimReady 资产。
图 1. NVIDIA DSX AI Factory Platform

NVKE 和 NVKR 都是 NVIDIA DSX AI Factory Platform 的组件,该平台帮助 AI 工厂设计、构建和运营 GPU 基础设施。两个项目均在 GitHub 上以 Apache 2.0 许可证提供,因此团队可以检查代码、并行开发并贡献改进。在公开预览期间,API、配置和行为可能因版本而异。NVKE 和 NVKR 目前尚不建议用于生产工作负载。请参阅预览状态和已知限制。

本演练涵盖使用 NVKR 构建节点镜像、部署 NVKE 管理平面以及配置客户 Kubernetes 集群。

NVKE 和 NVKR 如何协同工作

  • NVKR 构建软件:它从特定源版本生成节点镜像、二进制文件、容器镜像和 Helm chart,并记录构建输入。
  • NVKE 管理集群:它使用这些工件来配置和运营 Kubernetes 集群。

团队可以一起或单独使用这些项目。NVKE 对 NVKR 没有运行时依赖,NVKR 可以为其他 Kubernetes 管理系统构建工件。

nvkectl 在引导主机上启动一个临时种子集群,并使用它来形成管理集群。NVKE 管理平面(包括 REST API 和控制器)运行在管理集群上。管理平面为 AI 工厂客户创建工作负载集群,每个集群都有自己的 Kubernetes 控制平面、etcd 和节点池。机器来自 NVIDIA Infra Controller (NICo),它通过 CAPNICo(NICo 的 Cluster API 基础设施提供程序)管理裸金属生命周期。

节点在获得加入凭证之前必须提供经过认证的 SPIFFE 身份。NVKE 遥测管道(基于 OpenTelemetry 的 Helm chart)收集日志、指标和跟踪,并通过 OTLP 导出到监控后端。

该图显示 NVKR 将软件工件发布到注册表,NVKE 管理平面通过 CAPNICo 和 NICo 请求机器,客户使用 kubectl 访问工作负载集群。
图 2. NVKR、NVKE 管理集群、NICo 和工作负载集群如何协同工作

在每个工作负载集群内部,团队使用 AI Cluster Runtime (AICR) 添加 GPU 加速运行时,使用 NodeWright 添加节点包,并使用 NVSentinel 添加故障修复自动化。

NVKE 是 Certified Kubernetes AI Platform 和 Certified Kubernetes Installer,已在 Kubernetes 1.36 上通过一致性测试。

从裸金属到客户集群

本演练描述了如何从机架中安装的服务器开始配置客户 Kubernetes 集群:使用 NVKR 构建节点镜像,使用 nvkectl 部署 NVKE 管理平面,并通过 NVKE API 创建客户集群。NVKE 文档列出了每个标志和选项,以及最新的步骤。

演练先决条件:

  • 三台用于管理集群的 CPU 服务器,以及一台位于站点网络上的独立 Linux 引导主机,需安装 containerd、nerdctl、kind、Helm 和 kubectl
  • 三台用于工作负载集群控制平面的 CPU 服务器
  • 一组用于工作节点的 GPU 服务器
  • 已注册容量的 NICo 安装
  • 支持 Docker 和 KVM 的 Linux 构建主机
  • 用于节点镜像的 HTTP 服务器、用于控制器镜像的容器注册表,以及访问互联网以下载安装期间使用的开源镜像和 Helm chart

构建节点镜像

NVKR 定义了 NVIDIA 为 NVKE 验证的 Kubernetes 软件配置,并提供了将该定义转化为可部署工件的可复现管道。NVKR 从版本固定的源构建节点镜像并记录每个输入,因此团队可以识别每个镜像中包含的软件,并可以在以后重新构建它。管理集群和每个节点池可以运行不同的镜像,例如每个 CPU 架构或 GPU 代际一个镜像。

团队在构建主机上克隆 NVKR 仓库。然后运行快速启动脚本构建 nvkectl、NVKE 控制器镜像及其 Helm chart,以及第二个脚本构建节点镜像,在本演练中命名为 node-image-01。

$ git clone https://github.com/dsx-ai-factory/nvkr.git && cd nvkr
$ bash scripts/nvkr-quickstart.sh
$ NVKE_OS_ARCH=amd64 scripts/nvke-os-local.sh node-image-01

节点镜像构建从源代码编译 NVKE 节点代理和 OVN-Kubernetes,并添加校验和固定的上游发行版 Kubernetes 1.36 软件包和 SPIRE 代理。然后从 Ubuntu 安装程序启动虚拟机,安装代理,并将 Kubernetes 和网络软件包暂存到磁盘上。结果是 QCOW2 磁盘镜像。团队将控制器镜像推送到注册表,将 nvkectl 复制到引导主机,并将 QCOW2 放在 HTTP 服务器上。

部署 NVKE 管理平面

NVKE 管理平面运行在称为管理集群的 Kubernetes 集群上。团队在引导主机上运行以下命令开始创建管理集群:

$ nvkectl bootstrap site -f site-a.yaml \
    --nvke-controller-image registry.example.com/nvke/nvke-controller:<tag>

站点规范文件 site-a.yaml 包含 NICo 为管理集群配置三台服务器所需的输入。引导命令在引导主机上启动一个临时 Kubernetes 集群。此临时集群使用 kind 运行单个 Kubernetes 节点,并托管设置所需的 NVKE 软件。

NVKE 控制器向 NICo 请求三台服务器,NICo 从先前构建的节点镜像启动这些服务器。当所有三个节点加入后,引导过程删除临时集群,留下管理集群。然后团队在管理集群上安装 NVKE 管理平面,并运行 nvkectl config set-site 将命令行工具连接到 NVKE API。

发布客户将运行的发行版集合

客户从 AI 工厂发布的发行版中按名称选择发行版。他们不直接使用操作系统镜像或 cloud-init 配置。

发行版集合包含三个组件:

  1. 机器镜像包含 NICo 为启动服务器而运行的 iPXE 脚本。
  2. 集群发行版将机器镜像与 cloud-init 配置配对,该配置准备控制平面节点并记录 cloud-init 安装的 Kubernetes 版本。
  3. 节点池发行版为工作节点提供相应的镜像和配置。
$ nvkectl create machineimage -f machineimage.yaml
$ nvkectl create clusterrelease -f clusterrelease.yaml
$ nvkectl create nodepoolrelease -f nodepoolrelease.yaml

创建客户集群

客户集群请求包含与站点规范相同的 NICo 输入,外加一个 Kubernetes 版本。控制平面和每个节点池都有自己的实例类型、VPC 前缀和发行版。在此示例中,控制平面和 GPU 节点池引用名为 k8s-1.36.3-amd64 的发行版。

name: customer-a
controlPlaneKubernetesVersion: 1.36.3
etcdEncrypted: true
controlPlaneVIP: 10.0.20.10
nico: {orgID: <org-id>, siteID: <site-id>, vpcID: <vpc-id>}
controlPlaneConfig:
  desiredCount: 3
  nico: {instanceTypePreference: [<cpu-instance-type>], vpcPrefixIDs: [<prefix-id>], release: k8s-1.36.3-amd64}
nodePools:
  - name: gpu
    nodeNamePrefix: gpu
    desiredNodeCount: 4
    nico: {instanceTypeID: <gpu-instance-type>, vpcPrefixIDs: [<prefix-id>], release: k8s-1.36.3-amd64}

团队将请求保存为 customer-a.yaml,然后运行以下命令通过 nvkectl 将其提交到 NVKE REST API。

$ nvkectl create cluster -f customer-a.yaml

集群状态保持为 Provisioning,直到第一个控制平面节点运行了 kubeadm init 并且 NVKE 安装了 OVN-Kubernetes 和 NodeLocal DNSCache。然后状态变为 Provisioned。

授予客户访问权限

客户通过 kubeconfig 访问集群的 Kubernetes API,而 AI 工厂继续通过 NVKE API 管理它。为了授予客户访问权限,团队从管理集群检索集群的 kubeconfig 并安全地共享它。

$ nvkectl get kubeconfig customer-a --output-file customer-a.kubeconfig
kubeconfig written to customer-a.kubeconfig

使用 NVKE 和 NVKR 构建的 AI 工厂和合作伙伴

NVIDIA 云合作伙伴 Firmus 和 SK Telecom 正在将 NVKE 和 NVKR 集成到他们的 AI 工厂中,以构建和部署托管 AI 工作负载的 Kubernetes 集群。

此外,NVIDIA 合作伙伴 Mirantis、Rafay、Spectro Cloud、OpenNebula Systems 和 vCluster 正在将 NVKE 和 NVKR 的组件集成到他们的托管 Kubernetes 产品中,以帮助他们的 AI 工厂客户在 Kubernetes 上运行 AI 工作负载。Netris 正在为其网络自动化解决方案启用 NVKE。

现已提供公开预览版

NVKE 和 NVKR 处于公开预览阶段,尚不建议用于生产工作负载。这些项目正在快速发展,NVKE API 可能会在版本之间发生变化。预览版状态页面列出了当前的限制。

团队可以根据其基础设施需求评估这些项目,并在公开的 NVKE 和 NVKR 路线图上查看计划的工作。反馈和贡献可以帮助塑造 NVKE、NVKR 以及 DSX AI Factory 堆栈的其余部分。

开始使用

NVKE 和 NVKR 是通过 NVIDIA DSX AI Factory GitHub 组织 提供的开源组件,与 CAPNICo 一起提供。从 NVKE 文档 开始,或在单台机器上尝试 本地快速入门——无需 GPU 或 NVIDIA 账户。