如何更换 OpenStack 默认的 Hypervisor
2012年01月27日 | 标签: hypervisor, kvm, lxc, openstack nova | 作者:vpsee
我们的云计算头节点这周到货了,采用的是 Dell PowerEdge R710,Intel Xeon CPU E5645 @2.40GHz (12 Cores), 4x300GB SAS (15K), 96GB 内存。这样的配置对于我们的头节点来说过于强大,我们可能考虑用 VMware ESXi 虚拟后用其中的一台虚拟机做 OpenStack/OpenNebula 头节点,用 VMware ESXi 有个问题,免费版本的 VMware ESXi 5.0 虚拟出来的单台虚拟机最多只能支持8核心,而这台服务器逻辑上有24核心,有点浪费。图片最上面的是头节点(Dell PowerEdge R710),中间的是计算节点(Dell PowerEdge M710HD),最下面的是存储。
OpenStack 几乎支持现在所有主流的虚拟技术和 Hypervisor,如 KVM, Hyper-V, LXC, QEMU, UML, VMWare ESX/ESXi, Xen/XenServer 等,未来还会支持 OpenVZ 和 VirtualBox. 不过 OpenStack 首选的 Hypervisor 是 KVM,OpenStack 安装后默认使用的是 KVM (–libvirt_type=kvm),不需要特别配置。如果由于某种原因,比如服务器 CPU 不支持 Intel VT-x/AMD-V 不能使用 KVM 或者想简单尝试一下另外一种 Hypervisor 怎么办呢?方法很容易,1、更改 OpenStack Nova 的配置文件(–libvirt_type);2、给所有的 Compute 结点装上相应的 Hypervisor 就可以了。以下以 LXC 为例来说明如何更换 OpenStack Nova 的 Hypervisor,LXC 使用的是与 Xen 和 KVM 完全不同的虚拟技术,和 OpenVZ 的容器技术有点类似。
首先在所有 openstack nova compute 结点上替换现有的 nova-compute-kvm 到 nova-compute-lxc:
$ sudo apt-get install nova-compute-lxc
LXC 使用 cgroup 文件系统来限制资源和进程,libvirt 需要 cgroup 文件系统来运行 LXC,我们只要在 nova compute 上创建一个 ctroups 目录并且在 /etc/fstab 最后加上 none /cgroups cgroup cpuacct,memory,devices,cpu,freezer,blkio 0 0 这行就可以了,别忘了重启系统:
$ sudo mkdir /cgroups $ vi /etc/fstab none /cgroups cgroup cpuacct,memory,devices,cpu,freezer,blkio 0 0 $ sudo reboot
重启后可以看到 /cgroups 下面多了很多东西:
$ ls /cgroup/ blkio.io_merged cpu.shares blkio.io_queued devices.allow blkio.io_service_bytes devices.deny blkio.io_serviced devices.list blkio.io_service_time libvirt blkio.io_wait_time memory.failcnt blkio.reset_stats memory.force_empty blkio.sectors memory.limit_in_bytes blkio.throttle.io_service_bytes memory.max_usage_in_bytes blkio.throttle.io_serviced memory.memsw.failcnt blkio.throttle.read_bps_device memory.memsw.limit_in_bytes blkio.throttle.read_iops_device memory.memsw.max_usage_in_bytes blkio.throttle.write_bps_device memory.memsw.usage_in_bytes blkio.throttle.write_iops_device memory.move_charge_at_immigrate blkio.time memory.numa_stat blkio.weight memory.oom_control blkio.weight_device memory.soft_limit_in_bytes cgroup.clone_children memory.stat cgroup.event_control memory.swappiness cgroup.procs memory.usage_in_bytes cpuacct.stat memory.use_hierarchy cpuacct.usage notify_on_release cpuacct.usage_percpu release_agent cpu.rt_period_us tasks cpu.rt_runtime_us
修改 OpenStack Nova 配置,将 nova-compute.conf 里面的 –libvirt_type=kvm 改成 lxc:
$ sudo vi /etc/nova/nova-compute.conf --libvirt_type=lxc $ sudo restart nova-compute
重启所有 nova compute 结点上的 nova-compute 服务,有必要的话重启所有 nova compute 结点。
那镜像怎么办呢?以前为 KVM 上传的镜像也可以用在 LXC 上吗?嗯,可以。下载 oneiric-server-cloudimg-amd64.tar.gz 解压并镜像到 OpenStack:
$ wget http://uec-images.ubuntu.com/oneiric/current/oneiric-server-cloudimg-amd64.tar.gz $ tar zxvf oneiric-server-cloudimg-amd64.tar.gz $ euca-bundle-image -i oneiric-server-cloudimg-amd64.img $ euca-upload-bundle -b oneiric -m /tmp/oneiric-server-cloudimg-amd64.img.manifest.xml $ euca-register oneiric/oneiric-server-cloudimg-amd64.img.manifest.xml $ euca-describe-images IMAGE ami-00000001 oneiric/oneiric-server-cloudimg-amd64.img.manifest.xml available private x86_64 machine instance-store $ euca-run-instances -k vpsee -t m1.tiny ami-00000001 $ euca-describe-instances RESERVATION r-4bbu7bd7 sanbi default INSTANCE i-00000001 ami-00000001 172.16.39.6 172.16.39.6 running vpsee (vpseecloud, node00) 0 m1.tiny 2012-01-20T08:04:05Z nova ami-00000000 ami-00000000
需要注意的是,OpenStack 目前不支持混合 Hypervisor,也就是说所有 nova compute 结点上必须使用同一种 Hypervisor,不过支持混合 Hypervisor 的 OpenStack 正在计划开发中。
openstack如何支持vmware的esx或citrix的xenserver虚拟化引擎呢?
个人经验:如果虚拟机跑的程序不是真的支持多CPU的话,不推荐给VMWARE的虚拟机配置多CPU
想问:云计算头结点 是说这个服务器是云计算中带头那个吗?给来个名词解释呗~
@coolzsb
嗯,VMware 也是建议如果虚拟机如果程序不是 multi-threaded/multiple processes 的话最好只配置一个 CPU,配置多个 CPU 的话不但不会提高应用程序的性能,还会消耗资源和增重 VMware ESXi 的调度(scheduler)负担。
@ccms
名词解释:云计算头节点=云计算节点的带头大哥~
云计算头节点是nova-control节点吧?
你好,能请问下,你的wp是如何插入代码的吗?是用插件还是什么啊?非常感谢
@Jzoy
直接在主题里面加的代码。
@vpsee
请问使用的存储是什么型号?
@fly
Dell EqualLogic PS6010 系列。
所有 nova compute 结点上必须使用同一种 Hypervisor?现在openstack还不支持吗?
@harold
嗯,所有 compute node 都必须用同一种 hypervisor.
最近剛剛開始接觸Openstack
想請問這東西跟vmware Vcenter有甚麼差別
不都是管理虛擬主機的工具嗎?
我看官網上說支援的hypervisor 有vmware esxi
這是指Openstack可以向vcenter一樣管理esxi嗎?
如果是的話有沒有相關的文件可以參考
nova-compute可以安裝在esxi上面?
Openstack可以將許多實體主機組成一個資源池
但是虛擬主機所使用的運算資源有辦法跨實體主機嗎?
例如:兩台實體主機各有64GB RAM,可以建立一台虛擬主機擁有96GB的RAM來使用嗎?
還是說受限實體主機,最多只能使用64GB?
@ERIC
OpenStack 和 vCenter 都是私有云平台工具,本质上是一样的,管理一堆虚拟机,但是差别又很大,不管使用方式还是技术都完全不一样。
VMware ESXi 可以作为 OpenStack Nova (nova-compute) 的 hypervisor,OpenStack 应该和 vCenter 是一类产品,KVM/Xen 应该和 ESXi 是一类的。
OpenStack 不能这样用,嗯,受物理机的限制,如果物理机只有 64GB RAM,虚拟机就只能最多 64GB(不到 64GB,因为 hypervisor 还要用一点)。不能把各个物理机上的内存合并成一个大的虚拟机用,现有的任何虚拟技术和云计算都不能做到这一点。
您好,我制作了一个kvm的镜像,镜像验证ok,使用openstack nova+kvm 工作正常。当我想使用lxc的时候遇到以下问题:
环境:
ubuntu 12.04
lxc 0.7.5-3ubuntu63
nova-compute-lxc 2012.1.3+stable-20120827-4d2a4afe-0ubuntu1
nova 相关的包都是2012.1.3版本的,源里的。
1.#glance index
镜像列出使用kvm时候的镜像,这时我想使用lxc,卸载nova-compute-kvm,安装nova-compute-lxc,同时设置
/etc/nova/nova.conf中的–libvirt_type=lxc,重启所有服务(重启机器)。在horizon中新建instance时候出现status error(操作和kvm时候一样,而且镜像用的是kvm时候的镜像)
2. 想尝试通过euca- 系列命令上传一个镜像,但是在euca-upload-bundle 的时候出现如下错误
# euca-upload-bundle -b xxxx -m /tmp/test.img.manifest.xml
S3_URL not specified. Trying http://localhost:8773/services/Walrus
Checking bucket: xxxx
Creating bucket: xxxx
S3ResponseError: 404 Not Found
None
关于euca-upload-bundle的-b参数我是随便制定的一个bucket,肯定不存在的。
3.如果是因为kvm镜像的问题,请问lxc的镜像如何制作。lxc单独运行也是ok的,就是和openstack搭配的时候在不行。至少我在horizon下操作不行,单独手动启动的命令没有尝试。
刚刚接触opentack,头大。谢谢
@mole
1、看一下日志,看看报什么错;
2、这篇文章是1月份写的有点老了,新版本的 openstack 不要再使用 euca-* 相关工具,那是为了和 amazon 兼容的一套工具,openstack 有自己的一套 nova-*, glance 工具,你用 glance add 上传镜像试试;
3、lxc 镜像不需要特别制作,可以直接用这个 oneiric-server-cloudimg-amd64.tar.gz,估计你的问题是 lxc 和 openstack 的搭配问题(如果 lxc 单独运行没有问题的话)。
上传镜像已经搞定了,设置一个S3_URL就行了,但是上传以后的镜像
root@zjj-Lenovo:/home/zjj/openstackgeek# euca-upload-bundle -b wow -m /tmp/jj.img.manifest.xml
Checking bucket: wow
Creating bucket: wow
Uploading manifest file
Uploading part: jj.img.part.00
Uploading part: jj.img.part.01
Uploading part: jj.img.part.02
Uploading part: jj.img.part.03
Uploading part: jj.img.part.04
Uploading part: jj.img.part.05
Uploading part: jj.img.part.06
Uploading part: jj.img.part.07
Uploading part: jj.img.part.08
Uploading part: jj.img.part.09
Uploading part: jj.img.part.10
Uploading part: jj.img.part.11
Uploading part: jj.img.part.12
Uploading part: jj.img.part.13
Uploading part: jj.img.part.14
Uploading part: jj.img.part.15
Uploading part: jj.img.part.16
Uploading part: jj.img.part.17
Uploading part: jj.img.part.18
Uploading part: jj.img.part.19
Uploading part: jj.img.part.20
Uploaded image as wow/jj.img.manifest.xml
root@zjj-Lenovo:/home/zjj/openstackgeek# euca-register wow/jj.img.manifest.xml
IMAGE ami-0000000e
root@zjj-Lenovo:/home/zjj/openstackgeek# euca-describe-images 没有任何输出,卡住。
重启nova所有服务。
root@zjj-Lenovo:/home/zjj/openstackgeek# euca-describe-images
IMAGE ami-0000000d None (test) available public machine instance-store
IMAGE ami-0000000e wow/jj.img.manifest.xml untarring private x86_64 machine instance-store
有时候状态是untarring或者是queued状态,就不是available。上面那个test ok的镜像是通过glance add加德。
谢谢。
lxc单独跑是ok的,glance上传的镜像我需要新建一个lxc实体德时候会出错。是搭配的问题,我正在下载官方的镜像尝试,看是否是我的镜像制作有问题。
@mole
OpenStakc (KVM) 使用的镜像是全盘镜像(包含分区表信息),而使用 LXC 虚拟化的镜像只能是根文件系统,即制作时直接 mkfs 的。
hypervisor 跟nova可以在两台不同的机器上面阿?怎么配置它们的连接阿?
@nirvana
?不太明白你的问题,hypervisor 和 nova-compute 必须在同一个机器上,他们之间不需要配置连接,只需要告诉 nova-compute 使用什么样的 hypervisor 就可以了,用 –libvirt_type 参数指定。
LZ,你好。
咨询下,ESXI机器上怎么装nova-computer啊?我们现在想把几台服务器组成云,现在服务器里面已经有很多虚拟机在跑了。服务器都是装的ESXI4.1,请问能不能直接在ESXI上直接安装nova-computer组件呢?怎么来控制这些服务器而不需要动里面的虚拟机呢?谢谢了
@fafala
没试过。不过更改 nova.conf 里面的几个参数应该可以把 openstack 和 vmware esxi 连起来。
vmwareapi_host_ip=
vmwareapi_host_username=
vmwareapi_host_password=
vmwareapi_wsdl_loc=http://127.0.0.1:8080/vmware/SDK/wsdl/vim25/vimService.wsdl
@vpsee
貌似hypervisor 和 nova-compute可以不在同一主机。nova-compute通过virsh操纵装有virtd的hypervisor(如KVM)。在nova.conf中配置:
libvirt_uri = qemu+ssh://root@192.168.1.2/system
博主你好。我将oneiric-server-cloudimg-amd64.img 直接上传到openstakc上,可以创建一个lxc的实例。现在要自己做一个lxc的镜像,该如何制作?oneiric-server-cloudimg-amd64.img 是一个partition image。那如何将根文件系统作成一个可用的partition image呢。
你好按照你的步骤出现如下错误: euca-upload-bundle -b oneiric -m /tmp/oneiric-server-cloudimg-amd64.img.manifest.xml
euca-upload-bundle: error: No s3 endpoint to connect to was given. s3 endpoints may be specified in a config file with “s3-url”.
请问如何解决?麻烦你了
lxc使用的镜像是什么类型的?kvm我上传的镜像是vmdk格式的。