前提条件#

本教程将引导您完成在支持 GPU 的服务器上设置 Kubernetes 环境的过程。我们将安装和配置 kubectlhelmminikube,确保 GPU 兼容性,以满足需要加速计算的工作负载。在本教程结束时,您将拥有一个功能齐全的 Kubernetes 环境,可以部署 vLLM Production Stack。

目录#

先决条件#

在开始之前,请确保以下条件

  1. GPU 服务器要求

    • 拥有一台已正确安装 GPU 和驱动程序(例如,NVIDIA 驱动程序)的服务器。

    • 安装了NVIDIA Container Toolkit,以支持 GPU 工作负载。

  2. 访问权限

    • 对服务器具有 root 或管理员访问权限。

    • 具有互联网连接,可以下载所需的软件包和工具。

  3. 环境设置

    • 基于 Linux 的操作系统(例如,Ubuntu 20.04 或更高版本)。

    • 基本了解 Linux shell 命令。

步骤#

步骤 1:安装 kubectl#

  1. 克隆存储库并导航到 utils/ 文件夹

    git clone https://github.com/vllm-project/production-stack.git
    cd production-stack/utils
    
  2. 执行脚本 install-kubectl.sh

    bash install-kubectl.sh
    
  3. 说明:此脚本下载最新版本的 kubectl(Kubernetes 命令行工具),并将其放入您的 PATH 中,以便轻松执行。

  4. 预期输出

    • 确认 kubectl 已下载并安装。

    • 使用以下命令的验证消息

      kubectl version --client
      

    示例输出

    Client Version: v1.32.1
    

步骤 2:安装 Helm#

  1. 执行脚本 install-helm.sh

    bash install-helm.sh
    
  2. 说明

    • 下载并安装 Helm,Kubernetes 的包管理器。

    • 将 Helm 二进制文件放入您的 PATH 中。

  3. 预期输出

    • Helm 安装成功。

    • 使用以下命令的验证消息

      helm version
      

    示例输出

    version.BuildInfo{Version:"v3.17.0", GitCommit:"301108edc7ac2a8ba79e4ebf5701b0b6ce6a31e4", GitTreeState:"clean", GoVersion:"go1.23.4"}
    

步骤 3:安装支持 GPU 的 Minikube#

在继续之前,请确保 Docker 在无需 sudo 的情况下运行。要将您的用户添加到 docker 组,请运行

sudo usermod -aG docker $USER && newgrp docker

如果您的系统上已安装 Minikube,我们建议在继续之前卸载现有版本。您可以根据您的操作系统和包管理器使用以下命令之一

# Ubuntu / Debian
sudo apt remove minikube

# RHEL / CentOS / Fedora
sudo yum remove minikube
# or
sudo dnf remove minikube

# macOS (installed via Homebrew)
brew uninstall minikube

# Arch Linux
sudo pacman -Rs minikube

# Windows (via Chocolatey)
choco uninstall minikube

# Windows (via Scoop)
scoop uninstall minikube

卸载以前的安装后,请执行下面提供的脚本以安装最新版本。

  1. 执行脚本 install-minikube-cluster.sh

    bash install-minikube-cluster.sh
    
  2. 说明

    • 如果尚未安装 Minikube,则进行安装。

    • 通过启用 NVIDIA Container Toolkit 并以 GPU 支持启动 Minikube 来配置系统以支持 GPU 工作负载。

    • 安装 NVIDIA gpu-operator chart 来管理集群中的 GPU 资源。

  3. 预期输出:如果一切顺利,您应该会看到类似以下内容的示例输出

    😄  minikube v1.35.0 on Ubuntu 22.04 (kvm/amd64)
    ❗  minikube skips various validations when --force is supplied; this may lead to unexpected behavior
    ✨  Using the docker driver based on user configuration
    ......
    ......
    🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
    "nvidia" has been added to your repositories
    Hang tight while we grab the latest from your chart repositories...
    ......
    ......
    NAME: gpu-operator-1737507918
    LAST DEPLOYED: Wed Jan 22 01:05:21 2025
    NAMESPACE: gpu-operator
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    
  4. 安装 gpu-operator 的一些故障排除提示

    如果 gpu-operator 由于 minikube(和 kind)常见的“打开文件过多”问题而无法启动,则以下快速修复可能有所帮助。

    此问题可以通过一个或多个处于 CrashLoopBackOff 状态的 gpu-operator pod 来观察,并通过检查它们的日志来确认。例如,

    $ kubectl -n gpu-operator logs daemonset/nvidia-device-plugin-daemonset -c nvidia-device-plugin
    IS_HOST_DRIVER=true
    NVIDIA_DRIVER_ROOT=/
    DRIVER_ROOT_CTR_PATH=/host
    NVIDIA_DEV_ROOT=/
    DEV_ROOT_CTR_PATH=/host
    Starting nvidia-device-plugin
    I0131 19:35:42.895845       1 main.go:235] "Starting NVIDIA Device Plugin" version=<
       d475b2cf
       commit: d475b2cfcf12b983a4975d4fc59d91af432cf28e
    >
    I0131 19:35:42.895917       1 main.go:238] Starting FS watcher for /var/lib/kubelet/device-plugins
    E0131 19:35:42.895933       1 main.go:173] failed to create FS watcher for /var/lib/kubelet/device-plugins/: too many open files
    

    kind 已详细记录了此修复程序,它也适用于 minikube。

步骤 4:验证 GPU 配置#

  1. 确保 Minikube 正在运行

    minikube status
    

    预期输出

    minikube
    type: Control Plane
    host: Running
    kubelet: Running
    apiserver: Running
    kubeconfig: Configured
    
  2. 验证 Kubernetes 内部的 GPU 访问

    kubectl describe nodes | grep -i gpu
    

    预期输出

    nvidia.com/gpu: 1
    ... (plus many lines related to gpu information)
    
  3. 部署测试 GPU 工作负载

    kubectl run gpu-test --image=nvidia/cuda:12.2.0-runtime-ubuntu22.04 --restart=Never -- nvidia-smi
    

    等待 Kubernetes 下载并创建 pod,然后检查日志以确认 GPU 使用情况

    kubectl logs gpu-test
    

    您应该会从终端看到 nvidia-smi 的输出

结论#

通过遵循本教程,您已成功在服务器上设置了支持 GPU 的 Kubernetes 环境。现在您可以开始在 Kubernetes 上部署和测试 vLLM Production Stack。有关进一步的配置和特定于工作负载的设置,请参阅 kubectlhelmminikube 的官方文档。

接下来做什么