S如何边缘控制_详细教程丨如何在k3s环境中安装GPU相关程序

直播预告

下周四晚8点半,将带你走进IoT的世界。企业在落地边缘计算的过程会遇到哪些挑战?什么是MQTT协议?如何设计企业的边缘架构?如何实现边缘侧的IoT设备管理?下节课通通告诉你!

点击【阅读原文】或访问以下链接即可报名:

http://z-mz.cn/PmxP

c2c5fcaa32a2258f10a189b084dec423.png

前 言

本篇文章主要是配合Rancher的k3s进阶之路第四期《k3s实战演练(一):如何与GPU结合使用》,培训内容可以参考在线视频链接:

http://z-mz.cn/PmxF

本文内容作为这一期课程的补充,提供了非常详细的k3s环境中GPU相关的程序安装步骤。其中包括两种支持方式:Docker+GPU,以及Containerd+GPU。本文的目的是希望大家可以以此作为参考,减少初始入门时的安装困扰,把更多的精力放在场景落地和创新上。

本文使用的k3s版本为v1.17.3+k3s1,操作系统使用Ubuntu 18.04。

安装详解

安装cuda-drivers

准备GPU设备的主机,本文使用AWS的p2.2xlarge实例,它拥有一块Nvidia GPU卡,我们可以用于测试。首先需要安装cuda-drivers,这是我们能够在用户空间调用GPU做运算的驱动,所以主机上必须按照。在Nvidia官网可以找到下载链接,可以根据自身OS的需求选择,下面示例使用Ubuntu 18.04:

# https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=debnetwork# 注意最后一行,我们只需安装cuda-drivers即可,不需要其他的cuda-toolkit wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"sudo apt-get update sudo apt-get -y install cuda-drivers # 注意安装后请重启reboot

运行时的选择

由于k3s支持Docker和Containerd用于容器管理,所以针对GPU容器的使用,我们也可以分为两种形式。

使用Nvidia-docker2

如果使用Docker,我们需要安装nvidia-docker2,参考下面示例:

# https://github.com/NVIDIA/k8s-device-plugin#preparing-your-gpu-nodes 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.listsudo apt-get update && sudo apt-get install -y nvidia-docker2sudo systemctl enable docker

安装完nvidia-docker2后,我们要确保设置default runtime设置到nvidia:

# /etc/docker/daemon.json{    "default-runtime": "nvidia",    "runtimes": {        "nvidia": {            "path": "/usr/bin/nvidia-container-runtime",            "runtimeArgs": []      }  }} sudo systemctl restart docker

一切妥当后,可以测试nvidia-docker2是否工作正常,启动一个示例容器查看运行结果:

# 检查nvidia-docker2可以起一个容器来测试docker run --rm nvidia/cuda:9.0-base nvidia-smi # 只有一块Tesla K80+-----------------------------------------------------------------------------+| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     ||-------------------------------+----------------------+----------------------+| 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 K80           On   | 00000000:00:1E.0 Off |                    0 || N/A   38C    P8    31W / 149W |      0MiB / 11441MiB |      0%      Default |+-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+| Processes:                                                       GPU Memory ||  GPU       PID   Type   Process name                             Usage      ||=============================================================================||  No running processes found                                                 |+-----------------------------------------------------------------------------+

安装k3s,注意使用docker runtime:

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--docker" sh -s -

使用Containerd

如果我们保持使用k3s中内置的containerd,我们需要单独安装Nvidia-container-runtime:

# https://nvidia.github.io/nvidia-container-runtime/# https://github.com/NVIDIA/nvidia-container-runtime curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \          sudo apt-key add -distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \          sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.listsudo apt-get updatesudo apt-get install nvidia-container-runtime

安装k3s并修改containerd配置,确保containerd可以使用nvidia-container-runtime:

curl -sfL https://get.k3s.io | sh - # /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl# 注意version=2 version = 2 [plugins."io.containerd.internal.v1.opt"]  path = "/var/lib/rancher/k3s/agent/containerd" [plugins."io.containerd.grpc.v1.cri"]  stream_server_address = "127.0.0.1"  stream_server_port = "10010"  sandbox_image = "docker.io/rancher/pause:3.1" [plugins."io.containerd.grpc.v1.cri".cni]  bin_dir = "/var/lib/rancher/k3s/data/xxxxx/bin"  conf_dir = "/var/lib/rancher/k3s/agent/etc/cni/net.d" [plugins."io.containerd.grpc.v1.cri".containerd]  default_runtime_name = "nvidia" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]  runtime_type = "io.containerd.runc.v2"[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]  BinaryName = "nvidia-container-runtime"  # 确保Nvidia相关程序在containerd的执行路径中cd /var/lib/rancher/k3s/data/*/ln -s /usr/bin/nvidia-container-cli .ln -s /usr/bin/nvidia-container-runtime .ln -s /usr/bin/nvidia-container-runtime-hook .ln -s /usr/bin/nvidia-container-toolkit . # 重启让containerd配置生效systemctl restart k3s

安装nvidia-device-plugin

运行时就绪后,我们需要安装k8s-device-plugin,它可以让kubelet获取GPU信息,进而使k3s拥有GPU卡资源的调度能力:

# https://github.com/NVIDIA/k8s-device-pluginkubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta4/nvidia-device-plugin.yml

确保device-plugin正常启动,可以检查其日志:

Loading NVMLFetching devices.Starting FS watcher.Starting OS watcher.Starting GRPC serverStarting to serve on /var/lib/kubelet/device-plugins/nvidia.sockRegistered device plugin with Kubelet

这里需要特殊说一下,先前版本的k3s在安装nvidia-device-plugin时需要手动修改一些挂载路径,通过本文验证这个问题已经被修复。参考issue:

https://github.com/rancher/k3s/issues/1390

现在,你可以运行你的GPU workload,当然如果导入Rancher后管理,会更加方便。

后  记

针对各个边缘环境中k3s集群增加GPU管理能力,并通过云端Rancher统一管理,对于边缘AI场景,可以形成一套云边协同的基础设施平台。而这一切的基础就是计算引擎对GPU的有效管理,Rancher也会加大投入,尤其是和Nvidia等此领域核心厂商合作共建生态,提供更好的产品输出。 

别忘了下周四晚8点半的直播!带你走进IoT的世界。企业在落地边缘计算的过程会遇到哪些挑战?什么是MQTT协议?如何设计企业的边缘架构?如何实现边缘侧的IoT设备管理?下节课通通告诉你!

点击【阅读原文】或访问以下链接即可报名:

http://z-mz.cn/PmxP

About k3s

k3s 是目前全球用户量最大的 CNCF 认证轻量级 K8S 发行版。自 2019 年 3 月发布以来,备受全球开发者们关注。发行后仅用了10个月,GitHub Stars 数已超过 11,000,成为了开源社区最受欢迎的边缘计算 K8S 解决方案。

k3s 专为在资源有限的环境中运行 Kubernetes 的研发和运维人员设计,将满足日益增长的在边缘计算环境中运行在 x86、ARM64 和 ARMv7 处理器上的小型、易于管理的 Kubernetes 集群需求。k3s 的发布,为开发者们提供了以“Rancher 2.X + k3s”为核心的从数据中心到云到边到端的 K8S 即服务(Kubernetes-as-a-Service),推动 Kubernetes Everywhere。

ba4ad6dfb5ca7eb3d1b8c987ee028a96.png

扫码添加k3s中文社区助手

加入官方中文技术社区

官网:https://k3s.io

点击【阅读原文】,参加课程,了解IoT场景管理!

↓↓↓
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值