简介
组件介绍
昆仑芯 XPU 组件(组件标识:
xpu-gpu)用于在腾讯云容器服务 TKE 集群中管理和调度昆仑芯 XPU 加速卡资源。组件通过自动发现节点上的昆仑芯 XPU(kunlunxin.com/xpu)作为可调度资源来帮助运行需要 XPU 资源的容器;同时自动部署监控 exporter,提供标准 Prometheus 格式的 XPU 设备监控指标。部署在集群内的 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: 9507logVerbose: 5memoryUnit: MiBexporter:goMemLimit: 800MiBresources:requests:cpu: 100mmemory: 100Milimits:cpu: 1000mmemory: 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: enablecontainers:- name: demoimage: <您的业务镜像>resources:limits:kunlunxin.com/xpu: 1
查看节点可分配的 XPU 资源:
kubectl describe node <节点名> | grep kunlunxin.com/xpu