一、部署在集群内的 Kubernetes 对象
全部部署在 kube-system 命名空间。
| 对象名称 | 类型 | 功能说明 |
| xpu-device-plugin-daemonset | DaemonSet | Device Plugin,发现节点 XPU 设备并将其注册上报至 kubelet,供业务 Pod 申请调度。 |
| xpu-exporter | DaemonSet | XPU 设备指标采集器,暴露标准 Prometheus 格式监控指标。 |
| xpu-rbac-token-gen | DaemonSet | 将 ServiceAccount 的 token 与 ca.crt 同步到节点 XPU 运行时目录,供 XPU 运行时访问集群 API。 |
| xpu-device-plugin | ServiceAccount / ClusterRole / ClusterRoleBinding | Device Plugin 运行所需权限。 |
| xpu-exporter | ServiceAccount / ClusterRole / ClusterRoleBinding | Exporter 运行所需权限。 |
| klx-xpu-serviceaccount / klx-xpu-clusterrole / klx-xpu-binding | ServiceAccount / ClusterRole / ClusterRoleBinding | token 同步组件运行所需权限。 |
二、使用场景
·整卡模式:将整张 XPU 卡作为独占资源分配给业务容器,容器通过申请 kunlunxin.com/xpu 资源使用。适用于训练等算力要求高、无需资源共享的场景。
·设备监控:xpu-exporter 以 DaemonSet 形式运行在每个 XPU 节点上,通过 /var/lib/kubelet/pod-resources/ 获取设备与 Pod 的归属关系,可提供卡、Pod 和容器级别的 XPU 监控指标,供 Prometheus 采集。
三、限制条件
·集群版本:仅支持 Kubernetes 1.16 及以上版本的集群。
·节点架构:仅支持 amd64 架构节点。
·底层环境依赖:组件以 DaemonSet 部署在具有 XPU 设备的节点上,需确保节点已提前安装昆仑芯 XPU 驱动及 XRE 运行时环境。
·节点标签限制:组件仅调度到带有 kunlun-device-enable=enable 标签的节点,未打标签的节点不会部署组件,也不会上报 XPU 资源。
·容器权限:xpu-device-plugin 与 xpu-exporter 容器均以 privileged: true 特权模式运行,用于访问节点 /dev 设备节点与设备管理接口。
·Token 落盘:xpu-rbac-token-gen 会将 ServiceAccount 的 token 与 ca.crt 周期性写入节点宿主机目录 /xpu-runtime/auth,请确保 XPU 节点的宿主机访问受控。
四、权限说明
组件运行需要特定的 Kubernetes RBAC 权限,用于节点 XPU 设备发现与上报、节点状态更新、设备监控指标采集,以及 XPU 运行时的集群访问凭据分发。组件通过自动创建对应的 ServiceAccount、ClusterRole 与 ClusterRoleBinding 赋予各子模块权限。
五、权限场景
| 功能模块 | 涉及对象 | 涉及操作权限 |
| 设备发现与上报(xpu-device-plugin) | nodes、nodes/proxy | get、list、watch、patch |
| 设备发现与上报(xpu-device-plugin) | nodes/status | patch、update |
| 设备发现与上报(xpu-device-plugin) | pods | get、list、watch、update、patch |
| 设备发现与上报(xpu-device-plugin) | events | create、patch |
| 指标采集(xpu-exporter) | nodes、nodes/proxy | get、list、watch |
| 指标采集(xpu-exporter) | nodes/status | patch、update |
| 指标采集(xpu-exporter) | pods | get、list、watch、update、patch |
| 指标采集(xpu-exporter) | events | create、patch |
| 凭据分发(xpu-rbac-token-gen) | nodes、nodes/status、nodes/proxy、pods、events | get、list |
六、权限定义(ClusterRole 完整声明)
# 1. xpu-device-plugin 权限apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: xpu-device-pluginrules: – apiGroups: [""] resources: ["nodes", "nodes/proxy"] verbs: ["get", "list", "watch", "patch"] – apiGroups: [""] resources: ["events"] verbs: ["create", "patch"] – apiGroups: [""] resources: ["pods"] verbs: ["update", "patch", "get", "list", "watch"] – apiGroups: [""] resources: ["nodes/status"] verbs: ["patch", "update"]—# 2. xpu-exporter 权限apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: xpu-exporterrules: – apiGroups: [""] resources: ["nodes", "nodes/proxy"] verbs: ["get", "list", "watch"] – apiGroups: [""] resources: ["events"] verbs: ["create", "patch"] – apiGroups: [""] resources: ["pods"] verbs: ["update", "patch", "get", "list", "watch"] – apiGroups: [""] resources: ["nodes/status"] verbs: ["patch", "update"]—# 3. xpu-rbac-token-gen 权限apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: klx-xpu-clusterrolerules: – apiGroups: [""] resources: ["nodes", "pods", "nodes/status", "events", "nodes/proxy"] verbs: ["get", "list"]
七、组件参数说明
注意:说明:
注意:你可以在安装或更新该组件时,通过配置组件参数或修改 YAML 进行自定义。
八、组件参数选项
| 参数名 | 默认值 | 说明 |
| global.image.host | ccr.ccs.tencentyun.com | 组件镜像仓库地址 |
| config.exporterPort | 9507 | xpu-exporter 暴露的 Prometheus metrics 采集端口 |
| config.logVerbose | 5 | xpu-device-plugin 的日志详细级别(对应 –v) |
| config.memoryUnit | MiB | xpu-device-plugin 上报显存的计量单位 |
| images.devicePlugin.tag | v5.0.2-alpha.3 | xpu-device-plugin 镜像版本 |
| images.exporter.tag | v5.0.3-alpha.6 | xpu_exporter 镜像版本 |
| images.rbacTokenGen.tag | v1.0.0 | xpu-rbac-token-gen 镜像版本 |
| exporter.goMemLimit | 800MiB | xpu-exporter 的 Go 运行时内存上限(GOMEMLIMIT) |
| exporter.resources.requests.cpu | 100m | xpu-exporter CPU 请求量 |
| exporter.resources.requests.memory | 100Mi | xpu-exporter 内存请求量 |
| exporter.resources.limits.cpu | 1000m | xpu-exporter CPU 限制量 |
| exporter.resources.limits.memory | 1Gi | xpu-exporter 内存限制量 |
| nodeSelector | kunlun-device-enable: enable | 组件部署的目标节点选择器 |
九、配置示例
global: image: host: ccr.ccs.tencentyun.comconfig: exporterPort: 9507 logVerbose: 5 memoryUnit: MiBexporter: goMemLimit: 800MiB resources: requests: cpu: 100m memory: 100Mi limits: cpu: 1000m memory: 1GinodeSelector: kunlun-device-enable: enable
十、预留参数(当前版本未生效)
以下参数已在 values.yaml 中声明,但当前 chart 模板尚未引用,配置后不会产生实际效果,请勿依赖:
| 参数名 | 默认值 | 规划用途 |
| config.logLevel | info | 日志级别 |
| devicePlugin.enableSriov | false | 是否启用 vXPU(SR-IOV)虚拟化 |
| devicePlugin.sriovNumVfs | 0 | vXPU 数量 |
| devicePlugin.reconfigVxpu | false | 是否允许重新配置 vXPU 数量 |
| devicePlugin.enableXpuShare | false | 是否启用 XPU 共享模式 |
| devicePlugin.useDetailResName | false | 是否按型号上报资源名(如 kunlunxin.com/R200) |
| devicePlugin.customizedResourceName | "" | 自定义资源名(留空使用默认 kunlunxin.com/xpu) |
| tolerations | 见 values.yaml | 容忍度(当前 DaemonSet 模板中为硬编码) |
十一、使用示例
为节点打上组件调度标签:
kubectl label node <节点名> kunlun-device-enable=enable
业务 Pod 申请 XPU 资源:
apiVersion: v1kind: Podmetadata: name: xpu-demospec: nodeSelector: kunlun-device-enable: enable containers: – name: demo image: <你的业务镜像> resources: limits: kunlunxin.com/xpu: 1
查看节点可分配的 XPU 资源:
kubectl describe node <节点名> | grep kunlunxin.com/xpu