一、部署在集群内的 Kubernetes 对象
| 对象名称 | 类型 | 功能说明 | 所属 Namespaces |
| dcu-label-node | DaemonSet | 自动检测并标记集群中包含海光 DCU 设备的节点。 | kube-system |
| dcu-device-plugin | DaemonSet | 基础的 Device Plugin,负责将 DCU 整卡资源注册上报至 kubelet(仅在整卡模式下生效)。 | kube-system |
| dcu-device-plugin-hami | DaemonSet | 基于 HAMi 的 Device Plugin,负责 vDCU 虚拟算力的资源切分与注册(仅在 vDCU 模式下生效)。 | kube-system |
| vdcu-admission-webhook | Deployment | 拦截器,自动向业务 Pod 注入 vDCU 相关的环境变量与资源配置。 | kube-system |
| vdcu-scheduler-plugin | Deployment | 自定义调度器,支持通过 binpack 或 spread 策略进行 vDCU 节点和卡级别的资源调度。 | kube-system |
| dcu-exporter | DaemonSet | DCU 设备指标采集器,暴露标准的 Prometheus 格式监控指标。 | kube-system |
二、使用场景
根据集群内不同业务需求,DCU 组件支持以下运行模式及相应的使用场景:
·整卡模式(full):将整张 DCU 卡作为独占资源分配给业务容器使用,默认调度到集群内所有 DCU 节点。适用于对算力要求极高、不需要资源共享的单一应用场景。
·虚拟化模式(vdcu):基于 HAMi 实现,将单张 DCU 卡虚拟化为多个 vDCU,支持多个容器共享同一张 DCU 卡的算力与显存。适用于推理服务、轻量级训练等需要细粒度分配 GPU 资源的场景,以提高资源利用率。
三、限制条件
·集群版本:仅支持 Kubernetes 1.16 及以上版本的集群。
·底层环境依赖:组件以 DaemonSet 方式部署在具有 DCU 设备的节点上,需确保相关节点已提前安装海光 DCU 驱动及 HyHAL 运行时环境。
·虚拟化模式节点标签限制:当使用虚拟化模式(vdcu)时,请务必为节点打上正确的标签以区分模式。若节点被打上 dcu=on,该节点将使用 vDCU 模式。未打标签的节点可能无法被正确调度。
四、权限说明
海光 DCU 组件在集群内运行需要特定的 Kubernetes RBAC 权限,以实现节点 DCU 设备的自动打标、vDCU 资源的准入注入、调度控制以及设备监控指标采集。组件通过自动创建对应的 ClusterRole 与 ClusterRoleBinding 来赋予各子模块相应权限。
五、权限场景
| 功能模块 | 涉及对象 | 涉及操作权限 |
| 节点自动打标(dcu-label-node) | nodes | get、list、watch、update |
| 指标采集(dcu-exporter) | pods | * (全量权限) |
| 准入控制(vdcu-admission-webhook) | pods、deployments、daemonsets、nodes 等负载资源;mutatingwebhookconfigurations 等 | * (全量负载权限);get、list、create、update、delete、patch、watch 等 |
| 资源调度(vdcu-scheduler-plugin) | pods、nodes、endpoints、bindings、events、namespaces 等 | get、list、watch、update、patch、create、delete 等 |
六、权限定义
海光 DCU 组件各核心模块完整的 ClusterRole 权限声明整理如下:
# 1. dcu-label-node 权限apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: cr-node-labellerrules: – apiGroups: [""] resources: ["nodes"] verbs: ["watch", "get", "list", "update"]—# 2. dcu-exporter 权限apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: dcu-exporterrules: – apiGroups: ["", "storage.k8s.io"] resources: ["pods"] verbs: ["*"]—# 3. vdcu-admission-webhook 权限(仅 vdcu 模式)apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: admission-webhook-dcu-crrules: – apiGroups: ["sugon.com"] resources: ["*"] verbs: ["*"] – apiGroups: ["", "apps", "autoscaling", "storage.k8s.io"] resources: ["pods", "events", "deployments", "daemonsets", "replicasets", "statefulsets", "pvc", "persistentvolumes", "persistentvolumeclaims", "storageclasses", "nodes", "secrets"] verbs: ["*"] – apiGroups: ["admissionregistration.k8s.io"] resources: ["mutatingwebhookconfigurations"] verbs: ["get", "list", "create", "delete", "update", "patch", "watch"]—# 4. vdcu-scheduler-plugin 权限(仅 vdcu 模式)apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: vdcu-scheduler-pluginrules: – apiGroups: [""] resources: ["endpoints", "events", "nodes", "pods", "bindings", "pods/binding", "pods/status", "replicationcontrollers", "services", "persistentvolumeclaims", "persistentvolumes", "configmaps", "namespaces"] verbs: ["create", "delete", "get", "list", "patch", "update", "watch"] – apiGroups: ["apps", "extensions", "policy"] resources: ["replicasets", "statefulsets", "poddisruptionbudgets"] verbs: ["get", "list", "watch"] – apiGroups: ["storage.k8s.io"] resources: ["storageclasses", "csinodes", "csistoragecapacities", "csidrivers"] verbs: ["get", "list", "watch"] – apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["create", "get", "list", "update"] – apiGroups: ["events.k8s.io"] resources: ["events"] verbs: ["create", "patch", "update"] – apiGroups: ["admissionregistration.k8s.io"] resources: ["mutatingwebhookconfigurations"] verbs: ["delete", "get"]
七、组件参数说明
你可以在安装或更新该组件时,通过配置组件参数或修改 YAML 进行自定义。
八、组件参数选项
| 参数名 | 默认值 | 说明 |
| mode | full | 部署模式。可选值为 full(整卡模式)、vdcu(虚拟 DCU 模式)。 |
| config.exporterPort | 16080 | dcu-exporter 暴露的 Prometheus metrics 采集端口。 |
| config.logThreshold | INFO | 组件输出日志的默认级别。 |
| vdcuScheduler.nodeSchedulerPolicy | binpack | 仅在 vdcu 模式下生效。vDCU 在节点维度的调度策略(binpack 集中式 / spread 打散式)。 |
| vdcuScheduler.gpuSchedulerPolicy | spread | 仅在 vdcu 模式下生效。同一节点上多卡间的 vDCU 调度策略。 |
九、配置示例
global: image: host: shadcccr.ccs.tencentyun.com repo: tkeimages # 指定组件运行模式,例如 vdcu(虚拟 DCU 模式)mode: "vdcu"config: exporterPort: "16080" pulse: "30" logThreshold: "INFO" logVerbose: "2" logOutput: "true"vdcuScheduler: nodeSchedulerPolicy: binpack gpuSchedulerPolicy: spread sleepTime: "0"