如何更换 OpenStack 默认的 Hypervisor

我们的云计算头节点这周到货了,采用的是 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),最下面的是存储。

dell poweredge r710

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 正在计划开发中。

评论 (27 Comments)

  1. openstack如何支持vmware的esx或citrix的xenserver虚拟化引擎呢?

  2. 个人经验:如果虚拟机跑的程序不是真的支持多CPU的话,不推荐给VMWARE的虚拟机配置多CPU

  3. 想问:云计算头结点 是说这个服务器是云计算中带头那个吗?给来个名词解释呗~

  4. @coolzsb
    嗯,VMware 也是建议如果虚拟机如果程序不是 multi-threaded/multiple processes 的话最好只配置一个 CPU,配置多个 CPU 的话不但不会提高应用程序的性能,还会消耗资源和增重 VMware ESXi 的调度(scheduler)负担。

  5. @ccms
    名词解释:云计算头节点=云计算节点的带头大哥~

  6. 云计算头节点是nova-control节点吧?

  7. 你好,能请问下,你的wp是如何插入代码的吗?是用插件还是什么啊?非常感谢

  8. @Jzoy
    直接在主题里面加的代码。

  9. @vpsee
    请问使用的存储是什么型号?

  10. @fly
    Dell EqualLogic PS6010 系列。

  11. 所有 nova compute 结点上必须使用同一种 Hypervisor?现在openstack还不支持吗?

  12. @harold
    嗯,所有 compute node 都必须用同一种 hypervisor.

  13. 最近剛剛開始接觸Openstack
    想請問這東西跟vmware Vcenter有甚麼差別
    不都是管理虛擬主機的工具嗎?

    我看官網上說支援的hypervisor 有vmware esxi
    這是指Openstack可以向vcenter一樣管理esxi嗎?
    如果是的話有沒有相關的文件可以參考
    nova-compute可以安裝在esxi上面?

    Openstack可以將許多實體主機組成一個資源池
    但是虛擬主機所使用的運算資源有辦法跨實體主機嗎?
    例如:兩台實體主機各有64GB RAM,可以建立一台虛擬主機擁有96GB的RAM來使用嗎?
    還是說受限實體主機,最多只能使用64GB?

  14. @ERIC
    OpenStack 和 vCenter 都是私有云平台工具,本质上是一样的,管理一堆虚拟机,但是差别又很大,不管使用方式还是技术都完全不一样。
    VMware ESXi 可以作为 OpenStack Nova (nova-compute) 的 hypervisor,OpenStack 应该和 vCenter 是一类产品,KVM/Xen 应该和 ESXi 是一类的。
    OpenStack 不能这样用,嗯,受物理机的限制,如果物理机只有 64GB RAM,虚拟机就只能最多 64GB(不到 64GB,因为 hypervisor 还要用一点)。不能把各个物理机上的内存合并成一个大的虚拟机用,现有的任何虚拟技术和云计算都不能做到这一点。

  15. 您好,我制作了一个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,头大。谢谢

  16. @mole
    1、看一下日志,看看报什么错;
    2、这篇文章是1月份写的有点老了,新版本的 openstack 不要再使用 euca-* 相关工具,那是为了和 amazon 兼容的一套工具,openstack 有自己的一套 nova-*, glance 工具,你用 glance add 上传镜像试试;
    3、lxc 镜像不需要特别制作,可以直接用这个 oneiric-server-cloudimg-amd64.tar.gz,估计你的问题是 lxc 和 openstack 的搭配问题(如果 lxc 单独运行没有问题的话)。

  17. 上传镜像已经搞定了,设置一个S3_URL就行了,但是上传以后的镜像
    [email protected]:/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
    [email protected]:/home/zjj/openstackgeek# euca-register wow/jj.img.manifest.xml
    IMAGE ami-0000000e
    [email protected]:/home/zjj/openstackgeek# euca-describe-images 没有任何输出,卡住。
    重启nova所有服务。
    [email protected]:/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加德。

  18. 谢谢。
    lxc单独跑是ok的,glance上传的镜像我需要新建一个lxc实体德时候会出错。是搭配的问题,我正在下载官方的镜像尝试,看是否是我的镜像制作有问题。

  19. @mole

    OpenStakc (KVM) 使用的镜像是全盘镜像(包含分区表信息),而使用 LXC 虚拟化的镜像只能是根文件系统,即制作时直接 mkfs 的。

  20. hypervisor 跟nova可以在两台不同的机器上面阿?怎么配置它们的连接阿?

  21. @nirvana
    ?不太明白你的问题,hypervisor 和 nova-compute 必须在同一个机器上,他们之间不需要配置连接,只需要告诉 nova-compute 使用什么样的 hypervisor 就可以了,用 –libvirt_type 参数指定。

  22. LZ,你好。
    咨询下,ESXI机器上怎么装nova-computer啊?我们现在想把几台服务器组成云,现在服务器里面已经有很多虚拟机在跑了。服务器都是装的ESXI4.1,请问能不能直接在ESXI上直接安装nova-computer组件呢?怎么来控制这些服务器而不需要动里面的虚拟机呢?谢谢了

  23. @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

  24. @vpsee
    貌似hypervisor 和 nova-compute可以不在同一主机。nova-compute通过virsh操纵装有virtd的hypervisor(如KVM)。在nova.conf中配置:
    libvirt_uri = qemu+ssh://[email protected]/system

  25. 博主你好。我将oneiric-server-cloudimg-amd64.img 直接上传到openstakc上,可以创建一个lxc的实例。现在要自己做一个lxc的镜像,该如何制作?oneiric-server-cloudimg-amd64.img 是一个partition image。那如何将根文件系统作成一个可用的partition image呢。

  26. 你好按照你的步骤出现如下错误: 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”.
    请问如何解决?麻烦你了

  27. lxc使用的镜像是什么类型的?kvm我上传的镜像是vmdk格式的。

发表评论