arm环境cloudstack在vpc下创建虚拟机失败

这篇具有很好参考价值的文章主要介绍了arm环境cloudstack在vpc下创建虚拟机失败。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、环境说明

  • 操作系统:openEuler 22.03
  • CPU:Kunpeng-920,arm v8
  • cloudstack:4.18
  • libvirtd:6.2.0

二、问题描述

在UI上创建VPC后,平台会同时创建一个virtual router,此时virtual router有两个网卡,分别为private IP(169.;
然后在vpc下创建network,此时virtual router不会绑定network;
创建虚拟机时,指定此network,cloudstack报创建失败。

三、问题排查

当在vpc下的network创建第一个虚拟机时,cloudstack会先将virtual router绑定至该network,其中一个动作是为virtual router附加一个新的网卡,作为该network的网关。
但是虚拟机报创建失败后,查看virtual router仍只有两个网卡,其对应的network name列也是空的。
查看cloudstack management日志发现报错:org.libvirt.LibvirtException: internal error: No more available PCI slots。
而对比普通isolated network对应的virtual router的domain内容(virsh dumpxml),发现vpc下报错的virtual router缺少两个对应pci设备的定义。
通过搜索,在github上查看到类似的issue。
其解决方法是,在./plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java中添加代码如下:

            if (_emulator != null && _emulator.endsWith("aarch64")) {
                devicesBuilder.append("<controller type='pci' model='pcie-root'/>\n");
                for (int i = 0; i < 32; i++) {
                  devicesBuilder.append("<controller type='pci' model='pcie-root-port'/>\n");
                }
                devicesBuilder.append("<controller type='pci' model='pcie-to-pci-bridge'/>\n");
            }

通过_emulator判断为aarch64架构的话,就添加32个pci设备。
但是debug查看,该值在执行至本段代码是为空字符串,且查看上面代码

            if (_emulator != null) {
                devicesBuilder.append("<emulator>" + _emulator + "</emulator>\n");
            }

本地查看虚拟机的domain内容,_emulator的值对应为/usr/libexec/qemu-kvm,也没有架构后缀。
因此怀疑本段代码没有普适性。
因此,将本段代码注释掉,修改代码如下:文章来源地址https://www.toymoban.com/news/detail-628406.html

#./plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java 添加一个类
public static class PCIDef {
    public PCIDeg() {
    }

    @Override
    public String toString() {
        StringBuilder pciBuilder = new StringBuilder();
        devicesBuilder.append("<controller type='pci' model='pcie-root'/>\n");
        for (int i = 0; i < 32; i++) {
            pciBuilder.append("<controller type='pci' model='pcie-root-port'/>\n");
                }
        pciBuilder.append("<controller type='pci' model='pcie-to-pci-bridge'/>\n");
        return pciBuilder.toString();
    }
}


#plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java 2553if (isGuestAarch64()) {
            createArm64UsbDef(devices);
            #新增
            createArm64PCIDef(devices);
        }


#plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java 2580protected void createArm64PCIDef(DevicesDef devices) {
        devices.addDevice(new LibvirtVMDef.PCIDef());
    }

到了这里,关于arm环境cloudstack在vpc下创建虚拟机失败的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图解虚拟私有云 VPC

    虚拟私有云(Virtual Private Cloud,VPC)为公有云用户提供了一个安全、隔离的私有网络环境,用户可以在VPC中按需部署云服务器、云数据库、云存储等云资源。VPC提供丰富的网络服务功能,例如子网、安全组、网络ACL、路由表、DNS,同时提供外部网络访问能力,例如基于VPC对等连

    2023年04月20日
    浏览(40)
  • 【云计算】虚拟私有云 VPC

    VPC 全称是 Virtual Private Cloud ,翻译成中文是 虚拟私有云 。但是在有些场合也被翻译成 私有网络 或者 专有网络 等。这里不免会让人产生疑惑,VPC 究竟是指云还是网络?其实,VPC 既是一种云,也是一种网络模式,不过这应该从服务和技术的角度分别来看。 从服务角度来看,

    2024年02月05日
    浏览(38)
  • 【基于eclipse创建通用arm开发环境】

    File-New-Project 如果不使用C++进行编程,建议选择C Project,工程中不会存在C++相关配置,看起来更简洁(降低阅读成本) 追求简洁的工程,当然选择Empty Project,Toolchains选择Arm Cross GCC 默认生成debug和release配置 没测出来xPack GNU Arm Embedded GCC (arm-none-eabi-gcc)和GNU Tools for ARM Embedded Proc

    2024年04月09日
    浏览(52)
  • Windows11 上使用 QEMU 创建 Ubuntu aarch64(ARM64)虚拟机

    最近在实现一个混沌测试工具,对汽车上分布式系统执行测试。计划运行在 Linux aarch64 环境,需要确定在目标环境能不能运行,但自己和实验室的电脑都是 x86_64,所以打算建一个虚拟机。 通过 Docker容器或VMware都不支持在 x86_64 宿主机运行 aarch64 容器/虚拟机, Virtual Box 似乎也

    2024年02月03日
    浏览(49)
  • AWS攻略——创建VPC

    在 《AWS攻略——VPC初识》一文中,我们在AWS默认的VPC下部署了一台可以SSH访问的机器实例。这篇文章我们将修改一个“变量”——创建一个简单的VPC,并使用 《AWS攻略——VPC初识》相似的步骤,部署另外一个可以SSH访问的机器实例。 我们还是选用弗吉尼亚北部(us-east-1)区

    2024年02月08日
    浏览(37)
  • 改变conda创建虚拟环境时候的默认路径和拷贝、删除、创建Conda虚拟环境

    conda环境默认安装在用户目录C:Usersusername.condaenvs下,如果选择默认路径,那么之后创建虚拟环境,也是安装在用户目录下。不想占用C盘空间,可以修改conda虚拟环境路径。 首先,找到用户目录下的.condarc文件(C:Usersusername)。 打开.condarc文件之后,添加或修改.condarc 中的

    2024年02月12日
    浏览(47)
  • linux下arm环境启动脚本/etc/init.d/rcS执行命令失败,踩坑记录

    记一次踩坑记录!!! 接触到一个新的系统,需要在这个系统上跑程序,测试的时候,手动执行脚本和程序都没问题,于是将执行命令写入到linux启动脚本/etc/init.d/rcS这个文件中,然后重启,等待程序起来,但是让我意想不到的是,执行到我加的命令的时候,居然报错,找不

    2024年01月21日
    浏览(49)
  • WIN10 x86环境部署ARM虚拟机(银河麒麟)

    我们经常使用的是x86架构的cpu,而对于不同cpu架构的arm架构的操作系统,我们可以通过QEMU模拟器来进行模拟一个arm环境 1、部署前的准备 arm的镜像: 以此镜像为例:Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso QEMU 软件: 下载地址:https://qemu.weilnetz.de/w64/2021/qemu-w64-setup-202105

    2024年02月04日
    浏览(53)
  • 【交叉编译环境】安装arm-linux交叉编译环境到虚拟机教程(简洁版本)

    就是看到了好些教程有些繁琐,我就写了一个 我这个解压安装的交叉编译环境是Linaro GCC的一个版本,可以用于在x86_64的主机上编译arm-linux-gnueabihf的目标代码 步骤来了 在你的Ubuntu系统中 创建一个目录 ,例如/usr/local/arm,然后将下载好的gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueab

    2024年02月03日
    浏览(42)
  • 在指定目录下建立conda虚拟环境后发现没有环境名(激活失败)的解决办法

    1.背景 一般来说,大家在 使用conda建立虚拟环境 时都是 默认C盘 。具体地,大家可以使用 conda env list 进行查看。如下,可以看到我师兄机上的虚拟环境基本都在C盘。因此,C盘也快爆了。 2.在指定目录下建立conda虚拟环境 具体地,可以使用 conda create --prefix=your_path python=X.X 来

    2023年04月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包