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

在K8s部署JupyterHub:如何按用户分配CPU/GPU节点池?

实现JupyterHub在K8s上的CPU/GPU节点池按需分配

完全可以基于用户凭证、用户组或自定义规则实现这种节点池分配逻辑,以下是几种落地方案:

1. 基于用户/用户组的Profile权限控制

通过配置多环境Profile,限制仅指定用户/组能访问GPU节点池,其余用户默认使用CPU节点池:

singleuser:
  profileList:
    - display_name: "默认CPU环境"
      description: "通用CPU计算节点"
      kubespawner_override:
        node_selector:
          node-role.kubernetes.io/cpu: "true"
      default: true
    - display_name: "GPU加速环境"
      description: "仅限数据科学家使用的GPU节点"
      kubespawner_override:
        node_selector:
          node-role.kubernetes.io/gpu: "true"
      access:
        users:
          - zhangsan
          - lisi
        groups:
          - data-scientists

前置操作:先给K8s节点打标签——CPU节点打node-role.kubernetes.io/cpu: "true",GPU节点打node-role.kubernetes.io/gpu: "true"。

2. 自动分配:基于用户属性的预生成钩子

如果不需要用户手动选择环境,可通过pre_spawn_hook读取用户凭证或组信息,自动设置节点选择器:

singleuser:
  kubespawner_override:
    node_selector:
      node-role.kubernetes.io/cpu: "true"
  lifecycleHooks:
    preSpawn:
      exec:
        command:
          - python
          - -c
          - |
            from kubespawner import KubeSpawner
            def auto_assign_node(spawner: KubeSpawner):
                # 判断用户是否属于目标组
                if 'data-scientists' in spawner.user.groups:
                    spawner.node_selector = {"node-role.kubernetes.io/gpu": "true"}
                return
            auto_assign_node(spawner)

3. 节点污点+容忍度强化隔离

给GPU节点添加污点,阻止普通Pod调度,再给特定用户的Pod添加容忍度:

  1. 给GPU节点打污点:
kubectl taint nodes <gpu-node-name> dedicated=gpu:NoSchedule
  1. 在JupyterHub配置中设置:
singleuser:
  profileList:
    - default: true
      kubespawner_override:
        tolerations: []
        node_selector:
          node-role.kubernetes.io/cpu: "true"
    - access:
        groups: ["data-scientists"]
      kubespawner_override:
        tolerations:
          - key: "dedicated"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
        node_selector:
          node-role.kubernetes.io/gpu: "true"

4. 基于用户凭证属性的动态判断

如果用户认证系统(如OIDC、LDAP)返回的凭证中包含身份标记(如is_data_scientist: true),可在钩子中读取该属性实现自动分配:

def auto_assign_node(spawner):
    user_info = spawner.user.auth_state.get('userinfo', {})
    if user_info.get('is_data_scientist'):
        spawner.node_selector = {"node-role.kubernetes.io/gpu": "true"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:06:07