安装魔方
魔方云提供了4种业务模式(节点类型):KVM加强版、KVM轻量版、Hyper-V、拨号云,结合实际的业务需求选择合适的脚本进行部署即可。本文提供的是KVM加强版的脚本部署方式。
环境要求
1、必须安装在全新的服务器上:centos7.9请使用 yum update 将系统更新至最新版,centos8stream不需要执行 dnf update 更新系统命令。具体物理机安装过程可以参看下面文章:文章源自玩技e族-https://www.playezu.com/820475.html
主板虚拟
要在主板上打开虚拟化,首先需要进入BIOS设置界面。不同品牌的主板进入BIOS的按键可能不同,以下是华硕主板的步骤:文章源自玩技e族-https://www.playezu.com/820475.html
- 开机时按下F2或DEL键进入BIOS界面。
- 在BIOS界面中,使用方向键切换到Advanced选项卡。
- 在Advanced选项卡下,选择CPU设置。
- 找到Intel Virtual Technology(英特尔虚拟技术)或类似的选项。
- 将Intel Virtual Technology的设置改为Enabled(启用)。
- 完成设置后,按下F10键保存并退出BIOS。
请注意,不同品牌的主板可能会有不同的BIOS设置步骤,因此请根据主板的品牌和型号调整上述步骤。如果BIOS设置界面与上述描述不符,请参考主板提供的用户手册或访问官方网站获取具体的BIOS设置指南。文章源自玩技e族-https://www.playezu.com/820475.html
文章源自玩技e族-https://www.playezu.com/820475.html
2、系统:确保是干净的操作系统,没有安装过其它环境(已有环境不可安装);主控(Web面板)建议使用CentOS 8 stream、CentOS 7.9;计算节点(生产KVM的母鸡)建议使用centos 8 stream(强烈建议)、CentOS 7.9文章源自玩技e族-https://www.playezu.com/820475.html
3、主控:建议将所有容量分配到 / ,磁盘最低20G,配置建议:4核4G / 50G;如果主控安装到虚拟机,建议内存不低于4GB文章源自玩技e族-https://www.playezu.com/820475.html
4、节点/分区需大于10G 其余都分配到/home分区,文章源自玩技e族-https://www.playezu.com/820475.html
5、系统采用KVM+OVS架构文章源自玩技e族-https://www.playezu.com/820475.html
6、服务器需放行的端口:
l 计算节点(生产KVM的母鸡):ssh端口和4432端口;
l 主控服务器:80、8443、443、ssh端口;
l VNC控制台端口范围:10000-30000;
l 魔方云程序管理端口:4000-5000;
l 转发与建站的默认端口范围:20000~60000
注意事项
1、同一个服务器上,如果主控(WBE面板)和计算节点(生产KVM的母鸡)分开部署,请先部署主控后部署计算节点
2、一个主控面板可以同时管理魔方云4种业务模式,一个服务器不能部署多种类型的计算节点
3、为避免误操作,请勿将主控安装在魔方云的实例中,或者迁移至魔方云的实例中
4、部署脚本的服务器要求支持虚拟化/关闭SELINUX
5、安装之前,请获取授权码
6、请执行脚本下载安装包进行部署,切勿直接拷贝文件部署
脚本部署
1、SSH进入准备好的服务器,执行安装脚本命令
wget https://mirror.cloud.idcsmart.com/cloud/scripts/install-zjmf-cloud_new -O install-zjmf-cloud_new && chmod +x install-zjmf-cloud_new && ./install-zjmf-cloud_new
2、如需使用Trunk类型的节点,则执行下面这个命令
wget https://mirror.cloud.idcsmart.com/cloud/scripts/install-zjmf-cloud_new -O install-zjmf-cloud_new && chmod +x install-zjmf-cloud_new && ./install-zjmf-cloud_new -t
3、根据命令提示,选择需要安装的系统
4、根据命令提示,输入授权码
5、授权码校验成功后,选择需要安装的版本
6、选择用于实例访问外部网络的网卡
7、确认选择无误后,进入脚本自动安装流程,期间不需要任何操作,保持服务器正常运行即可
8、脚本安装完毕,会输出主控登陆信息,根据该信息进入魔方云web控制面板
9、如果是选择的同时安装WEBUI主控和计算节点,则节点信息会被默认添加在节点管理列表中
10、如果单独部署的计算节点(会输出鉴权账号和密码),则需要在主控面板手动添加节点,节点类型选择KVM加强版
显卡直通
GPU 直通
GPU 直通主要是利用 PCIe Pass-through 的技术,将物理主机上的整块 GPU 显卡直通挂载到虚拟机上使用,与网卡直通的原理类似,需要主机支持 IOMMU。这种方案有利有弊:
优势
- 通用性好,大部分的 GPU 卡型号都支持直通功能。
- 兼容性好,直通 GPU 在虚拟机中识别的显卡型号与物理显卡一致,直接安装官方驱动,可无损使用 GPU 的各项特性和功能。
- 性能损失小,直通 GPU 性能接近物理机,性能损失一般低于 5%。
限制
- 一张 GPU 卡不能同时直通给多个虚拟机使用,相当于虚拟机独占了 GPU 卡。如果多个虚拟机需要同时使用 GPU,需要在服务器中安装多块 GPU 卡,分别直通给不同的虚拟机使用。
- 拥有直通 GPU 的虚拟机不支持在线迁移。
vGPU
为了应对 GPU 直通带来的限制,vGPU 技术应运而生:将 GPU 卡上的资源进行切分,切分后的 GPU 资源可分配给多台虚拟机使用。vGPU 技术相对 GPU 直通技术要更为复杂:GPU 拥有多种切分方式和不同切分粒度,使得 vGPU 方案有很多种组合。下面以 NVIDIA vGPU 为例进行说明。
vGPU 切分方式
Time-sliced
Time-sliced 切分方式是按时间切分 GPU,每个 vGPU 对应物理 GPU 一段时间内的使用权。此方式下,vGPU 上运行的进程被调度为串行运行,当有进程在某个 vGPU 上运行时,此 vGPU 会独占 GPU 引擎,其他 vGPU 都会等待。所有支持 vGPU 技术 GPU 卡都能支持 Time-sliced 的切分方式。
图 3:NVIDIA GPU 虚拟化 - Time-sliced 模式原理示意
Multi-Instance GPU (MIG)
MIG 模式将物理 GPU 划分为多个分区(vGPU),vGPU 是一个单独的实例,可以独占访问实例的引擎。多个 vGPU 上运行的进程并行运行。MIG 是基于 NVIDIA Ampere GPU 架构引入的,仅有 Ampere 架构的 GPU 型号才能使用 MIG 方式。MIG 可将 GPU 划分为多达七个实例,每个实例均完全独立于各自的高带宽显存、缓存和计算核心。
图 4:NVIDIA GPU 虚拟化 - MIG 模式原理示意
显存切分
将 GPU 切分后,还需要切分对应的显存,因为 GPU 是无法直接访问计算机内存的,只能直接访问显存。显存切分需要遵循以下几个特点:
- 按照显存进行切分,切分后每个 vGPU 的显存大小是固定的,无法动态调节。
- 每一个物理 GPU 核心(一块显卡可能有多个 GPU 核心)同时仅能按照一种显存大小的规格进行切分。
- 同一显卡上的不同物理 GPU 核心可以同时切分为不同类型的 vGPU。
*关于常见显卡对切分方式的支持情况,请见文末附录。
vGPU 系列
NVIDIA 对同一款显卡可支持多种切分的方案,基于不同的切分方案可适应不同用户工作负载类。因此 NVIDIA 将其显卡分为 4 个 vGPU 系列:
系列 | 工作负载目的 |
Q-series | 强调图形处理能力,针对需要 Quadro 技术性能和功能的创意和技术专业人士的虚拟工作站 |
C-series | 计算密集型服务器的工作负载,针对人工智能、深度学习或高性能计算场景 |
B-series | 面向商务专业人士和知识工作者的虚拟桌面(如:XenDesktop) |
A-series | 面向虚拟应用(如:XenApp)用户的应用流式传输或基于会话的解决方案 |
表 2
以 NVIDIA A40 这款显卡为例,它可以支持全部 4 种系列的 vGPU 切分方案,而各 vGPU 系列又可以按照切分 GPU 数量分为不同的型号。
vGPU 型号 | 系列 | 目标用户场景 | 搭配 vGPU 软件许可 |
A40-48Q/……等 10 种型号 | Q 系列 | 虚拟工作站 | vWS |
A40-48C/……等 7 种型号 | C 系列 | AI 训练 | vCS 或者 vWS |
A40-2B/……等 2 种型号 | B 系列 | 虚拟桌面 | vPC 或者 vWS |
A40-48A/……等 10 种型号 | A 系列 | 虚拟应用 | vWS |
表 3
vGPU 软件许可
上述提到 vGPU 切分功能是由 GPU 硬件支持的,但虚拟机要真正使用 vGPU 功能还需要搭配相关 NVIDIA GRID vGPU 软件许可才能使用。大致机制是:当带有 vGPU 设备的虚拟机启动后,需从 NVIDIA vGPU License 服务器获取 license,才能正常激活 vGPU 的相应功能,否则无法正常使用;当虚拟机关闭时,license 将被 License 服务器重新回收。
NVIDIA GPU 提供以下的 NVIDIA GRID 授权产品:
- vWS:虚拟工作站(Virtual Workstation)
- vCS:虚拟计算服务器(Virtual Compute Server)
- vPC:虚拟 PC(Virtual PC)
- vApp:虚拟应用程序(Virtual Application)
同时需要注意一点:vGPU 系列与 vGPU 授权许可需要正确搭配才能正常工作。以下是 vGPU 系列与 vGPU 授权许可的搭配关系。
GRID License 类型 | 支持的 vGPU 类型 | |
vApps | Virtual Application | A 系列 |
vCS | Virtula Compute Server | C 系列 |
vPC | Virtual PC | B 系列 |
vWS | Virtual Workstation | Q 系列、C 系列、B 系列 |
表 4
要求与限制
硬件要求
IOMMU
虚拟化/超融合平台支持 GPU 直通或者 vGPU 的前提是: CPU 需支持 IOMMU 功能。I/O Memory Management Unit (IOMMU) 是一种硬件设备,用于管理输入/输出设备(I/O设备)与系统内存之间的数据传输和访问。
以下是几个 CPU 厂商的 IOMMU 支持情况:
CPU 厂商 | 对应 IOMMU 功能特性名称 |
AMD | IOMMU |
Intel | VT-d |
海光 | IOMMU |
鲲鹏 | SMMU |
因此,在使用 GPU 直通或者 vGPU 之前,确认 CPU 支持 IOMMU,并在 BIOS 中将该功能保持开启状态,如下图:
SR-IOV
在虚拟化中, single root input/output virtualization (SR-IOV) 是一种出于可管理性和性能原因,对 PCI Express 设备提供隔离的规范。可以说 IOMMU 技术使得 PCIe 设备(如网卡、显卡等)可以直接分配给虚拟机独占使用,有了 SR-IOV 可以在 IOMMU 基础上将 PCIe 设备的资源进行切分,分配给多个虚拟机使用。
因此,如果需要用到 vGPU 功能,需要虚拟化软件、CPU 和 GPU 卡三者同时支持 SR-IOV 功能。CPU 一般会同时支持 IOMMU 和 SR-IOV,也有部分服务器对于 SR-IOV 功能有独立的开关,如果是这种情况,需要 BIOS 中同时开启 SR-IOV 和 IOMMU 。
特性限制
虚拟机热迁移
- 带直通 GPU 的虚拟机是无法执行虚拟机的热迁移的,虚拟机只能在关机状态下迁移主机。
- 带 vGPU 功能的虚拟机一般情况下也是不支持热迁移或者是受限条件下支持。
例如 VMware vSphere 的虚拟机可以支持带 vGPU 的虚拟机执行在线迁移,但前提是目标主机需要拥有源主机一样型号和配置的 GPU 卡和资源,并且在迁移过程中会引起虚拟机短暂时间无法访问,无法访问的时间取决于 GPU 显存大小和虚拟机的内存的大小,现存和内存时间越大,虚拟机的中断时间就越长。最坏的情况下中断时间可能长达 99 秒(不是迁移时长,是虚拟机无法访问时长)。
虚拟机高可用
- 带直通 GPU 的虚拟机可能无法正常触发 HA 的,因为无法确保目标主机拥有空闲的、型号一致可直通的 GPU 设备。
- 带 vGPU 的虚拟机的也可能无法正常触发 HA 的,原因与直通 GPU 类似。
GPU 卡支持情况
以下列表中的显卡型号已在 SMTX OS 5.1 已获得支持,未来将持续更新显卡支持列表。
显卡型号 | GPU 直通 | vGPU 切分 |
NVIDIA Tesla T4 | 支持 | Time-sliced |
NVIDIA Tesla V100 | 支持 | Time-sliced |
NVIDIA A30 | 支持 | Time-sliced |
NVIDIA A6000 | 支持 | Time-sliced |
NVIDIA A40 | 支持 | Time-sliced |
NVIDIA A16 | 支持 | Time-sliced |
附录
NVIDIA 常见显卡 vGPU 切分模式的支持情况:
GPU 型号 | vGPU 切分方式支持 |
Since 15.2: NVIDIA L4 | Time-sliced |
Since 15.1: NVIDIA L40 | Time-sliced |
Since 15.1: NVIDIA RTX 6000 Ada | Time-sliced |
NVIDIA A2 | Time-sliced |
NVIDIA A10 | Time-sliced |
NVIDIA A16 | Time-sliced |
NVIDIA A30 | Time-sliced |
MIG-backed | |
NVIDIA A30X | Time-sliced |
MIG-backed | |
NVIDIA A40 | Time-sliced |
NVIDIA A100 HGX 40GB | Time-sliced |
MIG-backed | |
NVIDIA A100 PCIe 40GB | Time-sliced |
MIG-backed | |
NVIDIA A100 HGX 80GB | Time-sliced |
MIG-backed | |
NVIDIA A100 PCIe 80GB | Time-sliced |
MIG-backed | |
NVIDIA A100 PCIe 80GB liquid cooled | Time-sliced |
MIG-backed | |
NVIDIA A100X | Time-sliced |
MIG-backed | |
NVIDIA A800 PCIe 80GB | Time-sliced |
MIG-backed | |
NVIDIA A800 PCIe 80GB liquid cooled | Time-sliced |
MIG-backed | |
NVIDIA A800 HGX 80GB | Time-sliced |
MIG-backed | |
Since 15.2: NVIDIA H800 PCIe 80GB | Time-sliced |
MIG-backed | |
NVIDIA H100 PCIe 80GB | Time-sliced |
MIG-backed | |
NVIDIA RTX A5000 | Time-sliced |
NVIDIA RTX A5500 | Time-sliced |
NVIDIA RTX A6000 | Time-sliced |
Tesla T4 | Time-sliced |
Quadro RTX 6000 | Time-sliced |
Quadro RTX 6000 passive | Time-sliced |
Quadro RTX 8000 | Time-sliced |
Quadro RTX 8000 passive | Time-sliced |
Tesla V100 SXM2 | Time-sliced |
Tesla V100 SXM2 32GB | Time-sliced |
Tesla V100 PCIe | Time-sliced |
Tesla V100 PCIe 32GB | Time-sliced |
Tesla V100S PCIe 32GB | Time-sliced |
Tesla V100 FHHL | Time-sliced |
第一步:主板BIOS需启用 IOMMU / VT-d、bove 4G Decoding、SR-IOV
- IOMMU:是一种地址映射技术,而 VT-d 是 Intel 对该技术的别称
- Above 4G Decoding:关系到 PCI-E 设备 RAM 的 64 位寻址能力,通常用于需要让 CPU 访问全部显存的场景,使用 vGPU 时推荐开启
- SR-IOV:允许一个 PCI-E 设备被多个虚拟机使用,常用于网卡等设备共享。
第二步:确认CPU硬件是否支持虚拟化、关闭selinux
# 核查是否支持cpu虚拟化 egrep -o '(vmx|svm)' /proc/cpuinfo # 关闭selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
第三步:CPU启用iommu
# intel_iommu=on iommu=pt # Intel添加: rd.driver.pre=vfio-pci intel_iommu=on video=efifb:off,vesafb:off # AMD添加: rd.driver.pre=vfio-pci amd_iommu=on video=efifb:off,vesafb:off [root@sv-gpu-node-001 ~]# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cs-swap rd.lvm.lv=cs00/root rd.lvm.lv=cs/swap rhgb quiet rd.driver.pre=vfio-pci intel_iommu=on video=efifb:off,vesafb:off" GRUB_DISABLE_RECOVERY="true" GRUB_ENABLE_BLSCFG=true
第四步:更新grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 参数说明: # vfio-pci 显卡直通虚拟话需要的驱动 # iommu开启直通分组 # efifb:off 禁用efi启动的显示设备 # vesafb:off 禁用legacy启动的显示设备
第五步:加载显卡直通所需的驱动模块
cat > /etc/modules-load.d/vfio.conf << EOF vfio vfio_iommu_type1 vfio_pci vfio_virqfd EOF
第六步:禁用原本的英伟达显卡驱动和开源驱动nouveau,避免直通出错
cat > /etc/modprobe.d/blacklist.conf << EOF blacklist nouveau blacklist nvidia options nouveau modeset=0 EOF
第七步:重构
# 先备份 mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img # 重建 dracut /boot/initramfs-$(uname -r).img $(uname -r) # 重启 reboot
第八步:验证
# 验证IOMMU是否开启 [root@sv-gpu-node-001 ~]# dmesg | grep -e DMAR -e IOMMU [ 0.000000] ACPI: DMAR 0x000000007DF6D650 000160 (v01 A M I OEMDMAR 00000001 INTL 00000001) [ 0.000000] ACPI: Reserving DMAR table memory at [mem 0x7df6d650-0x7df6d7af] [ 0.000000] DMAR: IOMMU enabled # 这是未屏蔽开源显卡驱动的情况 [root@localhost ~]# lsmod | grep nouveau nouveau 2355200 4 video 53248 1 nouveau mxm_wmi 16384 1 nouveau wmi 32768 2 mxm_wmi,nouveau drm_display_helper 151552 1 nouveau i2c_algo_bit 16384 2 ast,nouveau drm_kms_helper 167936 5 drm_vram_helper,ast,drm_display_helper,nouveau drm_ttm_helper 16384 3 drm_vram_helper,ast,nouveau ttm 81920 3 drm_vram_helper,drm_ttm_helper,nouveau drm 577536 13 drm_kms_helper,drm_vram_helper,ast,drm_display_helper,drm_ttm_helper,ttm,nouveau # 这是已经成功屏蔽开源显卡驱动的情况(这是期待的结果-表示成功) [root@localhost ~]# lsmod | grep nouveau [root@localhost ~]# # 如下分别是禁用nvidia驱动后,未分配给虚拟机使用 和 已分配给虚拟机使用 的情况 [root@localhost ~]# lspci -v -s 85:00.0 85:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Tesla M10] (rev a2) (prog-if 00 [VGA controller]) Subsystem: NVIDIA Corporation Tesla M10 Flags: bus master, fast devsel, latency 0, IRQ 304, NUMA node 1, IOMMU group 78 Memory at f8000000 (32-bit, non-prefetchable) [size=16M] Memory at 39ffa0000000 (64-bit, prefetchable) [size=256M] Memory at 39ffb0000000 (64-bit, prefetchable) [size=32M] I/O ports at c000 [size=128] Capabilities: [60] Power Management version 3 Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+ Capabilities: [78] Express Endpoint, MSI 00 Capabilities: [100] Virtual Channel Capabilities: [258] L1 PM Substates Capabilities: [128] Power Budgeting <?> Capabilities: [420] Advanced Error Reporting Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?> Capabilities: [900] Secondary PCI Express Kernel driver in use: nvidia # 这是还未直通给虚拟机用时 Kernel modules: nouveau, nvidia_drm, nvidia [root@localhost ~]# lspci -v -s 85:00.0 85:00.0 VGA compatible controller: NVIDIA Corporation GM107GL [Tesla M10] (rev a2) (prog-if 00 [VGA controller]) Subsystem: NVIDIA Corporation Tesla M10 Flags: fast devsel, IRQ 38, NUMA node 1, IOMMU group 76 Memory at fa000000 (32-bit, non-prefetchable) [size=16M] Memory at 39ffe0000000 (64-bit, prefetchable) [size=256M] Memory at 39fff0000000 (64-bit, prefetchable) [size=32M] I/O ports at e000 [size=128] Capabilities: [60] Power Management version 3 Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+ Capabilities: [78] Express Endpoint, MSI 00 Capabilities: [100] Virtual Channel Capabilities: [250] Latency Tolerance Reporting Capabilities: [258] L1 PM Substates Capabilities: [128] Power Budgeting <?> Capabilities: [420] Advanced Error Reporting Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?> Capabilities: [900] Secondary PCI Express Kernel driver in use: vfio-pci # 这是已经直通给虚拟机用后 Kernel modules: nouveau, nvidia_drm, nvidia
第九步:业务管理—》实例管理—》创建 等待实例安装完成。
第十步:将显卡PCI选中
第十一步:安装显卡驱动
去虚拟化
原创声明:本文章为原创内容,所有文章均由博主亲自撰写,严格遵循原创原则。我们承诺不使用任何人工智能生成的内容,所发布的每一篇文章都经过深思熟虑,旨在为读者提供真实、有价值的观点和信息。我们坚信原创才是知识分享的根本,致力于为广大读者呈现最具真实性和独特性的文章。感谢您的支持与关注,欢迎持续关注我们的原创内容。
未知地区 4F
112133131谢谢 教程很好
未知地区 3F
学习一下
南非 2F
来学习教程的
广东省深圳市 1F
112133131谢谢 教程很好