生成软件包
操作步骤
- 下载ascend-device-plugin.tar.gz文件到本地。
- 通过WinSCP将ascend-device-plugin文件夹上传到服务器任一目录(如“/home/test”)。
- 以root用户登录服务器,进入ascend-device-plugin目录。
cd /home/test/ascend-device-plugin
- 执行以下命令安装最新版本的pkg-config。
apt-get install -y pkg-config
- 执行以下命令,设置环境变量。
export GO111MODULE=on
export GOPROXY=代理地址
export GONOSUMDB=*
- GOPROXY代理地址请根据实际选择,可通过在ascend-device-plugin目录下执行go mod download命令进行检查。
- 若无返回错误信息,则表示代理设置成功。
- 进入ascend-device-plugin目录,执行以下命令,修改yaml文件。
vi ascendplugin.yaml
apiVersion: apps/v1 kind: DaemonSet metadata: name: ascend-device-plugin-daemonset namespace: kube-system spec: selector: matchLabels: name: ascend-device-plugin-ds updateStrategy: type: RollingUpdate template: metadata: annotations: scheduler.alpha.kubernetes.io/critical-pod: "" labels: name: ascend-device-plugin-ds spec: tolerations: - key: CriticalAddonsOnly operator: Exists - key: huawei.com/Ascend910 #资源名称,根据芯片类型设置。 operator: Exists effect: NoSchedule - key: "ascendplugin" operator: "Equal" value: "v2" effect: NoSchedule priorityClassName: "system-node-critical" nodeSelector: accelerator: huawei-Ascend910 #根据芯片类型设置标签名称。 containers: - image: ascend-device-plugin:v1.0.1 #镜像名称及版本号,需要和build_common.sh中保持一致。 name: device-plugin-01 command: [ "/bin/bash", "-c", "--"] args: [ "./build/build_in_docker.sh;ascendplugin --useAscendDocker=${USE_ASCEND_DOCKER}" ] #使用Ascend310,则需要增加--mode=ascend310 securityContext: privileged: true imagePullPolicy: Never volumeMounts: - name: device-plugin mountPath: /var/lib/kubelet/device-plugins - name: hiai-driver mountPath: /usr/local/Ascend/driver #驱动安装目录,用户根据实际填写。 - name: log-path mountPath: /var/log/devicePlugin volumes: - name: device-plugin hostPath: path: /var/lib/kubelet/device-plugins - name: hiai-driver hostPath: path: /usr/local/Ascend/driver #驱动安装目录,用户根据实际填写。 - name: log-path hostPath: path: /var/log/devicePlugin
- 执行以下命令,编辑Dockerfile文件,将镜像修改为查询的镜像名及版本号。
vi /home/test/ascend-device-plugin/Dockerfile
#用户根据实际选择需要使用的带go编译的基础镜像,可通过docker images命令查询。 FROM golang:1.13.11-buster as build #是否使用昇腾Docker,默认为true,请修改为false。 ENV USE_ASCEND_DOCKER false ENV GOPATH /usr/app/ ENV GO111MODULE off ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH #libdrvdsmi_host.so所在目录,Ascend 310和Ascend 910目录不同。 ENV LD_LIBRARY_PATH /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/common RUN mkdir -p /usr/app/src/ascend-device-plugin COPY . /usr/app/src/Ascend-device-plugin WORKDIR /usr/app/src/Ascend-device-plugin
- 进入ascend_device_plugin.pc文件所在目录,执行以下命令,查看以下路径是否正确,根据实际修改。
- Ascend 310目录:ascend-device-plugin/src/plugin/config/config_310
- Ascend 910目录:ascend-device-plugin/src/plugin/config/config_910
vi ascend_device_plugin.pc#Package Information for pkg-config #驱动安装目录,根据实际填写。 prefix=/usr/local/Ascend #dsmi动态库地址,根据实际修改。 libdriver=${prefix}/driver/lib64 #dsmi驱动头文件dsmi_common_interface.h所在目录。 includedir=${prefix}/driver/kernel/inc/driver/ Name: ascend_docker_plugin Description: Ascend device plugin Version: 0.0.1 Libs: -L${libdriver}/ -ldrvdsmi_host Cflags: -I${includedir}
支持修改插件镜像的名称,build目录下build_common.sh中修改“docker_images_name”即可,需要和ascendplugin.yaml中保持一致。
- 进入“/ascend-device-plugin/build”目录,执行以下命令,查看CONFIGDIR是否正确。
vi build_in_docker.sh
#!/bin/bash set -x CUR_DIR=$(dirname $(readlink -f $0)) TOP_DIR=$(realpath ${CUR_DIR}/..) CONFIGDIR=${TOP_DIR}/src/plugin/config/config_910 #默认使用config_910,使用Ascend 310请改为config_310。 OUTPUT_NAME="ascendplugin" export PKG_CONFIG_PATH=${CONFIGDIR}:$PKG_CONFIG_PATH function main() { rm -rf ${TOP_DIR}/output/* rm -rf ~/.cache/go-build rm -rf /tmp/gobuildplguin mkdir -p /tmp/gobuildplguin chmod 750 /tmp/gobuildplguin cd ${TOP_DIR}/src/plugin/cmd/ascendplugin go build -ldflags "-X main.BuildName=${OUTPUT_NAME} \ -X main.BuildVersion=${build_version} \ -buildid none \ -s \ -tmpdir /tmp/gobuildplguin" \ -o ${OUTPUT_NAME} \ -trimpath ls ${OUTPUT_NAME} if [ $? -ne 0 ]; then echo "fail to find ascendplugin" exit 1 fi cp ${TOP_DIR}/src/plugin/cmd/ascendplugin/${OUTPUT_NAME} /usr/local/bin/ } main
- 执行以下命令,根据实际选择执行的脚本,生成二进制和镜像文件。
Ascend 910请选择build_910.sh,Ascend 310请选择build_310.sh。
cd /home/test/ascend-device-plugin/build/
chmod +x build_XXX.sh
dos2unix build_XXX.sh
./build_XXX.sh dockerimages
- 执行以下命令,查看生成的软件包。
ll /home/test/ascend-device-plugin/output
X86和ARM生成的软件包名不同,以下示例为ARM环境:
- Ascend-K8sDevicePlugin-xxx-arm64-Docker.tar.gz:K8s设备插件镜像。
- Ascend-K8sDevicePlugin-xxx-arm64-Linux.tar.gz:K8s设备插件二进制安装包。
drwxr-xr-x 2 root root 4096 Jun 8 18:42 ./ drwxr-xr-x 9 root root 4096 Jun 8 17:12 ../ -rw-r--r-- 1 root root 29584705 Jun 9 10:37 Ascend-K8sDevicePlugin-xxx-arm64-Docker.tar.gz -rwxr-xr-x 1 root root 6721073 Jun 9 16:20 Ascend-K8sDevicePlugin-xxx-arm64-Linux.tar.gz