GKE GPU分时调度问题:工作负载无法调度至启用节点
解决GKE GPU分时调度Pod调度失败问题
核心问题
GKE节点不会自动生成cloud.google.com/gke-max-shared-clients-per-gpu和cloud.google.com/gke-gpu-sharing-strategy这两个标签,因此Pod通过这两个标签做硬匹配时,必然会出现节点不匹配的情况。
具体解决方案
1. 替换nodeSelector为节点亲和性(Node Affinity)
改用存在的节点标签做匹配,同时确保选中启用GPU共享的节点:
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: cloud.google.com/gke-accelerator operator: In values: - nvidia-tesla-t4 - key: cloud.google.com/gke-gpu-sharing-enabled operator: Exists
这个配置会筛选出带T4 GPU且启用了GPU共享的节点,无需指定共享策略和客户端上限——节点池已配置的分时规则会自动应用到Pod上。
2. 验证节点池GPU共享配置
用gcloud命令确认节点池的配置是否正确生效:
gcloud container node-pools describe [你的节点池名称] --cluster [你的集群名称] --zone [集群所在区域]
查看输出中acceleratorConfig.gpuSharingConfig字段,确认sharingStrategy为TIME_SHARING、maxSharedClientsPerGpu为48。
3. 配置正确的GPU资源请求
确保Pod的GPU请求符合共享模式的格式,比如请求1/48个GPU:
resources: requests: nvidia.com/gpu: "0.0208" # 等价于1/48,部分版本支持直接写"1/48" limits: nvidia.com/gpu: "0.0208"
这种分数形式的请求会让Kubernetes识别出这是共享GPU的工作负载,自动调度到对应节点。
4. 放弃使用不存在的标签
GKE的GPU共享策略、最大客户端数属于节点池的配置属性,不会暴露为节点标签,文档中的nodeSelector示例存在误导,实际无需配置这两个标签的匹配规则。
内容的提问来源于stack exchange,提问作者Murcielago
相关产品推荐
相关产品推荐

