本文介绍如何在已有集群的GPU节点上手动升级Kernel。
前提条件
当前kernel版本低于3.10.0-957.21.3
。
操作步骤
- 通过 kubectl 连接 Kubernetes 集群。
- 将GPU节点设置为不可调度(本例以节点 cn-beijing.i-2ze19qyi8votgjz12345为例)。
kubectl cordon cn-beijing.i-2ze19qyi8votgjz12345 node/cn-beijing.i-2ze19qyi8votgjz12345 already cordoned
- 将要升级驱动的GPU节点进行排水。
# kubectl drain cn-beijing.i-2ze19qyi8votgjz12345 --grace-period=120 --ignore-daemonsets=true node/cn-beijing.i-2ze19qyi8votgjz12345 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-driver。
说明 本步骤中卸载的是版本为384.111的驱动包,如果您的驱动版本不是384.111,则需要Nvidia的官网下载对应的驱动安装包,并将本步骤中的
384.111
替换成您实际的版本。- 您需要登录到该GPU节点,通过
nvidia-smi
查看驱动版本。# nvidia-smi -a | grep 'Driver Version' Driver Version : 384.111
- 下载Nvidia驱动安装包。
cd /tmp/ curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.run
说明 需要在安装包中卸载Nvidia。 - 卸载当前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
- 重启GPU机器。
reboot
- 重新登录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 # warm up GPU 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 cn-beijing.i-2ze19qyi8votgjz12345 node/cn-beijing.i-2ze19qyi8votgjz12345 already uncordoned
- 在GPU节点上的device plugin pod验证版本。
kubectl exec -n kube-system -t nvidia-device-plugin-cn-beijing.i-2ze19qyi8votgjz12345 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节点容器启动问题。