全部产品
云市场
    如何在Kubernetes集群的GPU节点中升级Kernel

如何在Kubernetes集群的GPU节点中升级Kernel

概述

本文主要介绍如何在Kubernetes集群的GPU节点中升级Kernel。

 

详细信息

参考如下步骤升级集群节点的Kernel。

  1. 登录GPU节点,关于如何登录GPU节点,请参考kubectl连接Kubernetes集群的节点
  2. 执行如下命令,将GPU节点设置为不可调度状态。
    kubectl cordon [$Node_ID]
    注:[$Node_ID]为节点的ID。
    系统显示类似如下。
    node/[$Node_ID] already cordoned
  3. 执行如下命令,移除将要升级驱动的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
  4. 卸载当前的Nvidia驱动。
    提示:本步骤中卸载的是384.111版本的驱动包,如果您的驱动版本不是384.111,则需要到Nvidia的官网中下载对应的驱动安装包,并将本步骤中的384.111版本的驱动包替换成您实际的版本。
    1. 您需要登录到该GPU节点,执行如下命令,查看驱动版本。
      nvidia-smi -a | grep 'Driver Version'
      系统显示类似如下。
      Driver Version                      : 384.111
    2. 依次执行如下命令,下载Nvidia驱动安装包。
      cd /tmp/
      curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.run
    3. 依次执行如下命令,卸载当前Nvidia驱动。
      chmod u+x NVIDIA-Linux-x86_64-384.111.run
      ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
  5. 依次执行如下命令,升级Kernel。
    yum clean all && yum makecache
    yum update kernel  -y
  6. 执行reboot命令,重启GPU节点。
  7. 重新登录GPU节点,执行如下命令,安装对应的kernel-devel。
    yum install -y kernel-devel-$(uname -r)
  8. 依次执行如下命令,从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
  9. 参考如下命令,根据实际情况,添加优化参数。
    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
  10. 如果需要开机自启动,请查看/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
  11. 依次执行如下命令,重启kubelet和docker服务。
    service kubelet stop
    service docker restart
    service kubelet start
  12. 执行如下命令,将GPU节点重新设置为可调度状态。
    kubectl uncordon [$Node_ID]
    系统显示类似如下。
    node/[$Node_ID] already uncordoned
  13. 执行如下命令,在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                                                 |
    +-----------------------------------------------------------------------------
  14. 通过docker ps命令,查看GPU节点的容器是否启动,如果没有启动,请参考修复GPU节点容器启动问题

 

适用于

  • 容器服务 Kubernetes 版

注:确认当前Kubernetes集群节点的Kernel版本低于3.10.0-957.21.3。