英伟达宣布推出两个开源项目,用于在GPU基础设施上构建和运营托管Kubernetes服务——英伟达Kubernetes引擎(NVKE)和英伟达Kubernetes配方(NVKR)。这两个项目目前均已进入公开预览阶段。
AI工厂客户通常希望通过他们已经熟悉的Kubernetes API、工具和生态系统来使用GPU算力,同时由工厂负责运营集群。要实现这项服务,需要具备API驱动的资源配置、租户隔离、升级和恢复能力,并辅以服务承诺。此外,还需要针对不同GPU代次和Kubernetes版本,对GPU硬件、网络、驱动程序和运行时软件进行验证。
NVKE和NVKR将这项工作分为集群管理和可复现软件构建两部分。NVKE提供运行托管Kubernetes服务所需的软件,安装在工厂的基础设施上,并提供用于配置和管理集群的API。NVKR则使用配方来构建这些集群所需的操作系统镜像、容器镜像和软件包,配方定义了经过验证的软件版本与GPU代次组合。AI工厂仍然保留对自身软件、运营、服务和客户体验的掌控权。团队可以同时采用NVKE和NVKR项目,也可以独立使用其中一个。
NVKE和NVKR都是英伟达DSX AI工厂平台的组成部分,该平台帮助AI工厂设计、构建和运营GPU基础设施。这两个项目均以Apache 2.0许可证在GitHub上发布,团队可以查看代码、并行开发并贡献改进。在公开预览期间,API、配置和行为可能会在不同版本之间发生变化。目前尚不建议在生产工作负载中使用NVKE和NVKR,详情请参见预览状态和已知限制说明。
本指南将介绍如何使用NVKR构建节点镜像、部署NVKE管理平面,以及配置客户Kubernetes集群。
NVKE与NVKR如何协同工作
NVKR负责构建软件:它根据特定的源版本生成节点镜像、二进制文件、容器镜像和Helm图表,并记录构建输入信息。
NVKE负责管理集群:它使用这些构建产物来配置和运营Kubernetes集群。
团队既可以同时使用这两个项目,也可以分别使用。NVKE在运行时不依赖NVKR,而NVKR也可以为其他Kubernetes管理系统构建软件产物。
nvkectl会在引导主机上启动一个临时的种子集群,并用它来组建管理集群。NVKE管理平面(包括REST API和控制器)运行在管理集群上。管理平面为AI工厂客户创建工作负载集群,每个集群都拥有各自独立的Kubernetes控制平面、etcd和节点池。节点机器来自英伟达基础设施控制器(NICo),该控制器通过CAPNICo(NICo的Cluster API基础设施提供程序)管理裸金属服务器的生命周期。
节点必须出示经过验证的SPIFFE身份,才能获得加入集群的凭证。NVKE遥测管道是一个基于OpenTelemetry的Helm图表,用于收集日志、指标和追踪数据,并通过OTLP将其导出到监控后端。
在每个工作负载集群内部,团队可以通过AI集群运行时(AICR)添加GPU加速运行时,通过NodeWright添加节点软件包,并通过NVSentinel实现故障自动修复。
NVKE是经过认证的Kubernetes AI平台和Kubernetes安装程序,已在Kubernetes 1.36版本上通过一致性测试。
从裸金属到客户集群
本指南介绍如何从机架中安装的服务器开始,通过NVKR构建节点镜像、使用nvkectl部署NVKE管理平面,并通过NVKE API创建客户集群,完成客户Kubernetes集群的配置。NVKE文档列出了所有标志和选项,以及最新的操作步骤。
本指南所需前提条件:
用于管理集群的三台CPU服务器,以及站点网络上一台单独的Linux引导主机,该主机需安装containerd、nerdctl、kind、Helm和kubectl
用于工作负载集群控制平面的三台CPU服务器
一组用作工作节点的GPU服务器资源池
一套已部署并登记了可用容量的NICo安装环境
一台支持Docker和KVM的Linux构建主机
一台用于存放节点镜像的HTTP服务器、一个用于存放控制器镜像的容器镜像仓库,以及用于下载安装过程中所需开源镜像和Helm图表的互联网访问权限
构建节点镜像
NVKR定义了英伟达为NVKE验证的Kubernetes软件配置,并提供了将该定义转化为可部署构建产物的可复现流水线。NVKR根据版本锁定的源代码构建节点镜像,并记录每一项输入内容,使团队能够识别每个镜像中包含的软件,并可在之后重新构建该镜像。管理集群和每个节点池可以运行不同的镜像,例如针对不同CPU架构或GPU代次分别使用不同镜像。
团队在构建主机上克隆NVKR代码仓库,然后运行快速入门脚本以构建nvkectl、NVKE控制器镜像及其Helm图表,并运行第二个脚本构建节点镜像(本指南中命名为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配置。
一个发行版集合包含三个组成部分:
机器镜像包含NICo用于引导服务器启动的iPXE脚本。
集群发行版将机器镜像与准备控制平面节点所需的cloud-init配置配对,并记录cloud-init安装的Kubernetes版本。
节点池发行版为工作节点提供相应的镜像和配置。
$ 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
集群状态将保持为“配置中”,直到第一个控制平面节点运行完kubeadm init,并且NVKE完成OVN-Kubernetes和NodeLocal DNSCache的安装。之后状态将变为“已配置”。
为客户授予访问权限
客户通过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工厂与合作伙伴
英伟达云合作伙伴Firmus和SK电讯正在将NVKE和NVKR集成到各自的AI工厂中,以构建和部署承载AI工作负载的Kubernetes集群。
此外,英伟达合作伙伴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工厂技术栈的未来方向。
开始使用
NVKE和NVKR是开源组件,可通过英伟达DSX AI工厂GitHub组织获取,CAPNICo同样位于该组织下。可以从NVKE文档入手,或者在单台机器上尝试本地快速入门体验——无需GPU或英伟达账户。
欢迎通过Slack邀请链接加入英伟达DSX AI工厂Slack工作区的#nvke频道参与讨论,与社区分享你的构建成果。
欢迎前往KubeCon英伟达展位(170号展位),了解更多Kubernetes深度解析内容并观看现场演示。
