全部產品
Search
文件中心

Container Service for Kubernetes:升級GPU節點的Docker

更新時間:Dec 24, 2025

共用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
    cd /tmp
    sudo tar -xf docker-${VERSION}.tar.gz
    cd /tmp/pkg/docker/${VERSION}/rpm
    sudo yum localinstall -y $(ls .)
  7. 執行以下命令,在節點上安裝Nvidia-container-runtime。

    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