You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Kubernetes实现单节点仅运行一个GPU周期性作业?

解决Kubernetes GPU节点单Pod调度问题

针对你需要在单GPU节点上串行调度Job的需求,有以下几种可行方案:

方案1:通过GPU资源请求限制实现调度控制

这是最直接的方式,利用Kubernetes对可调度资源的管理能力,让每个Pod独占节点的GPU资源,从而避免同节点多Pod调度。

在Job的Pod模板中添加GPU资源的请求与限制配置:

apiVersion: batch/v1
kind: Job
metadata:
  name: sample-gpu-job
spec:
  template:
    spec:
      containers:
      - name: gpu-workload
        image: your-target-image:tag
        resources:
          requests:
            nvidia.com/gpu: 1  # 声明需要1个GPU
          limits:
            nvidia.com/gpu: 1  # 限制使用1个GPU
      restartPolicy: OnFailure
  • 前提:节点已部署对应GPU的设备插件(如NVIDIA Device Plugin),确保Kubernetes能识别节点上的GPU资源数量。
  • 效果:由于每个节点仅拥有1个GPU,调度器只会在节点GPU资源空闲时才会调度新的Pod,待前一个Pod完成释放GPU后,才会安排下一个作业。

方案2:使用Pod反亲和性强制单节点单Pod

如果存在GPU资源未被Kubernetes正确识别的场景,可以通过Pod反亲和性规则,强制同一节点仅运行一个GPU作业Pod。

  1. 给所有GPU作业的Pod打上统一标签(如task-type: gpu-job)
  2. 在Pod模板中配置反亲和性规则:
apiVersion: batch/v1
kind: Job
metadata:
  name: sample-gpu-job
spec:
  template:
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: task-type
                operator: In
                values:
                - gpu-job
            topologyKey: kubernetes.io/hostname
      containers:
      - name: gpu-workload
        image: your-target-image:tag
        resources:
          requests:
            nvidia.com/gpu: 1
          limits:
            nvidia.com/gpu: 1
      restartPolicy: OnFailure
  • 原理:requiredDuringSchedulingIgnoredDuringExecution规则会要求新Pod不能调度到已有task-type: gpu-job标签Pod的节点(通过kubernetes.io/hostname匹配节点),从而保证同一节点同一时间只有一个GPU作业Pod。

方案3:CronJob并发控制(针对周期性调度场景)

如果你的作业是通过CronJob周期性触发的,且希望同一个CronJob的实例不并发执行,可以设置concurrencyPolicy:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: periodic-gpu-job
spec:
  schedule: "*/10 * * * *"  # 每10分钟执行一次
  concurrencyPolicy: Forbid  # 前一个实例未完成时,跳过新的调度
  # 若需要替换未完成的实例,可设置为Replace
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: gpu-workload
            image: your-target-image:tag
            resources:
              requests:
                nvidia.com/gpu: 1
              limits:
                nvidia.com/gpu: 1
          restartPolicy: OnFailure
  • 注意:该规则仅作用于同一个CronJob的多个实例,若你有多个不同镜像的CronJob,仍需结合方案1或方案2来控制跨CronJob的Pod调度。

内容的提问来源于stack exchange,提问作者Djangonaut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:15:35