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

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

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

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

准备工作

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

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

要求和限制

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

  • 节点必须位于支持 NVIDIA 机密计算的可用区中。 如需了解详情,请参阅查看支持的区域
  • 节点必须仅使用一个 NVIDIA H100 80 GB GPU 和 a3-highgpu-1g 机器类型。
  • 节点必须使用 Intel TDX 机密计算技术。
  • 您必须在节点位置拥有抢占式 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 角色:

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

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

使用 ComputeClass 运行机密 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: TDX
      priorityDefaults:
        location:
          zones: ['ZONE1','ZONE2']
      priorities:
      - gpu:
          type: nvidia-h100-80gb
          count: 1
          driverVersion: default
        spot: true
      activeMigration:
        optimizeRulePriority: true
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: DoNotScaleUp
    

    替换以下内容:

    • COMPUTECLASS_NAME:ComputeClass 的名称。
    • ZONE1,ZONE2:要在其中创建节点的可用区的英文逗号分隔列表,例如 ['us-central1-a','us-central1-b']。指定支持 Intel TDX 机密计算技术的可用区。如需了解详情,请参阅查看支持的可用区
  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: 1
              requests:
                cpu: "4"
                memory: "16Gi"
    

    COMPUTECLASS_NAME 替换为您创建的 ComputeClass 的名称。

  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 工作负载。对于 GPU 工作负载,机密 GKE 节点必须使用 Intel TDX 机密计算技术。

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

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

  • 位置:支持 NVIDIA 机密计算的区域或可用区。 如需了解详情,请参阅查看支持的区域
  • 机密计算类型:Intel TDX
  • 集群版本:以下版本之一,具体取决于您要如何安装 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. 节点池详情窗格中,执行以下操作:

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

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

      1. 机器配置部分中,点击 GPU
      2. GPU 类型菜单中,选择 NVIDIA H100 80GB
      3. 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. 机器类型部分中,确保机器类型为 a3-highgpu-1g

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

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

    gcloud

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

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

      gcloud container node-pools create NODE_POOL_NAME \
          --cluster=CLUSTER_NAME \
          --confidential-node-type=tdx --location=LOCATION \
          --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \
          --spot --accelerator=type=nvidia-h100-80gb,count=1,gpu-driver-version=DRIVER_VERSION \
          --machine-type=a3-highgpu-1g
      

      替换以下内容:

      • NODE_POOL_NAME:新节点池的名称。
      • CLUSTER_NAME:现有集群的名称。
      • LOCATION:新节点池的位置。 相应位置必须支持在机密 GKE 节点中使用 GPU。
      • NODE_LOCATION1,NODE_LOCATION2,...:要在其中运行节点的可用区的逗号分隔列表。这些可用区必须支持使用 NVIDIA 机密计算。如需了解详情,请参阅查看支持的区域
      • 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 或更高版本。

    • 使用启用已排队的预配的灵活启动虚拟机创建一个运行机密 GKE 节点的 GPU 节点池:

      gcloud container node-pools create NODE_POOL_NAME \
          --cluster=CLUSTER_NAME \
          --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \
          --machine-type=a3-highgpu-1g --confidential-node-type=tdx \
          --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=nvidia-h100-80gb,count=1,gpu-driver-version=DRIVER_VERSION
      

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

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

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

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

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

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

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

问题排查

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

后续步骤