OpenStack幾乎支援現在所有主流的虛擬技術和Hypervisor,如KVM,Hyper-V,LXC,QEMU,UML,VMWareESX/ESXi,Xen/XenServer等,未來還會支援OpenVZ和VirtualBox.不過OpenStack首選的Hypervisor是KVM,OpenStack安裝後預設使用的是KVM(–libvirt_type=kvm),不需要特別配置。如果由於某種原因,比如伺服器CPU不支援IntelVT-x/AMD-V不能使用KVM或者想簡單嘗試一下另外一種Hypervisor怎麼辦呢?方法很容易,1、更改OpenStackNova的配置檔案(–libvirt_type);2、給所有的Compute結點裝上相應的Hypervisor就可以了。以下以LXC為例來說明如何更換OpenStackNova的Hypervisor,LXC使用的是與Xen和KVM完全不同的虛擬技術,和OpenVZ的容器技術有點類似。
首先在所有openstacknovacompute結點上替換現有的nova-compute-kvm到nova-compute-lxc:
$sudoapt-getinstallnova-compute-lxc
LXC使用cgroup檔案系統來限制資源和程序,libvirt需要cgroup檔案系統來執行LXC,我們只要在novacompute上建立一個ctroups目錄並且在/etc/fstab最後加上none/cgroupscgroupcpuacct,memory,devices,cpu,freezer,blkio00這行就可以了,別忘了重啟系統:
$sudomkdir/cgroups
$vi/etc/fstab
none/cgroupscgroupcpuacct,memory,devices,cpu,freezer,blkio00
$sudoreboot
重啟後可以看到/cgroups下面多了很多東西:
$ls/cgroup/
blkio.io_mergedcpu.shares
blkio.io_queueddevices.allow
blkio.io_service_bytesdevices.deny
blkio.io_serviceddevices.list
blkio.io_service_timelibvirt
blkio.io_wait_timememory.failcnt
blkio.reset_statsmemory.force_empty
blkio.sectorsmemory.limit_in_bytes
blkio.throttle.io_service_bytesmemory.max_usage_in_bytes
blkio.throttle.io_servicedmemory.memsw.failcnt
blkio.throttle.read_bps_devicememory.memsw.limit_in_bytes
blkio.throttle.read_iops_devicememory.memsw.max_usage_in_bytes
blkio.throttle.write_bps_devicememory.memsw.usage_in_bytes
blkio.throttle.write_iops_devicememory.move_charge_at_immigrate
blkio.timememory.numa_stat
blkio.weightmemory.oom_control
blkio.weight_devicememory.soft_limit_in_bytes
cgroup.clone_childrenmemory.stat
cgroup.event_controlmemory.swappiness
cgroup.procsmemory.usage_in_bytes
cpuacct.statmemory.use_hierarchy
cpuacct.usagenotify_on_release
cpuacct.usage_percpurelease_agent
cpu.rt_period_ustasks
cpu.rt_runtime_us
修改OpenStackNova配置,將nova-compute.conf裡面的–libvirt_type=kvm改成lxc:
$sudovi/etc/nova/nova-compute.conf
--libvirt_type=lxc
$sudorestartnova-compute
重啟所有novacompute結點上的nova-compute服務,有必要的話重啟所有novacompute結點。
那映象怎麼辦呢?以前為KVM上傳的映象也可以用在LXC上嗎?嗯,可以。下載oneiric-server-cloudimg-amd64.tar.gz解壓並映象到OpenStack:
$wget
$tarzxvfoneiric-server-cloudimg-amd64.tar.gz
$euca-bundle-image-ioneiric-server-cloudimg-amd64.img
$euca-upload-bundle-boneiric-m/tmp/oneiric-server-cloudimg-amd64.img.manifest.xml
$euca-registeroneiric/oneiric-server-cloudimg-amd64.img.manifest.xml
$euca-describe-images
IMAGEami-00000001oneiric/oneiric-server-cloudimg-amd64.img.manifest.xmlavailableprivatex86_64machineinstance-store
$euca-run-instances-kvpsee-tm1.tinyami-00000001
$euca-describe-instances
RESERVATIONr-4bbu7bd7sanbidefault
INSTANCEi-00000001ami-00000001172.16.39.6172.16.39.6runningvpsee(vpseecloud,node00)0m1.tiny2012-01-20T08:04:05Znovaami-00000000ami-00000000
需要注意的是,OpenStack目前不支援混合Hypervisor,也就是說所有novacompute結點上必須使用同一種Hypervisor,不過支援混合Hypervisor的OpenStack正在計劃開發中。
OpenStack幾乎支援現在所有主流的虛擬技術和Hypervisor,如KVM,Hyper-V,LXC,QEMU,UML,VMWareESX/ESXi,Xen/XenServer等,未來還會支援OpenVZ和VirtualBox.不過OpenStack首選的Hypervisor是KVM,OpenStack安裝後預設使用的是KVM(–libvirt_type=kvm),不需要特別配置。如果由於某種原因,比如伺服器CPU不支援IntelVT-x/AMD-V不能使用KVM或者想簡單嘗試一下另外一種Hypervisor怎麼辦呢?方法很容易,1、更改OpenStackNova的配置檔案(–libvirt_type);2、給所有的Compute結點裝上相應的Hypervisor就可以了。以下以LXC為例來說明如何更換OpenStackNova的Hypervisor,LXC使用的是與Xen和KVM完全不同的虛擬技術,和OpenVZ的容器技術有點類似。
首先在所有openstacknovacompute結點上替換現有的nova-compute-kvm到nova-compute-lxc:
$sudoapt-getinstallnova-compute-lxc
LXC使用cgroup檔案系統來限制資源和程序,libvirt需要cgroup檔案系統來執行LXC,我們只要在novacompute上建立一個ctroups目錄並且在/etc/fstab最後加上none/cgroupscgroupcpuacct,memory,devices,cpu,freezer,blkio00這行就可以了,別忘了重啟系統:
$sudomkdir/cgroups
$vi/etc/fstab
none/cgroupscgroupcpuacct,memory,devices,cpu,freezer,blkio00
$sudoreboot
重啟後可以看到/cgroups下面多了很多東西:
$ls/cgroup/
blkio.io_mergedcpu.shares
blkio.io_queueddevices.allow
blkio.io_service_bytesdevices.deny
blkio.io_serviceddevices.list
blkio.io_service_timelibvirt
blkio.io_wait_timememory.failcnt
blkio.reset_statsmemory.force_empty
blkio.sectorsmemory.limit_in_bytes
blkio.throttle.io_service_bytesmemory.max_usage_in_bytes
blkio.throttle.io_servicedmemory.memsw.failcnt
blkio.throttle.read_bps_devicememory.memsw.limit_in_bytes
blkio.throttle.read_iops_devicememory.memsw.max_usage_in_bytes
blkio.throttle.write_bps_devicememory.memsw.usage_in_bytes
blkio.throttle.write_iops_devicememory.move_charge_at_immigrate
blkio.timememory.numa_stat
blkio.weightmemory.oom_control
blkio.weight_devicememory.soft_limit_in_bytes
cgroup.clone_childrenmemory.stat
cgroup.event_controlmemory.swappiness
cgroup.procsmemory.usage_in_bytes
cpuacct.statmemory.use_hierarchy
cpuacct.usagenotify_on_release
cpuacct.usage_percpurelease_agent
cpu.rt_period_ustasks
cpu.rt_runtime_us
修改OpenStackNova配置,將nova-compute.conf裡面的–libvirt_type=kvm改成lxc:
$sudovi/etc/nova/nova-compute.conf
--libvirt_type=lxc
$sudorestartnova-compute
重啟所有novacompute結點上的nova-compute服務,有必要的話重啟所有novacompute結點。
那映象怎麼辦呢?以前為KVM上傳的映象也可以用在LXC上嗎?嗯,可以。下載oneiric-server-cloudimg-amd64.tar.gz解壓並映象到OpenStack:
$wget
$tarzxvfoneiric-server-cloudimg-amd64.tar.gz
$euca-bundle-image-ioneiric-server-cloudimg-amd64.img
$euca-upload-bundle-boneiric-m/tmp/oneiric-server-cloudimg-amd64.img.manifest.xml
$euca-registeroneiric/oneiric-server-cloudimg-amd64.img.manifest.xml
$euca-describe-images
IMAGEami-00000001oneiric/oneiric-server-cloudimg-amd64.img.manifest.xmlavailableprivatex86_64machineinstance-store
$euca-run-instances-kvpsee-tm1.tinyami-00000001
$euca-describe-instances
RESERVATIONr-4bbu7bd7sanbidefault
INSTANCEi-00000001ami-00000001172.16.39.6172.16.39.6runningvpsee(vpseecloud,node00)0m1.tiny2012-01-20T08:04:05Znovaami-00000000ami-00000000
需要注意的是,OpenStack目前不支援混合Hypervisor,也就是說所有novacompute結點上必須使用同一種Hypervisor,不過支援混合Hypervisor的OpenStack正在計劃開發中。