专栏首页CNCFKubeVirt上的虚拟化GPU工作负载

KubeVirt上的虚拟化GPU工作负载

作者:Pedro Ibanez Requena

在这段2019年北美KubeCon视频中,Red Hat的David Vossel和NVIDIA的Vishesh Tanksale探索了KubeVirt背后的架构,以及NVIDIA如何利用该架构为Kubernetes上的GPU工作负载提供动力。以NVIDIA的GPU工作负载为例进行研究,它们提供了一个重点视图,以了解主机设备透传是如何通过KubeVirt完成的,并提供了一些性能指标,将KubeVirt与独立KVM进行比较。

https://www.youtube.com/watch?v=Qejlyny0G58

https://v.qq.com/x/page/s3031occ4r7.html

KubeVirt介绍

David介绍了KubeVirt是什么和不是什么:

  • KubeVirt不参与管理AWS或GCP实例
  • KubeVirt不是Firecracker或Kata容器的竞争对手
  • KubeVirt不是一个容器运行时替换

他喜欢把KubeVirt定义为:

KubeVirt是Kubernetes的一个扩展,它允许与容器工作负载一起原生运行传统的VM工作负载。

但是为什么需要KubeVirt呢?

  • 已经有了像OpenStack、oVirt这样的本地解决方案
  • 然后是公共云,AWS、GCP、Azure
  • 为什么我们又要做VM管理的事情呢?

答案是,最初的动机是基础设施的融合:

迈向云模型的转型包括多个栈、容器和VM、旧代码和新代码。KubeVirt简化了这一切,只需要一个栈来管理容器和VM来运行旧代码和新代码。

工作流的融合意味着:

  • 将VM管理合并到容器管理工作流中
  • 对容器和虚拟机使用相同的工具(kubectl)
  • 保持用于VM管理的声明性API(就像pod、deployment等…)

YAML中VM实例的一个例子可以像下面这样简单:

$ cat <<EOF | kubectl create -f -
apiVersion: kubevirt.io/v1alpha1
kind: VirtualMachineInstance
...
 spec:
  domain:
   cpu: 
    cores: 2
   devices:
    disk: fedora29

架构

事实是,KubeVirt VM是在pod中运行的KVM+qemu进程。就是这么简单。

VM启动流程如下图所示。用户向集群发布VM清单,直到Kubelet启动VM pod。最后,virt-handler指示virt-launcher如何启动qemu。

KubeVirt中的存储以与pod相同的方式使用,如果需要在VM中有持久存储,则需要创建PVC(持久卷声明)。

例如,如果您的电脑中有一个VM,您可以使用容器数据导入器(containerized-data-importer,CDI)将该镜像上载到PVC,然后您可以将该PVC附加到VM pod以使其运行。

关于网络服务的使用,流量以与容器工作负载相同的方式路由到KubeVirt VM。Multus还可以为每个VM提供不同的网络接口。

For using the Host Resources:

  • VM Guest CPU and NUMA Affinity
    • CPU Manager (pinning)
    • Topology Manager (NUMA nodes)
  • VM Guest CPU/MEM requirements
    • POD resource request/limits
  • VM Guest use of Host Devices
    • Device Plugins for access to (/dev/kvm, SR-IOV, GPU passthrough)
    • POD resource request/limits for device allocation

在Kubevirt虚拟机的GPU/vGPU

在David的介绍之后,Vishesh接手并深入讨论了VM中GPU的原因和方法。许多新的机器和深度学习应用程序正在利用GPU处理工作负载。如今,大数据是GPU的主要消费者之一,但仍有一些差距,游戏和专业图形部门仍然需要运行VM和具有原生GPU功能,这就是为什么NVIDIA决定与KubeVirt合作。

NVIDIA已经开发了KubeVirt GPU设备插件,它可以在GitHub上获得,它是开源的,任何人都可以查看并下载它。

使用设备插件框架是向GPU提供对Kubevirt虚拟机访问的自然选择,下图显示了涉及到GPU透传架构的不同层:

Vishesh还说明YAML代码的一个例子,可以看到包含NVIDIA的节点状态卡信息(节点有5个GPU),包含deviceName的虚拟机规范指向NVIDIA卡和Pod状态,用户可以设置资源的限制和要求。

The main Device Plugin Functions are:

  • GPU and vGPU device Discovery
    • GPUs with VFIO-PCI driver on the host are identified
    • vGPUs configured using Nvidia vGPU manager are identified
  • GPU and vGPU device Advertising
    • Discovered devices are advertised to kubelet as allocatable resources
  • GPU and vGPU device Allocation
    • Returns the PCI address of allocated GPU device
  • GPU and vGPU Health Check
    • Performs health check on the discovered GPU and vGPU devices

为了理解GPU是如何通过生命周期工作的,Vishesh用下图展示了不同阶段的过程:

在下面的图表中,有一些NVIDIA使用KubeVirt的关键功能:

如果您对生命周期如何工作的细节感兴趣,或者对NVIDIA为什么高度使用上面列出的KubeVirt特性感兴趣,您可能会对下面的视频感兴趣。

视频

PDF

https://static.sched.com/hosted_files/kccncna19/31/KubeCon%202019%20-%20Virtualized%20GPU%20Workloads%20on%20KubeVirt.pdf

演讲者

David Vossel是红帽公司的首席软件工程师。他目前正致力于OpenShift的容器原生虚拟化(Container Native Virtualization,CNV),并且是开源KubeVirt项目的核心贡献者。

Vishesh Tanksale目前是NVIDIA的高级软件工程师。他专注于在Kubernetes集群上启用VM工作负载管理的不同方面。他对VM上的GPU工作负载特别感兴趣。他是CNCF Sanbox项目Kubevirt的积极贡献者。

本文分享自微信公众号 - CNCF(lf_cncf),作者:KubeVirt

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Fluentd v1.8.0已经发布

    我们已经发布了v1.8.0。更新日志在这里。这个版本包含了新的服务发现插件和许多增强功能。

    CNCF
  • 基于Kubernetes的GPU类型调度实现

    3 月 27 日,ACM 宣布深度学习的三位缔造者——Yoshua Bengio、Yann LeCun 及 Geoffrey Hinton 获得了 2018 年...

    CNCF
  • (上)K8S 1.12大特性最快最深度解析:Kubernetes CSI Snapshot

    CSI snapshot是由华为在Kubernetes社区主导开发的存储特性,在K8S 1.12进入Alpha阶段。接下来,我们将分为上下两篇,分别介绍snap...

    CNCF
  • DOCTYPE 文档类型

    HTML5学堂:在HTML版本从4.0升级到5.0之后,可以采用<!doctype html>这种最新的文档声明方式,那么以前4.0版本,我们也应当有所了解,主...

    HTML5学堂
  • HTML JS DOM

      当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。HTML DOM 模型被构造为对象的树。

    饮水思源为名
  • 视频编码的GPU加速

    前言 随着视频编解码技术的不断发展,视频逐步向着高清晰、高动态、高数据量的方向演进。这对视频编解码终端的计算能力提出了越来越高的要求。同时,在GPU领域,随着C...

    用户1324186
  • P2P网贷信用评分项目分享(一)

    此项目为kaggle竞赛平台的give me some credits。其目的是预测银行用户违约概率,以辅助银行判断是否要对用户进行放贷。关于风险控制建模的大致...

    用户2769421
  • 一日一技:使用Scrapy的选择器来解析HTML

    在使用Scrapy抓取网站的时候,可能会遇到这样的情况,网站返回一个JSON字符串。在JSON字符串中又有一项,它的值是HTML。

    青南
  • 目录:SpringCloud核心技术学习目录

    这段时间一直在编写开源的相关框架,致力于公司使用的框架升级以及开源计划,将公司使用到的工具以及插件进行升级重构并且开源。

    恒宇少年
  • 业界 | 英伟达官方解读:Volta Tensor Core GPU实现AI性能新里程碑

    机器之心

扫码关注云+社区

领取腾讯云代金券