启动NPU-Exporter

约束限制

操作步骤

NPU-Exporter支持两种安装方式,用户可根据实际情况选择其中一种进行安装。

二进制方式运行

NPU-Exporter组件需使用特权容器、root用户和挂载了docker-shim或containerd的socket文件运行,如果容器被人恶意利用,有容器逃逸风险。建议导入证书后,直接在物理机上通过二进制服务启动。

  1. 使用root用户登录服务器并将软件包上传到组件安装服务器的任意目录(如“/home/ascend-npu-exporter”)并解压。
  2. 参考如下内容,创建“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

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

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

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

  5. 执行以下命令启用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相关的错误,请参见常见故障处理解决。

容器化方式运行

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

    docker images | grep npu-exporter

    示例如下:

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

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

  4. 如果使用默认的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
    ...

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

参数说明

表1 NPU-Exporter启动参数

参数

类型

默认值

说明

-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加密套件配置:

  • 0:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • 1:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    说明:

    无效参数值会被重置为默认值,需要配套对应的格式的证书方能生效。

-concurrency

int

5

HTTP/HTTPS服务的限流大小,默认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 查询。

-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文件路径。

-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

不涉及

显示帮助信息。