通过机密 GKE 节点加密使用中的 GPU 工作负载数据

您可以通过在加密的机密 Google Kubernetes Engine 节点上运行工作负载,加密使用中的 GPU 工作负载数据。本页面向安全工程师和运维人员介绍了如何提高加速工作负载(例如 AI/机器学习任务)中的数据的安全性。您应该熟悉以下概念:

在机密 GKE 节点上运行 GPU 工作负载简介

您可以使用以下方法之一为 GPU 工作负载请求机密 GKE 节点:

限制

Autopilot 模式仅支持搭配机密 GKE 节点的 NVIDIA H100 (80 GB) GPU。

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行 gcloud components update 命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。

要求

无论您选择哪种机密 GKE 节点配置方法,都必须满足以下所有要求:

  • 节点必须位于支持 NVIDIA 机密计算的可用区中。 如需了解详情,请参阅查看支持的区域
  • 节点必须使用受支持的机器类型、机密计算技术和 GPU。如需了解详情,请参阅受支持的配置
  • 您必须在节点位置拥有抢占式配额,才能使用所需的 GPU。例如,如果您使用 NVIDIA H100 (80 GB) GPU,则必须拥有 compute.googleapis.com/preemptible_nvidia_h100_gpus 的配额。如需详细了解如何管理配额,请参阅查看和管理配额

除了这些要求之外,您还必须满足特定条件,具体取决于您选择的机密 GKE 节点配置方法,如下表中所述:

配置方法 要求 限制
ComputeClass
  • 使用 Spot 虚拟机或灵活启动预览版)。
  • 使用 GKE 1.33.3-gke.1392000 版或更高版本。
  • 您无法将启用已排队的预配的灵活启动与 ComputeClass 搭配使用。
  • 您无法使用 GPU 共享功能,例如分时或多实例 GPU。
在 Standard 模式下手动配置
  • 使用 Spot 虚拟机、抢占式虚拟机、灵活启动(预览版)或启用已排队的预配的灵活启动。
  • 使用以下 GKE 版本之一:
    • 手动 GPU 驱动程序安装:1.32.2-gke.1297000 或更高版本。
    • 自动 GPU 驱动程序安装:1.33.3-gke.1392000 或更高版本。
    • 启用已排队的预配的灵活启动:1.32.2-gke.1652000 或更高版本。
  • 如果您为整个集群启用机密 GKE 节点,则无法使用灵活启动(预览版)。
  • 您无法使用 GPU 共享功能,例如分时或多实例 GPU。

所需的角色

如需获得创建机密 GKE 节点所需的权限,请让您的管理员为您授予 Google Cloud 项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

使用 ComputeClasses 运行机密 GPU 工作负载

您可以在 ComputeClass 中定义机密 GKE 节点配置。ComputeClass 是一种 Kubernetes 自定义资源,可用于以声明方式为 GKE 自动扩缩和调度设置节点配置。您可以在任何运行 GKE 1.33.3-gke.1392000 版或更高版本的 Autopilot 或 Standard 集群中按照本部分中的步骤操作。

如需使用 ComputeClass 在机密 GKE 节点上运行 GPU 工作负载,请按照以下步骤操作:

  1. 将以下 ComputeClass 清单保存为 YAML 文件:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTECLASS_NAME
    spec:
      nodePoolConfig:
        confidentialNodeType: CONFIDENTIAL_COMPUTE_TECHNOLOGY
      priorityDefaults:
        location:
          zones: ['ZONE1','ZONE2']
      priorities:
      - gpu:
          type: GPU_TYPE
          count: GPU_COUNT
          driverVersion: default
        spot: true
      activeMigration:
        optimizeRulePriority: true
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: DoNotScaleUp
    

    替换以下内容:

    • COMPUTECLASS_NAME:ComputeClass 的名称。
    • CONFIDENTIAL_COMPUTE_TECHNOLOGY:要使用的机密计算技术,例如 TDX。选择您要使用的 GPU 支持的技术。

    • ZONE1,ZONE2:要在其中创建节点的可用区的英文逗号分隔列表,例如 ['us-central1-a','us-central1-b']。指定支持您要使用的机密计算技术和机器类型的可用区。如需了解详情,请参阅查看支持的可用区

    • GPU_TYPE:要使用的 GPU 类型,例如 nvidia-h100-80gb

    • GPU_COUNT:要挂接到每个节点的 GPU 数量。为 GPU 类型指定机密虚拟机支持的值。例如,如果您选择 nvidia-h100-80gb GPU 类型,则必须在此字段中指定值 1

  2. 创建 ComputeClass:

    kubectl apply -f PATH_TO_MANIFEST
    

    PATH_TO_MANIFEST 替换为 ComputeClass 清单文件的路径。

  3. 如需在机密 GKE 节点上运行 GPU 工作负载,请在工作负载清单中选择 ComputeClass。例如,将以下选择 ComputeClass 和 GPU 的 Deployment 清单保存为 YAML 文件:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: confidential-gpu-deployment
      labels:
        app: conf-gpu
    spec:
      selector:
        matchLabels:
          app: conf-gpu
      replicas: 1
      template:
        metadata:
          labels:
            app: conf-gpu
        spec:
          nodeSelector:
            cloud.google.com/compute-class: COMPUTECLASS_NAME
          containers:
          - name: example-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            resources:
              limits:
                cpu: "4"
                memory: "16Gi"
                nvidia.com/gpu: GPU_REQUEST
              requests:
                cpu: "4"
                memory: "16Gi"
    

    替换以下内容:

    • COMPUTECLASS_NAME:您创建的 ComputeClass 的名称。
    • GPU_REQUEST:要在容器中使用的 GPU 数量。指定一个小于或等于 ComputeClass 的 gpu.count 字段中指定的值。
  4. 创建 Deployment:

    kubectl apply -f PATH_TO_DEPLOYMENT_MANIFEST
    

    PATH_TO_DEPLOYMENT_MANIFEST 替换为 Deployment 清单的路径。

创建 GPU 工作负载时,GKE 会使用 ComputeClass 中的配置创建挂接了 GPU 的机密 GKE 节点。

在 GKE Standard 中手动配置机密 GKE 节点

您可以在 Standard 模式集群或节点池中的机密 GKE 节点上运行 GPU 工作负载。

在新 Standard 集群中启用机密 GKE 节点

您可以为整个 Standard 集群启用机密 GKE 节点,以便您创建的每个 GPU 节点池都使用相同的机密计算技术。创建使用机密 GKE 节点来运行 GPU 工作负载的新 Standard 模式集群时,请确保指定以下集群设置:

  • 位置:支持 NVIDIA 机密计算的区域或可用区。 如需了解详情,请参阅查看支持的区域
  • 机密计算类型:支持 GPU 的机密计算技术。如需了解详情,请参阅受支持的配置
  • 集群版本:以下版本之一,具体取决于您要如何安装 GPU 驱动程序:

    • 手动 GPU 驱动程序安装:1.32.2-gke.1297000 或更高版本。
    • 自动 GPU 驱动程序安装:1.33.3-gke.1392000 或更高版本。

您可以视需要为 GKE 在集群中创建的默认节点池配置 GPU。不过,我们建议您为 GPU 使用单独的节点池,以便集群中至少有一个节点池可以运行任何工作负载。

如需了解详情,请参阅在 Standard 集群上启用机密 GKE 节点

在 Standard 节点池中将机密 GKE 节点与 GPU 搭配使用

如果您的集群未启用机密 GKE 节点,您可以在特定的新 GPU 节点池或现有 GPU 节点池中启用机密 GKE 节点。控制平面和节点池必须满足可用性部分中的要求。配置节点池时,您可以选择自动或手动安装 GPU 驱动程序。

  • 如需创建使用机密 GKE 节点的新 GPU 节点池,请选择以下其中一个选项:

    控制台

    1. 在 Google Cloud 控制台中,前往 Kubernetes 集群页面:

      转到 Kubernetes 集群

    2. 点击要修改的 Standard 模式集群的名称。

    3. 点击节点标签页。

    4. 点击 创建由用户管理的节点池添加节点池页面会打开。

    5. 节点池详情窗格中,执行以下操作:

      1. 选择指定节点位置
      2. 仅选择可用性部分中列出的受支持的可用区。
      3. 确保控制平面版本是可用性部分中列出的版本之一。
    6. 在导航菜单中,点击节点

    7. 配置节点设置窗格中,执行以下操作:

      1. 机器配置部分中,点击 GPU
      2. GPU 类型菜单中,选择机密计算支持的 GPU 类型。
      3. GPU 数量菜单中,选择要附加到每个节点的 GPU 数量。选择所选 GPU 类型支持的值。例如,如果您选择 NVIDIA H100 (80 GB) GPU,请选择 1
      4. 确保未选择启用 GPU 共享
      5. GPU 驱动程序安装部分中,选择以下选项之一:

        • 由 Google 管理:GKE 会自动安装驱动程序。如果您选择此选项,请在版本下拉列表中选择以下驱动程序版本之一:

          • 默认:为节点 GKE 版本安装默认驱动程序版本。需要 GKE 1.33.3-gke.1392000 版或更高版本。
          • 最新:为节点 GKE 版本安装最新驱动程序版本。需要 GKE 1.33.3-gke.1392000 版或更高版本。
        • 用户管理:跳过自动驱动程序安装。如果您选择此选项,则必须手动安装兼容的 GPU 驱动程序。 需要 1.32.2-gke.1297000 或更高版本。

      6. 机器类型部分中,确保机器类型是保密虚拟机支持的 GPU 机器类型,并且与您选择的 GPU 类型相符。

      7. 选择在 Spot 虚拟机上启用节点配置启用已排队的预配的灵活启动虚拟机

    8. 准备好创建节点池后,点击创建

    gcloud

    您可以使用启用已排队的预配的灵活启动虚拟机创建在 Spot 虚拟机上运行机密 GKE 节点的 GPU 节点池

    • 创建在 Spot 虚拟机上运行机密 GKE 节点的 GPU 节点池:

      gcloud container node-pools create NODE_POOL_NAME \
          --cluster=CLUSTER_NAME \
          --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY \
          --location=LOCATION \
          --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \
          --spot \
          --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=DRIVER_VERSION \
          --machine-type=MACHINE_TYPE
      

      替换以下内容:

      • NODE_POOL_NAME:新节点池的名称。
      • CLUSTER_NAME:现有集群的名称。
      • CONFIDENTIAL_COMPUTE_TECHNOLOGY:要使用的机密计算技术,例如 TDX。选择您要使用的 GPU 支持的技术。
      • LOCATION:新节点池的位置。 相应位置必须支持在机密 GKE 节点中使用 GPU。
      • NODE_LOCATION1,NODE_LOCATION2,...:要在其中运行节点的可用区的逗号分隔列表。指定支持您要使用的机密计算技术和机器类型的可用区。如需了解详情,请参阅查看支持的区域
      • GPU_TYPE:要使用的 GPU 类型,例如 nvidia-h100-80gb
      • GPU_COUNT:要挂接到每个节点的 GPU 数量。为 GPU 类型指定机密虚拟机支持的值。例如,如果您选择 nvidia-h100-80gb GPU 类型,则必须在此字段中指定值 1

      • DRIVER_VERSION:要安装的 GPU 驱动程序版本。请指定以下某个值:

        • default:为节点 GKE 版本安装默认驱动程序版本。需要 GKE 1.33.3-gke.1392000 版或更高版本。
        • latest:为节点 GKE 版本安装最新驱动程序版本。需要 GKE 1.33.3-gke.1392000 版或更高版本。
        • disabled:跳过自动驱动程序安装。如果您指定此值,则必须手动安装兼容的 GPU 驱动程序。 需要 1.32.2-gke.1297000 或更高版本。
      • MACHINE_TYPE:要用于节点的机器类型。指定机密虚拟机支持的 GPU 机器类型,以用于所选的 GPU 类型。
    • 使用启用已排队的预配的灵活启动虚拟机创建一个运行机密 GKE 节点的 GPU 节点池:

      gcloud container node-pools create NODE_POOL_NAME \
          --cluster=CLUSTER_NAME \
          --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \
          --machine-type=MACHINE_TYPE \
          --confidential-node-type=CONFIDENTIAL_COMPUTE_TECHNOLOGY \
          --location=LOCATION \
          --flex-start --enable-queued-provisioning \
          --enable-autoscaling --num-nodes=0 --total-max-nodes=TOTAL_MAX_NODES \
          --location-policy=ANY --reservation-affinity=none --no-enable-autorepair \
          --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=DRIVER_VERSION
      

      TOTAL_MAX_NODES 替换为节点池可以自动扩缩到的节点数上限。

      如需详细了解灵活启动(带已排队的预配)中的配置选项,请参阅通过灵活启动(带已排队的预配)运行大规模工作负载

  • 如需更新现有节点池以使用机密计算,请参阅更新现有节点池

手动安装支持机密 GKE 节点的 GPU 驱动程序

如果您在创建或更新节点池时未启用自动驱动程序安装,则必须手动安装支持机密 GKE 节点的 GPU 驱动程序。

此更改需要重新创建节点,这可能会导致正在运行的工作负载中断。如需详细了解此特定更改,请在使用节点升级策略(而不遵循维护政策)重新创建节点的手动更改表格中找到相应的行。如需详细了解节点更新,请参阅规划节点更新中断

如需了解相关说明,请参阅手动安装 NVIDIA GPU 驱动程序中的“COS”标签页。

问题排查

如需了解问题排查信息,请参阅排查 GKE 中的 GPU 问题

后续步骤