Kubernetes集群中GPU節(jié)點的部署及驗證

前言

Kubernetes集群中葛闷,基于已有的透傳型GPU虛機,部署一個GPU-Node领曼,與常規(guī)節(jié)點相比需要增加三個步驟:

  • 安裝NVIDIA-Driver
  • 安裝NVIDIA-Docker2
  • 部署NVIDIA-Device-Plugin

安裝NVIDIA-driver

下載 NVIDIA 驅(qū)動

驅(qū)動都是免費的帜乞,根據(jù)顯卡型號選擇下載合適的驅(qū)動撑帖,官方驅(qū)動下載地址

NVIDIA 驅(qū)動程序下載.png

禁用 nouveau 驅(qū)動

添加conf 文件:

vi /etc/modprobe.d/blacklist.conf

在最后兩行添加:

blacklist nouveau
options nouveau modeset=0

重新生成 kernel initramfs:

執(zhí)行sudo update-initramfs -u

重啟節(jié)點虛機:

reboot

驗證:沒輸出代表禁用生效,在重啟之后執(zhí)行

lsmod | grep nouveau
禁用 nouveau 生效.png

安裝驅(qū)動

示例中:虛機操作系統(tǒng)為 Ubuntu18.04-amd64肿孵,顯卡型號為 Tesla-V100唠粥,安裝驅(qū)動版本選擇 440.33.01

在線安裝:

apt install nvidia-driver-430 nvidia-utils-430 nvidia-settings

離線安裝:

./NVIDIA-Linux-x86_64-{{ gpu_version }}.run -s

驗證驅(qū)動安裝:

nvidia-smi

正確安裝驅(qū)動后疏魏,輸出示例如下:


nvidia-smi.png

以上完成NVIDIA驅(qū)動安裝

安裝NVIDIA-docker2

由于18.06版本的docker不支持GPU容器, 需要安裝NVIDIA-Docker2以支持容器使用NVIDIA-GPUs
注意:安裝之前要先安裝好 docker及NVIDIA驅(qū)動,但不需要安裝 CUDA厅贪。

在線安裝:

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -

distribution= $(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list

apt-get update

apt-get install -y nvidia-docker2

systemctl restart docker

離線安裝:
在通外網(wǎng)的機器上蠢护,運行以下命令:

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update

下載5個包

apt download libnvidia-container1

apt download libnvidia-container-tools

apt download nvidia-container-toolkit

apt download nvidia-container-runtime

apt download nvidia-docker2

將下載好的包拷貝到目標節(jié)點虛機后,執(zhí)行如下命令進行安裝

dpkg -i libnvidia-container1_1.0.7-1_amd64.deb && dpkg -i libnvidia-container-tools_1.0.7-1_amd64.deb && dpkg -i nvidia-container-toolkit_1.0.5-1_amd64.deb && dpkg -i nvidia-container-runtime_3.1.4-1_amd64.deb && dpkg -i nvidia-docker2_2.2.2-1_all.deb

設(shè)置GPU節(jié)點的docker default runtime 為 nvidia-container-runtime

vi /etc/docker/daemon.json

需要在該配置文件中添加的內(nèi)容如下:

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

重啟docker

systemctl restart docker

驗證安裝

docker info
docker-info.png

以上完成NVIDIA-docker2安裝

安裝插件 nvidia-device-plugin-daemonset

注:示例中版本為1.0.0-beta6养涮,可去Nvidia Github 項目下查看所有可用版本

在線安裝:

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin:1.0.0-beta6/nvidia-device-plugin.yml

Nvidia官方manifest/清單為:

# Copyright (c) 2019, NVIDIA CORPORATION.  All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: nvidia-device-plugin-ds
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      # This annotation is deprecated. Kept here for backward compatibility
      # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
      labels:
        name: nvidia-device-plugin-ds
    spec:
      tolerations:
      # This toleration is deprecated. Kept here for backward compatibility
      # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
      - key: CriticalAddonsOnly
        operator: Exists
      - key: nvidia.com/gpu
        operator: Exists
        effect: NoSchedule
      # Mark this pod as a critical add-on; when enabled, the critical add-on
      # scheduler reserves resources for critical add-on pods so that they can
      # be rescheduled after a failure.
      # See https://kubernetes.io/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/
      priorityClassName: "system-node-critical"
      containers:
      - image: nvidia/k8s-device-plugin:1.0.0-beta6
        name: nvidia-device-plugin-ctr
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
        volumeMounts:
          - name: device-plugin
            mountPath: /var/lib/kubelet/device-plugins
      volumes:
        - name: device-plugin
          hostPath:
            path: /var/lib/kubelet/device-plugins

注: 可以給GPU節(jié)點添加label葵硕,并在nvidia-device-plugin-daemonset.yaml中添加nodeselector或nodeAffinity。

以上步驟完成后贯吓,驗證GPU-Node安裝

kubectl get no {nodeName} -oyaml
GPU-node.png

圖中Node詳情中已經(jīng)可以取到nvidia.com/gpu的值了懈凹,此時GPU資源是以顯卡個數(shù)暴露給Kubernetes集群的,說明配置生效了悄谐,另外介评,也可以顯存形式暴露給Kubernetes集群并實現(xiàn)GPU共享調(diào)度
以上完成在Kubernetes集群中GPU節(jié)點的部署及驗證

Reference

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爬舰,一起剝皮案震驚了整個濱河市们陆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌情屹,老刑警劉巖坪仇,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異垃你,居然都是意外死亡椅文,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門惜颇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皆刺,“玉大人,你說我怎么就攤上這事凌摄∠鄱辏” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵望伦,是天一觀的道長林说。 經(jīng)常有香客問我,道長屯伞,這世上最難降的妖魔是什么腿箩? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮劣摇,結(jié)果婚禮上珠移,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好钧惧,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布暇韧。 她就那樣靜靜地躺著,像睡著了一般浓瞪。 火紅的嫁衣襯著肌膚如雪懈玻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天乾颁,我揣著相機與錄音涂乌,去河邊找鬼。 笑死英岭,一個胖子當(dāng)著我的面吹牛湾盒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诅妹,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罚勾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吭狡?” 一聲冷哼從身側(cè)響起尖殃,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎划煮,沒想到半個月后分衫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡般此,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了牵现。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铐懊。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瞎疼,靈堂內(nèi)的尸體忽然破棺而出科乎,到底是詐尸還是另有隱情,我是刑警寧澤贼急,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布茅茂,位于F島的核電站,受9級特大地震影響太抓,放射性物質(zhì)發(fā)生泄漏空闲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一走敌、第九天 我趴在偏房一處隱蔽的房頂上張望碴倾。 院中可真熱鬧,春花似錦、人聲如沸跌榔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僧须。三九已至纲刀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間担平,已是汗流浹背示绊。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驱闷,地道東北人耻台。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像空另,于是被迫代替她去往敵國和親盆耽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容