oVirt v3.4開始支持Hosted Engine。什麼是Hosted Engine呢?很簡單,之前的管理節點是部署在一臺物理機器上的,如今咱們將管理節點部署到一臺虛擬機中,而且這臺虛擬機運行在oVirt虛擬化環境中的計算節點上。之前是先部署管理節點,而後部署計算節點,最後把計算節點註冊到管理節點,這時經過WEB管理平臺能夠在計算節點上運行虛擬機。如今的須要先部署計算節點,而後在計算節點上起虛機部署管理節點。前後順序有了變化。python
前面提到須要將管理節點部署在一臺虛擬機中,既然是虛擬機,那麼咱們能夠提早製做一個管理節點虛擬機模板——Engine Appliance,提早在虛擬機中安裝好系統及管理節點須要的軟件包,在部署oVirt虛擬化環境時直接基於該模板建立一臺虛擬機,在虛擬機中執行engine-setup命令進行配置便可完成管理節點部署。這樣咱們能夠節約管理節點部署的時間,實現虛擬化環境的快速部署。linux
Engine Appliance如何製做?oVirt社區ovirt-appliance項目爲咱們提供了製做工具。下面介紹下基於該工具製做Engine Appliance的方法:git
1、環境準備
github
須要準備一臺可以鏈接互聯網的機器(須要開啓CPU虛擬化支持),內存須要大於5G,磁盤可用空間大於10G;準備CentOS7(6中缺乏必要的lorax包)的安裝介質。
shell
2、製做環境搭建bash
(1)安裝CentOS7系統架構
(2)安裝依賴包(須要配置epel7的軟件源)app
# yum -y install lorax pykickstart virt-install libguestfs-tools p_w_picpathfactory oz # yum -y groupinstall Virtualization Host
(3)將SELinux設置爲Permissive模式python2.7
# setenforce 0 # sed -i "s/^SELINUX.*/SELINUX=permissive/g" /etc/sysconfig/selinux
3、製做appliance
ssh
(1)下載ovirt-appliance包,準備appliance製做環境
# cd /tmp/ # git clone git://gerrit.ovirt.org/ovirt-appliance # cd ovirt-appliance # git submodule update --init # cd engine-appliance
(2)製做appliance
(2.1)raw格式(輸出文件爲ovirt-appliance-fedora.raw)
# make ovirt-appliance-fedora.raw
(2.2)ova格式(輸出文件爲ovirt-appliance-fedora.ova)
# make
Note:此時咱們就能夠獲得raw或ova格式的Engine Appliance文件,該文件能夠在Hosted Engine部署時做爲管理節點虛擬機模板來使用。
常見錯誤解決辦法:
(1)導入Version模塊錯誤,以下:
Traceback (most recent call last): File "scripts/create_ova.py", line 4, in <module> from p_w_picpathfactory_plugins.ovfcommon.ovfcommon import RHEVOVFPackage File "/tmp/ovirt-appliance/engine-appliance/p_w_picpathfactory/p_w_picpathfactory_plugins/ovfcommon/ovfcommon.py", line 28, in <module> from imgfac.PersistentImageManager import PersistentImageManager File "/tmp/ovirt-appliance/engine-appliance/p_w_picpathfactory/imgfac/PersistentImageManager.py", line 17, in <module> from ApplicationConfiguration import ApplicationConfiguration File "/tmp/ovirt-appliance/engine-appliance/p_w_picpathfactory/imgfac/ApplicationConfiguration.py", line 25, in <module> from imgfac.Version import VERSION as VERSION ImportError: No module named Version make: *** [ovirt-appliance-fedora.ova] 錯誤 1
解決辦法:
# cp /usr/lib/python2.7/site-packages/imgfac/Version.py /tmp/ovirt-appliance/engine-appliance/p_w_picpathfactory/imgfac/
(2)沒有找到qemu-kvm命令,以下
kill $(cat spawned_pids) /bin/bash:行1: qemu-kvm: 未找到命令 make[1]: 離開目錄「/tmp/ovirt-appliance/engine-appliance」
解決辦法:
ln -s /usr/libexec/qemu-kvm /bin/
Engine Appliance製做工具分析:
經過上面的製做方法咱們能夠了解到,Engine Appliance的製做方法是徹底自動化的,若是咱們想要對Engine Appliance作一些自定義的配置,應該如何實現呢?
首先介紹下工具的工做流程:
執行make命令-->調用MakeFile(定義變量,嵌套第二個make)-->make -f imgbased/data/p_w_picpaths/poor-mans-lmc.makefile(定義變量,執行run-install)-->run-install(定義變量,調用qemu-kvm命令,讀取ks文件,安裝一個系統,製做qcow2格式的文件)-->返回第一個make繼續調用scripts/create_ova.py腳本製做ova文件
相關文件分析:
(1)MakeFile
MAIN_NAME ?= ovirt-appliance-fedora #定義文件名 VM_CPUS ?= 2 #定義虛擬機CPU數量 VM_RAM ?= 4096 #定義虛擬機RAM大小(M) VM_DISK ?= 8000 #定義虛擬機DISK大小(M) OVA_RAM ?= 4096 #定義OVA模板RAM大小(M) OVA_CPUS ?= $(VM_CPUS) #定義OVA模板CPU數量 ARCH := x86_64 #定義架構 RELEASEVER := 7 #定義版本 PYTHON ?= PYTHONPATH="$(PWD)/p_w_picpathfactory/" python #定義Python環境變量 CURL ?= curl #定義CURL工具 .SECONDARY: .PHONY:$(MAIN_NAME).ks.tpl #定義ks模板文件名稱 .INTERMEDIATE: hda.qcow2 #定義虛擬機磁盤文件名 all: $(MAIN_NAME).ova echo "$(MAIN_NAME)" appliance done %.ks: %.ks.tpl #基於ks模板,拼合生成ks文件(修改一些ks文件信息) ksflatten $< > $@ sed -i \ -e "/^[-]/ d" \ -e "/^text/ d" \ -e "s/^part .*/part \/ --size $(VM_DISK) --fstype ext4 --fsoptions discard/" \ -e "s/^network .*/network --activate/" \ -e "s/^%packages.*/%packages --ignoremissing/" \ -e "/default\.target/ s/^/#/" \ -e "/RUN_FIRSTBOOT/ s/^/#/" \ -e "/remove authconfig/ s/^/#/" \ -e "/remove linux-firmware/ s/^/#/" \ -e "/remove firewalld/ s/^/#/" \ -e "/^bootloader/ s/bootloader .*/bootloader --location=mbr --timeout=1/" \ -e "/rawhide/ s/^/#/" \ -e "/^reboot/ s/reboot/poweroff/" \ -e "/^services/ s/sshd/sshd,initial-setup-text/" \ -e "/^firstboot/ s/$$/ --reconfig/" \ -e "s#\$$basearch#$(ARCH)#g" \ -e "s#\$$releasever#$(RELEASEVER)#g" \ $@ %.qcow2: %.ks #製做qcow2格式模板文件 make -f imgbased/data/p_w_picpaths/poor-mans-lmc.makefile \ #執行第二次make KICKSTART="$<" \ RELEASEVER=$(RELEASEVER) \ QEMU_APPEND="cmdline $(QEMU_APPEND)" \ DISK_SIZE=$$(( $(VM_DISK) / 1000 ))G \ run-install #執行run-install,製做hda.qcow2文件 qemu-img convert -O qcow2 hda.qcow2 "$@" #將hda.qcow2文件轉換爲qcow2格式並從新命名 rm -f hda.qcow2 #刪除hda.qcow2文件(該文件爲中間文件,此後已不須要) %.ova: %.qcow2 #調用scripts/create_ova.py,製做ova格式模板文件 $(SUDO) $(PYTHON) scripts/create_ova.py -m $(OVA_RAM) -c $(OVA_CPUS) "$*.qcow2" "$@" clean: clean-log #清除log echo clean-log: rm -f *.log #刪除log文件
(2)poor-mans-lmc.makefile
KICKSTART = kickstarts/runtime-layout.ks #須要再研究下文件是否會被調用 DISK_NAME = hda.qcow2 #定義虛擬機磁盤文件名 DISK_SIZE = 10G #定義虛擬機磁盤大小 VM_RAM = 2048 #定義虛擬機內存 VM_SMP = 4 QEMU = qemu-kvm #定義QEMU工具 QEMU_APPEND = #QEMU附加信息 CURL = curl -L -O #CURL命令附加選項 FEDORA_RELEASEVER = 7 #定義版本 FEDORA_ANACONDA_RELEASEVER = 7 #定義Anaconda版本 FEDORA_URL = http://192.168.3.239/mirrors/Fedora/19/os/x86_64/ #定義FEDORA dvd鏡像URL FEDORA_ANACONDA_URL = $(FEDORA_URL) #定義Anaconda URL ifneq ($(FEDORA_RELEASEVER), $(FEDORA_ANACONDA_RELEASEVER)) FEDORA_ANACONDA_URL = http://192.168.3.239/mirrors/Fedora/19/os/x86_64/ endif SHELL = /bin/bash .INTERMEDIATE: spawned_pids vmlinuz: #定義vmlinuz文件位置 $(CURL) $(FEDORA_ANACONDA_URL)/isolinux/vmlinuz initrd.img: #定義initrd.img文件位置 $(CURL) $(FEDORA_ANACONDA_URL)/isolinux/initrd.img squashfs.img: #定義squashfs.img文件位置 $(CURL) $(FEDORA_ANACONDA_URL)/LiveOS/squashfs.img define TREEINFO #定義TreeInfo信息 [general] name = Fedora-$(FEDORA_RELEASEVER) family = Fedora variant = Fedora version = $(FEDORA_RELEASEVER) packagedir = arch = x86_64 [stage2] mainp_w_picpath = squashfs.img [p_w_picpaths-x86_64] kernel = vmlinuz initrd = initrd.img endef .PHONY: .treeinfo export TREEINFO .treeinfo: echo -e "$$TREEINFO" > $@ run-install: PYPORT:=$(shell echo $$(( 50000 + $$RANDOM % 15000 )) ) run-install: vmlinuz initrd.img squashfs.img .treeinfo $(KICKSTART) python -m SimpleHTTPServer $(PYPORT) & echo $$! > spawned_pids qemu-img create -f qcow2 $(DISK_NAME) $(DISK_SIZE) $(QEMU) \ #調用qemu-kvm啓動虛擬機,根據ks文件配置自動安裝系統並進行相關配置 -vnc 0.0.0.0:7 \ -serial stdio \ -smp $(VM_SMP) -m $(VM_RAM) \ -hda $(DISK_NAME) \ -kernel vmlinuz \ -initrd initrd.img \ -append "console=ttyS0 inst.repo=$(FEDORA_URL) inst.ks=http://10.0.2.2:$(PYPORT)/$(KICKSTART) inst.stage2=http://10.0.2.2:$(PYPORT)/ quiet $(QEMU_APPEND)" ; \ kill $$(cat spawned_pids)
文中若有錯誤,歡迎看客指正。