启动NPU-Exporter

约束限制

操作步骤

NPU-Exporter支持两种安装方式,用户可根据实际情况选择其中一种进行安装。该组件仅提供HTTP服务,如需使用更为安全的HTTPS服务,请自行修改源码进行适配。

容器化方式运行

  1. 以root用户登录各计算节点,并执行以下命令,查看NPU-Exporter镜像和版本号是否正确。

    docker images | grep npu-exporter

    示例如下:

    root@ubuntu:~# docker images|grep npu-exporter 
    npu-exporter                         v5.0.RC1              20185c45f1bc        About an hour ago         90.1MB
    • 是,执行2
    • 否,请参见制作镜像,完成镜像制作和分发。

  2. 将软件包中获取的yaml文件拷贝到K8s管理节点上。
  3. 如果使用默认的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
    ...

  4. 如不修改组件的其他启动参数,可跳过本步骤。否则,请根据实际情况修改yaml文件中NPU-Exporter的启动参数。启动参数如表1所示,也可执行./npu-exporter -h查看参数说明。
  5. 执行以下命令,启动NPU-Exporter。

    kubectl apply -f npu-exporter-v{version}.yaml
    • K8s集群中使用了Atlas 200I Soc A1 核心板节点,执行以下命令。
      kubectl apply -f npu-exporter-310P-1usoc-v{version}.yaml
    • K8s集群中使用了其他类型节点,执行以下命令。
      kubectl apply -f npu-exporter-v{version}.yaml

    如果K8s集群同时使用了Atlas 200I SoC A1 核心板和其他类型的节点,请分别执行对应命令。

    启动示例如下,出现Running表示组件启动成功:
    root@ubuntu:/home/ascend-npu-exporter# kubectl apply -f npu-exporter-v5.0.RC1.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容器中。

二进制方式运行

NPU-Exporter组件以容器化方式运行时需使用特权容器、root用户和挂载了docker-shim或Containerd的socket文件,如果容器被人恶意利用,有容器逃逸风险。当安全性要求较高时,请直接在物理机上通过二进制方式运行。

  1. 使用root用户登录服务器。
  2. 将软件包上传至服务器的任意目录(如“/home/ascend-npu-exporter”)并进行解压操作。
  3. 执行以下命令,创建npu-exporter.service文件。

    vim /home/ascend-npu-exporter/npu-exporter.service

  4. 参考如下内容,写入npu-exporter.service文件中。

    [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

  5. NPU-Exporter默认情况只侦听127.0.0.1,可通过修改的启动参数“-ip”“npu-exporter.service”文件的“ExecStart”字段修改需要侦听的IP地址。

    ...
    [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
    ...

  6. 如果部署节点不为Atlas 200I SoC A1 核心板,可跳过该步骤。否则,需要在所有该类型节点上将hwMindX用户加入到HwBaseUser、HwDmUser用户组中。可执行如下命令进行操作:

    usermod -a -G HwBaseUser hwMindX
    usermod -a -G HwDmUser hwMindX

  7. 依次执行以下命令,启用NPU-Exporter服务。

    cd /home/ascend-npu-exporter
    cp npu-exporter /usr/local/bin
    cp npu-exporter.service /etc/systemd/system
    chattr +i /etc/systemd/system/npu-exporter.service
    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
    systemctl restart npu-exporter

参数说明

表1 NPU-Exporter启动参数

参数

类型

默认值

说明

-port

int

8082

侦听端口,范围1025~40000。

-updateTime

int

5

信息更新周期1~60秒。如果设置的时间过长,一些生存时间小于更新周期的容器可能无法上报。

-ip

string

参数无默认值,必须配置。

侦听IP地址,在多网卡主机上不建议配置成0.0.0.0。

-version

bool

false

打印程序版本号。

-concurrency

int

5

HTTP服务的限流大小,默认5个并发,取值范围为[1,512]。

-logLevel

int

0

日志级别:

  • -1:debug
  • 0:info
  • 1:warning
  • 2:error
  • 3:critical

-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

设置容器运行时类型。

  • 设置为“docker”表示当前环境使用Docker作为容器运行时。
  • 设置为“containerd”表示当前环境使用Containerd作为容器运行时。

-containerd

string

unix:///var/run/docker/containerd/docker-containerd.sock

unix:///run/containerd/containerd.sock

containerd daemon进程endpoint,用于与Containerd通信。

  • 若containerMode=docker,则默认值为/var/run/docker/containerd/docker-containerd.sock;连接失败后,自动尝试连接:unix:///run/containerd/containerd.sock。
  • 若containerMode=containerd,则默认值为/run/containerd/containerd.sock。

一般情况下使用默认值即可。若用户自行修改了Containerd的sock文件路径则需要进行相应路径的修改。

可通过ps aux | grep containerd命令查询Containerd的sock文件路径是否修改。

-endpoint

string

unix:///var/run/dockershim.sock

unix:///run/containerd/containerd.sock

CRI server的sock地址:

  • 若containerMode=docker,将连接到dockershim获取容器列表,默认值/var/run/dockershim.sock;
  • 若containerMode=containerd,默认值/run/containerd/containerd.sock。

一般情况下使用默认值即可,除非用户自行修改了dockershim或者Containerd的sock文件路径。

-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或者-help

不涉及

显示帮助信息。