如何在Kubernetes集群的GPU节点中升级Kernel
概述
本文主要介绍如何在Kubernetes集群的GPU节点中升级Kernel。
详细信息
说明:确认当前Kubernetes集群节点的Kernel版本低于3.10.0-957.21.3。
- 登录GPU节点,如何登录GPU节点,请参见kubectl连接Kubernetes集群的节点。
- 执行以下命令,将GPU节点设置为不可调度状态。
kubectl cordon [$Node_ID]
说明:[$Node_ID]为节点的ID。
系统显示类似如下。node/[$Node_ID] already cordoned
- 执行以下命令,移除将要升级驱动的GPU节点。
kubectl drain [$Node_ID] --grace-period=120 --ignore-daemonsets=true
系统显示类似如下。
node/cn-beijing.[$Node_ID] cordoned WARNING: Ignoring DaemonSet-managed pods: flexvolume-9scb4, kube-flannel-ds-r2qmh, kube-proxy-worker-l62sf, logtail-ds-f9vbg pod/nginx-ingress-controller-78d847fb96-5fkkw evicted
- 卸载当前的Nvidia驱动。
说明:本步骤中卸载的是384.111版本的驱动包,如果您的驱动版本不是384.111,则需要到Nvidia的官网中下载对应的驱动安装包,并将本步骤中的384.111版本的驱动包替换成您实际的版本。
- 您需要登录到该GPU节点,执行以下命令,查看驱动版本。
nvidia-smi -a | grep 'Driver Version'
系统显示类似如下。Driver Version : 384.111
- 依次执行以下命令,下载Nvidia驱动安装包。通过该Nvidia驱动可以卸载Nvidia驱动。
cd /tmp/
curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.run - 依次执行以下命令,卸载当前Nvidia驱动。
chmod u+x NVIDIA-Linux-x86_64-384.111.run ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
- 您需要登录到该GPU节点,执行以下命令,查看驱动版本。
- 依次执行以下命令,升级Kernel。
yum clean all && yum makecache yum update kernel -y
- 执行
reboot
命令,重启GPU节点。 - 重新登录GPU节点,执行以下命令,安装对应的kernel-devel。
yum install -y kernel-devel-$(uname -r)
- 依次执行以下命令,从Nvidia官网下载并安装您需要的Nvidia驱动,本文以410.79版本为例。
cd /tmp/ curl -O https://cn.download.nvidia.cn/tesla/410.79/NVIDIA-Linux-x86_64-410.79.run chmod u+x NVIDIA-Linux-x86_64-410.79.run sh ./NVIDIA-Linux-x86_64-410.79.run -a -s -q
- 参考以下命令,根据实际情况,添加优化参数。
nvidia-smi -pm 1 || true nvidia-smi -acp 0 || true nvidia-smi --auto-boost-default=0 || true nvidia-smi --auto-boost-permission=0 || true nvidia-modprobe -u -c=0 -m || true
- 如果需要开机自启动,请查看
/etc/rc.d/rc.local
文件,确认包含下列配置,如果没有请手动添加。nvidia-smi -pm 1 || true
nvidia-smi -acp 0 || true
nvidia-smi --auto-boost-default=0 || true
nvidia-smi --auto-boost-permission=0 || true
nvidia-modprobe -u -c=0 -m || true - 依次执行以下命令,重启kubelet和docker服务。
service kubelet stop
service docker restart
service kubelet start - 执行如下命令,将GPU节点重新设置为可调度状态。
kubectl uncordon [$Node_ID]
系统显示类似如下。node/[$Node_ID] already uncordoned
- 执行以下命令,在GPU节点的device-plugin Pod上验证版本。
kubectl exec -n kube-system -t nvidia-device-plugin-[$Node_ID] nvidia-smi
系统显示类似如下。
Thu Jan 17 00:33:27 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.79 Driver Version: 410.79 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla P100-PCIE... On | 00000000:00:09.0 Off | 0 | | N/A 27C P0 28W / 250W | 0MiB / 16280MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------
- 通过
docker ps
命令,查看GPU节点的容器是否启动,如果没有启动,请参考修复GPU节点容器启动问题。
适用于
- 容器服务Kubernetes版