全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:升级GPU节点的Docker

更新时间:Aug 17, 2023

共享GPU的隔离能力依赖Docker 19.03.5以及与其对应的Nvidia-container-runtime版本,如果Kubernetes集群节点安装的Docker版本低于19.03.5,您需要将其升级至19.03.5。本文介绍如何升级Docker以及与其对应的Nvidia-container-runtime,从而使节点支持共享GPU。

背景信息

Nvidia-container-runtime允许用户构建和运行GPU加速的Docker容器,能够自动对容器进行配置,以达到容器使用Nvidia GPU的目的。

操作步骤

重要

本文操作步骤仅适用于CentOS和Alibaba Cloud Linux 2操作系统。

在执行以下操作前,您需要使用命令行工具连接您的Kubernetes集群。详情请参见获取集群KubeConfig并通过kubectl工具连接集群

  1. 在Master节点执行以下命令,下线节点。

    为避免在Docker升级期间,有Pod调度到该节点,您需要将节点标记为不可调度。

    kubectl cordon <NODE_NAME>
    说明

    <NODE_NAME>为待升级Docker版本的节点名称。执行命令kubectl get nodes查询节点名称。

  2. 在Master节点上执行以下命令,迁移节点中的Pod。

    节点下线以后,需要将该节点上的Pod迁移至其他节点。

    kubectl drain <NODE_NAME> --ignore-daemonsets --delete-local-data --force
    说明

    <NODE_NAME>为待升级Docker版本的节点。

  3. 执行以下命令,暂停kubelet和Docker服务。

    在待升级Docker版本的节点上停止kubelet和Docker服务。

    sudo service kubelet stop
    sudo docker rm -f $(docker ps -aq)
    sudo service docker stop
  4. 执行以下命令,卸载Docker和Nvidia-container-runtime。

    在待升级Docker版本的节点上卸载旧版Docker和Nvidia-container-runtime。

    sudo yum remove -y docker-ce docker-ce-cli containerd
    sudo yum remove -y nvidia-container-runtime*  libnvidia-container*
  5. 执行以下命令,备份并移除daemon.json文件。

    sudo cat /etc/docker/daemon.json
    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "/usr/bin/nvidia-container-runtime",
                "runtimeArgs": []
            }
        },
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "100m",
            "max-file": "10"
        },
        "bip": "169.254.123.1/24",
        "oom-score-adjust": -1000,
        "storage-driver": "overlay2",
        "storage-opts":["overlay2.override_kernel_check=true"],
        "live-restore": true
    }
    sudo mv /etc/docker/daemon.json /tmp
  6. 执行以下命令,安装Docker。

    在待升级Docker版本的节点上下载Docker安装包。

    VERSION=19.03.5 
    URL=http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/public/pkg/docker/docker-${VERSION}.tar.gz 
    sudo curl -ssL $URL -o /tmp/docker-${VERSION}.tar.gz  
    sudo cd /tmp
    sudo tar -xf docker-${VERSION}.tar.gz
    sudo cd /tmp/pkg/docker/${VERSION}/rpm
    sudo yum localinstall -y $(ls .)
  7. 执行以下命令,在节点上安装Nvidia-container-runtime。

    sudo cd /tmp
    sudo yum install -y unzip
    sudo wget https://aliacs-k8s-cn-hongkong.oss-cn-hongkong.aliyuncs.com/public/pkg/nvidia-container-runtime/nvidia-container-runtime-3.13.0-linux-amd64.tar.gz
    sudo tar -xvf nvidia-container-runtime-3.13.0-linux-amd64.tar.gz
    sudo yum -y -q --nogpgcheck localinstall pkg/nvidia-container-runtime/3.13.0/common/*
  8. 执行以下命令,配置daemon.json

    将上述的daemon.json覆盖/etc/docker/daemon.json,使原有配置生效。

    sudo mv /tmp/daemon.json  /etc/docker/daemon.json 
    sudo cat /etc/docker/daemon.json
    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "/usr/bin/nvidia-container-runtime",
                "runtimeArgs": []
            }
        },
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "100m",
            "max-file": "10"
        },
        "bip": "169.254.123.1/24",
        "oom-score-adjust": -1000,
        "storage-driver": "overlay2",
        "storage-opts":["overlay2.override_kernel_check=true"],
        "live-restore": true
    }
  9. 执行以下命令,启动Docker和kubelet服务。

    sudo service docker start
    sudo service kubelet start
  10. 执行以下命令,上线节点。

    节点Docker升级完成后,使节点在集群中的状态变成可调度。

    kubectl uncordon <NODE_NAME>
    说明

    <NODE_NAME>为升级完Docker版本的节点名称。

  11. 执行以下命令,在该GPU节点重新启动GPU安装程序。

    sudo docker ps |grep cgpu-installer | awk '{print $1}' | xargs docker rm -f