我正在运行带有 1 个集群控制器和 3 个节点的 Open Nebula。
我在前端控制器上注册了节点,并且可以在其中一个节点上启动 Ubuntu 虚拟机。
但是我无法从我的网络 ping 虚拟机。我不太确定我是否正确设置了虚拟机。
所有节点均有一个br0
与 桥接的接口eth0
。IP 地址在 192.168.1.x 范围内。
我用于 vmnet 的模板文件是:
NAME = "VM LAN"
TYPE = RANGED
BRIDGE = br0 # Replace br0 with the bridge interface from the cluster nodes
NETWORK_ADDRESS = 192.168.1.128 # Replace with corresponding IP address
NETWORK_SIZE = 126
NETMASK = 255.255.255.0
GATEWAY = 192.168.1.1
NS = 192.168.1.1
onevm list
然而,尽管 sunstone 说虚拟机正在运行并且还声明 vm 正在运行,但我无法访问任何虚拟机。
了解我们正在使用 KVM 作为虚拟机管理程序可能会有所帮助,但我不太确定在安装 KVM 时自动创建的 virbr0 接口是否存在问题。
答案1
我遇到了同样的问题,这是我使用 ubuntu vmbuilder 设置的虚拟机。
看看这个包含完整 vm 的介绍。我确信这对你有用。
他们提供了一个初始化脚本,其中包括在启动时设置某些网络参数,因此这可能是问题的核心。他们在这里结合上下文更全面地解释这一点。
通用语境法
因此,事实证明在虚拟机中安装语境化文件是一个相当简单的问题。
如果您使用 vmbuilder 来制作您的虚拟机,您可以使用后安装挂钩(并且我相信其他构建方法也具有各种后安装挂钩)。
创建复制文件(主机文件到客户文件,确保它们以单个空格分隔?)
复制配置文件
<path>/rc.context /etc/init.d/vmcontext
<path>/postinstall.sh /tmp/postinstall.sh
创建安装后挂钩
安装后
#!/bin/bash
# create mount point for context image
mkdir /mnt/context
# setup vmcontext at runlevel 2 service level 1
ln -s /etc/init.d/vmcontext /etc/rc2.d/S01vmcontext
创建脚本以 chmod 到 vm guest
chvm命令
#!/bin/bash
# vmbuilder passes vmguest root as $1
chroot $1 /tmp/postinstall.sh
最后,编辑虚拟机的 vmbuilder conf 文件
你的虚拟机配置文件
...
copy = <full_path>/copy.cfg
execscript = <full_path>/chvm.sh
...
然后使用 vmbuilder 构建
sudo vmbuilder kvm ubuntu -c vmbuilder.cfg
添加基于星云的 vnc
在你的上下文中包含类似这样的内容
GRAPHICS = [
LISTEN = 0.0.0.0,
PORT = 5900,
TYPE = vnc ]
然后通过 ssh 隧道连接到客户机网络上的计算机
ssh -L 5900:127.0.0.1:5900 yourserver.com
并在本地计算机上打开 127.0.0.1 的 vnc 客户端。
思考
Nebula 无法强制 kvm/libvirt 在 hd*/sh* 上运行您的驱动器,因此您需要尝试它们最终的位置(并编辑 rc 文件以反映这一点)。例如,在我的 Ubuntu 设置中,qcow2 映像获取 /dev/sda,上下文映像获取 /dev/sr0。
我还遇到了一个问题,kvm 或 nebula 无法猜测我的 .qcow2 映像的格式。因此,在 DISK 中我必须包含 DRIVER=qcow2。处理器架构也会出现同样的问题,因此在 OS 中我必须包含 ARCH=x86_64(因为我运行的是 amd64 客户机)。
祝你好运
答案2
首次设置 OpenNebula 时,基于 VNC 的控制台是救星。我强烈推荐在尝试诊断其他任何事情之前先进行设置,因为即使网络配置损坏,查看虚拟机的状态也非常有用。说真的 - 不要放弃,不要收取 200 美元 - 让 noVNC 组件工作,然后再返回进行其他 OpenNebula 设置工作。
至于您的实际问题 - 问题几乎毫无疑问在于您使用的是没有任何网络上下文化脚本的原始操作系统映像。OpenNebula 在设计上并不真正管理 IP 地址,尽管它维护着一个 IP 地址池并将它们“租出”。它真正做的是将 MAC 地址分配给虚拟以太网接口,该接口在 MAC 地址的最后 4 个字节中编码了所需的 IP 地址,操作系统负责识别该地址并适当地分配 IP。
OpenNebula 有关于语境化的一些文档,但说实话,它并不是那么好。我发现直接阅读源代码更容易示例 vmcontext.sh 脚本并通过在启动过程的适当时间点启动时运行 vmcontext 来设置我的虚拟机以使用该机制。