启动NPU-Exporter
约束限制
- NPU-Exporter会周期性调用NPU驱动的相关接口以检测NPU状态。如果要升级驱动,请先停止NPU-Exporter。
- NPU-Exporter调用的DCMI动态库及其所有父目录,需要满足属主为root,其他属主程序无法运行;同时,这些文件及其目录需满足group和other不具备写权限。
- DCMI动态库路径深度必须小于20。
- 如果通过设置LD_LIBRARY_PATH设置动态库路径,LD_LIBRARY_PATH环境变量总长度不能超过1024。
- Atlas 200I Soc A1 核心板节点上使用容器化部署NPU-Exporter,需要配置多容器共享模式,具体请参考《Atlas 200I SoC A1 核心板 NPU驱动和固件安装指南》。
操作步骤
NPU-Exporter支持两种安装方式,用户可根据实际情况选择其中一种进行安装。
二进制方式运行
NPU-Exporter组件需使用特权容器、root用户和挂载了docker-shim或containerd的socket文件运行,如果容器被人恶意利用,有容器逃逸风险。建议导入证书后,直接在物理机上通过二进制服务启动。
- 使用root用户登录服务器并将软件包上传到组件安装服务器的任意目录(如“/home/ascend-npu-exporter”)并解压。
- 参考如下内容,创建“npu-exporter.service”文件,放入软件包解压目录“/home/ascend-npu-exporter”。
[Unit] Description=Ascend npu exporter Documentation=hiascend.com [Service] ExecStart=/bin/bash -c "/usr/local/bin/npu-exporter -ip=127.0.0.1 -port=8082 -logFile=/var/log/mindx-dl/npu-exporter/npu-exporter.log>/dev/null 2>&1 &" Restart=always RestartSec=2 KillMode=process Environment="LD_LIBRARY_PATH=/usr/local/kmc" Environment="GOGC=50" Environment="GOMAXPROCS=2" Environment="GODEBUG=madvdontneed=1" Type=forking User=hwMindX Group=hwMindX [Install] WantedBy=multi-user.target
- NPU-Exporter默认情况只侦听127.0.0.1,并且默认是提供HTTPS服务,如果之前未导入HTTPS证书,则需修改启动参数,使组件以HTTP方式启动。可修改的启动参数请参考表1,然后自行修改“npu-exporter.service”的“ExecStart”字段。
... [Service] ExecStart=/bin/bash -c "/usr/local/bin/npu-exporter -ip=127.0.0.1 -port=8082 -logFile=/var/log/mindx-dl/npu-exporter/npu-exporter.log &" Restart=always RestartSec=2 ...
- 如果部署节点不为Atlas 200I Soc A1 核心板,可跳过该步骤。否则,需要在所有该类型节点上将hwMindX用户加入到HwBaseUser、HwDmUser用户组中。可执行如下命令:
usermod -a -G HwBaseUser hwMindX usermod -a -G HwDmUser hwMindX
- 执行以下命令启用NPU-Exporter服务。
cd /home/ascend-npu-exporter mkdir /usr/local/kmc cp -r lib/* /usr/local/kmc cp npu-exporter /usr/local/bin cp npu-exporter.service /etc/systemd/system chattr +i /etc/systemd/system/npu-exporter.service chmod 444 /usr/local/kmc/* chmod 755 /usr/local/kmc chmod 500 /usr/local/bin/npu-exporter chown hwMindX:hwMindX /usr/local/bin/npu-exporter chattr +i /usr/local/bin/npu-exporter systemctl enable npu-exporter systemctl start npu-exporter
- 如果需要获取容器相关指标,NPU-Exporter需要临时提权以便于和CRI和OCI的socket建立连接,需要执行以下命令。
chattr -i /usr/local/bin/npu-exporter setcap cap_setuid+ep /usr/local/bin/npu-exporter chattr +i /usr/local/bin/npu-exporter tee /etc/ld.so.conf.d/ascend_dl_so.conf <<- EOF /usr/local/kmc EOF ldconfig systemctl restart npu-exporter
- 加密组件依赖的动态库文件lib目录中提供了libcrypto.so动态库,在某些环境下可能会与系统自带库冲突,如果执行安装过程出现了包含openssl相关的错误,请参见常见故障处理解决。
- 如果需要获取容器相关指标,NPU-Exporter需要临时提权以便于和CRI和OCI的socket建立连接,需要执行以下命令。
容器化方式运行
- 以root用户登录各计算节点,并执行以下命令,查看NPU-Exporter镜像和版本号是否正确。
- 将软件包中获取的yaml文件拷贝到K8s管理节点上。
- NPU-Exporter默认提供HTTPS服务,如果使用HTTPS服务启动,可跳过本步骤。如果之前未导入HTTPS证书,需要参考以下方式进行修改,使得组件以HTTP方式启动。
- Atlas 200I Soc A1 核心板节点。修改启动脚本“run_for_310P_1usoc.sh”中NPU-Exporter的启动参数,将“-enableHTTP”修改为“true”。
... /usr/local/bin/npu-exporter -port=8082 -ip=0.0.0.0 -updateTime=5 -enableHTTP=true -logFile=/var/log/mindx-dl/npu-exporter/npu-exporter.log -logLevel=0 -containerMode=docker -endpoint=/run/dockershim.sock -containerd=/run/docker/containerd/containerd.sock
修改完后需在Atlas 200I Soc A1 核心板的所有节点上重新制作镜像或者将本节点镜像重新制作后分发到其余Atlas 200I Soc A1 核心板节点。
此外,还需要将npu-exporter-310P-1usoc-*.yaml中加粗的内容删除,如下所示。
apiVersion: apps/v1 kind: DaemonSet metadata: name: npu-exporter-310p-1usoc namespace: npu-exporter spec: selector: matchLabels: app: npu-exporter ... spec: ... volumeMounts: ... - name: kmckeystore # 以下加粗内容需要删除 mountPath: /etc/mindx-dl/kmc_primary_store - name: kmckeybak mountPath: /etc/mindx-dl/.config - name: kmc-exporter mountPath: /etc/mindx-dl/npu-exporter ... volumes: ... - name: kmckeystore hostPath: path: /etc/mindx-dl/kmc_primary_store type: Directory - name: kmckeybak hostPath: path: /etc/mindx-dl/.config type: Directory - name: kmc-exporter hostPath: path: /etc/mindx-dl/npu-exporter type: Directory ...
- 其他类型节点。修改“npu-exporter-*.yaml”文件中NPU-Exporter的启动参数,增加“-enableHTTP=true”,示例如下。
... command: [ "/bin/bash", "-c", "--"] args: [ "umask 027;npu-exporter -port=8082 -ip=0.0.0.0 -updateTime=5 -enableHTTP=true -logFile=/var/log/mindx-dl/npu-exporter/npu-exporter.log -logLevel=0 -containerMode=containerd" ] ....
此外,还需要将“npu-exporter-*.yaml”中加粗的如下内容删除,如下所示。
apiVersion: apps/v1 kind: DaemonSet metadata: name: npu-exporter namespace: npu-exporter spec: selector: matchLabels: app: npu-exporter ... spec: ... volumeMounts: ... - name: kmckeystore # 以下加粗内容需要删除 mountPath: /etc/mindx-dl/kmc_primary_store - name: kmckeybak mountPath: /etc/mindx-dl/.config - name: kmc-exporter mountPath: /etc/mindx-dl/npu-exporter ... volumes: ... - name: kmckeystore hostPath: path: /etc/mindx-dl/kmc_primary_store type: Directory - name: kmckeybak hostPath: path: /etc/mindx-dl/.config type: Directory - name: kmc-exporter hostPath: path: /etc/mindx-dl/npu-exporter type: Directory ...
- Atlas 200I Soc A1 核心板节点。
- 如果使用默认的NPU-Exporter启动参数“-containerMode=docker”,可跳过本步骤。如果将NPU-Exporter的启动参数设置为“-containerMode=containerd”时,需要将yaml中如下加粗的内容删除。
apiVersion: apps/v1 kind: DaemonSet metadata: name: npu-exporter namespace: npu-exporter spec: selector: matchLabels: app: npu-exporter ... spec: ... volumeMounts: ... - name: docker-shim # delete when only use containerd # 以下加粗内容需要删除 mountPath: /var/run/dockershim.sock readOnly: true - name: docker # delete when only use containerd mountPath: /var/run/docker readOnly: true ... volumes: ... - name: docker-shim # delete when only use containerd hostPath: path: /var/run/dockershim.sock - name: docker # delete when only use containerd hostPath: path: /var/run/docker ...
- 如不修改组件的其他启动参数,可跳过本步骤。否则,请根据实际情况修改yaml文件中NPU-Exporter的启动参数。启动参数如表1所示,也可执行./npu-exporter -h查看参数说明。
- 执行以下命令,启动NPU-Exporter。
kubectl apply -f npu-exporter-*.yaml
- K8s集群中使用了Atlas 200I Soc A1 核心板节点,执行
kubectl apply -f npu-exporter-310P-1usoc-*.yaml
- K8s集群中使用了其他类型节点,执行
kubectl apply -f npu-exporter-*.yaml
如果K8s集群同时使用了Atlas 200I Soc A1 核心板和其他类型的节点,请分别执行对应命令。
启动示例如下所示:root@ubuntu:/home/ascend-npu-exporter# kubectl apply -f npu-exporter-v3.0.0.yaml namespace/npu-exporter unchanged networkpolicy.networking.K8s.io/exporter-network-policy unchanged daemonset.apps/npu-exporter created root@ubuntu:/home/ascend-npu-exporter# kubectl get pod -n npu-exporter NAME READY STATUS RESTARTS AGE ... npu-exporter-hqpxl 1/1 Running 0 11s ...
NPU-Exporter的使用对进程环境有要求,以容器形式运行时,请确保“/sys”目录和容器运行时通信socket文件挂载至NPU-Exporter容器中。
- K8s集群中使用了Atlas 200I Soc A1 核心板节点,执行
参数说明
参数 |
类型 |
默认值 |
说明 |
---|---|---|---|
-port |
int |
8082 |
侦听端口,范围1025~40000。 |
-updateTime |
int |
5 |
信息更新周期1~60秒。如果设置的时间过长,一些生存时间小于更新周期的容器可能无法上报。 |
-ip |
string |
无 |
参数无默认值,必须配置。 侦听IP地址,在多网卡主机上不建议配置成0.0.0.0。 |
-enableHTTP |
bool |
false |
是否开启HTTP。 说明:
将该参数设置为“true”时可能存在安全风险,建议保持默认值“false”。 |
-version |
bool |
false |
打印程序版本号。 |
-tlsSuites |
int |
1 |
TLS加密套件配置:
|
-concurrency |
int |
5 |
HTTP/HTTPS服务的限流大小,默认5个并发。范围[1,512]。 |
-logLevel |
int |
0 |
日志级别:
|
-maxAge |
int |
7 |
日志备份时间限制,范围:[7,700],单位:天。 |
-logFile |
string |
/var/log/mindx-dl/npu-exporter/npu-exporter.log |
日志文件。 说明:
单个日志文件超过20 MB时会触发自动转储功能,文件大小上限不支持修改。 |
-maxBackups |
int |
30 |
转储后日志文件保留个数上限,范围:(0,30],单位:个。 |
-containerMode |
string |
docker |
设置容器运行时类型。
|
-containerd |
string |
unix:///var/run/docker/containerd/docker-containerd.sock 或 unix:///run/containerd/containerd.sock |
containerd daemon进程endpoint,用于与Containerd通信。
一般情况下该参数保持默认即可,除非用户自行修改了containerd的sock文件路径,可通过 ps aux | grep containerd 查询。 |
-endpoint |
string |
unix:///var/run/dockershim.sock 或 unix:///run/containerd/containerd.sock |
CRI server的sock地址:
一般情况下该参数保持默认即可,除非用户自行修改了dockershim或者containerd的sock文件路径。 |
-checkInterval |
int |
1 |
检查证书有效的间隔时间,单位天,范围[1,7]。 |
-warningDays |
int |
100 |
证书过期提前打预警日志的时间,单位天,范围[10,365]。 |
-limitIPConn |
int |
5 |
每个IP的TCP限制数[1,128]。 |
-limitTotalConn |
int |
20 |
程序总共的TCP限制数[1,512]。 |
-limitIPReq |
string |
20/1 |
每个IP的请求限制数,20/1标识1秒限制20个请求,“/”两侧最大只支持三位数。 |
-cacheSize |
int |
102400 |
[1,1024000]缓存key的数量限制。 |
-h |
无 |
不涉及 |
显示帮助信息。 |