您可以通过在加密的机密 Google Kubernetes Engine 节点上运行工作负载,加密使用中的 GPU 工作负载数据。本页面向安全工程师和运维人员介绍了如何提高加速工作负载(例如 AI/机器学习任务)中的数据的安全性。您应该熟悉以下概念:
在机密 GKE 节点上运行 GPU 工作负载简介
您可以使用以下方法之一为 GPU 工作负载请求机密 GKE 节点:
- 使用 GKE ComputeClass 为 GPU 工作负载自动预配机密 GKE 节点。您可以在 Autopilot 集群和 Standard 集群中使用此方法。如需了解详情,请参阅使用 ComputeClass 在机密 GKE 节点上运行 GPU 工作负载部分。
- 为 Standard 集群或节点池手动配置机密 GKE 节点。如需了解详情,请参阅在 GKE Standard 中手动配置机密 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 |
|
|
| 在 Standard 模式下手动配置 |
|
|
所需的角色
如需获得创建机密 GKE 节点所需的权限,请让您的管理员为您授予 Google Cloud 项目的以下 IAM 角色:
-
创建机密 GKE 节点:Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin) -
部署 GPU 工作负载:
Kubernetes Engine Developer (
roles/container.developer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
使用 ComputeClasses 运行机密 GPU 工作负载
您可以在 ComputeClass 中定义机密 GKE 节点配置。ComputeClass 是一种 Kubernetes 自定义资源,可用于以声明方式为 GKE 自动扩缩和调度设置节点配置。您可以在任何运行 GKE 1.33.3-gke.1392000 版或更高版本的 Autopilot 或 Standard 集群中按照本部分中的步骤操作。
如需使用 ComputeClass 在机密 GKE 节点上运行 GPU 工作负载,请按照以下步骤操作:
将以下 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-80gbGPU 类型,则必须在此字段中指定值1。
创建 ComputeClass:
kubectl apply -f PATH_TO_MANIFEST将
PATH_TO_MANIFEST替换为 ComputeClass 清单文件的路径。如需在机密 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字段中指定的值。
创建 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 节点池,请选择以下其中一个选项:
控制台
在 Google Cloud 控制台中,前往 Kubernetes 集群页面:
点击要修改的 Standard 模式集群的名称。
点击节点标签页。
点击 创建由用户管理的节点池。添加节点池页面会打开。
在节点池详情窗格中,执行以下操作:
在导航菜单中,点击节点。
在配置节点设置窗格中,执行以下操作:
- 在机器配置部分中,点击 GPU。
- 在 GPU 类型菜单中,选择机密计算支持的 GPU 类型。
- 在 GPU 数量菜单中,选择要附加到每个节点的 GPU 数量。选择所选 GPU 类型支持的值。例如,如果您选择 NVIDIA H100 (80 GB) GPU,请选择 1。
- 确保未选择启用 GPU 共享。
在 GPU 驱动程序安装部分中,选择以下选项之一:
由 Google 管理:GKE 会自动安装驱动程序。如果您选择此选项,请在版本下拉列表中选择以下驱动程序版本之一:
- 默认:为节点 GKE 版本安装默认驱动程序版本。需要 GKE 1.33.3-gke.1392000 版或更高版本。
- 最新:为节点 GKE 版本安装最新驱动程序版本。需要 GKE 1.33.3-gke.1392000 版或更高版本。
用户管理:跳过自动驱动程序安装。如果您选择此选项,则必须手动安装兼容的 GPU 驱动程序。 需要 1.32.2-gke.1297000 或更高版本。
在机器类型部分中,确保机器类型是保密虚拟机支持的 GPU 机器类型,并且与您选择的 GPU 类型相符。
选择在 Spot 虚拟机上启用节点或配置启用已排队的预配的灵活启动虚拟机。
准备好创建节点池后,点击创建。
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-80gbGPU 类型,则必须在此字段中指定值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 问题。