oVirt专题:Hosted Engine之Engine Appliance制作

oVirt v3.4开始支持Hosted Engine。什么是Hosted Engine呢?很简单,以前的管理节点是部署在一台物理机器上的,现在我们将管理节点部署到一台虚拟机中,并且这台虚拟机运行在oVirt虚拟化环境中的计算节点上。以前是先部署管理节点,然后部署计算节点,最后把计算节点注册到管理节点,这时通过WEB管理平台可以在计算节点上运行虚拟机。现在的需要先部署计算节点,然后在计算节点上起虚机部署管理节点。先后顺序有了变化。

前面提到需要将管理节点部署在一台虚拟机中,既然是虚拟机,那么我们可以提前制作一个管理节点虚拟机模板——Engine Appliance,提前在虚拟机中安装好系统及管理节点需要的软件包,在部署oVirt虚拟化环境时直接基于该模板创建一台虚拟机,在虚拟机中执行engine-setup命令进行配置即可完成管理节点部署。这样我们可以节约管理节点部署的时间,实现虚拟化环境的快速部署。



Engine Appliance如何制作?oVirt社区ovirt-appliance项目为我们提供了制作工具。下面介绍下基于该工具制作Engine Appliance的方法:

一、环境准备

需要准备一台能够连接互联网的机器(需要开启CPU虚拟化支持),内存需要大于5G,磁盘可用空间大于10G;准备CentOS7(6中缺少必要的lorax包)的安装介质。

二、制作环境搭建

(1)安装CentOS7系统

(2)安装依赖包(需要配置epel7的软件源)

# yum -y install lorax pykickstart virt-install libguestfs-tools imagefactory oz
# yum -y groupinstall Virtualization Host

(3)将SELinux设置为Permissive模式

# setenforce 0
# sed -i "s/^SELINUX.*/SELINUX=permissive/g" /etc/sysconfig/selinux

三、制作appliance

(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 imagefactory_plugins.ovfcommon.ovfcommon import RHEVOVFPackage
  File "/tmp/ovirt-appliance/engine-appliance/imagefactory/imagefactory_plugins/ovfcommon/ovfcommon.py", line 28, in <module>
    from imgfac.PersistentImageManager import PersistentImageManager
  File "/tmp/ovirt-appliance/engine-appliance/imagefactory/imgfac/PersistentImageManager.py", line 17, in <module>
    from ApplicationConfiguration import ApplicationConfiguration
  File "/tmp/ovirt-appliance/engine-appliance/imagefactory/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/imagefactory/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/images/poor-mans-lmc-centos7.makefile(定义变量,执行run-install)-->run-install(定义变量,调用qemu-kvm命令,读取ks文件,安装一个系统,制作qcow2格式的文件)-->返回第一个make继续调用scripts/create_ova.py脚本制作ova文件

相关文件分析:

(1)MakeFile

MAIN_NAME ?= ovirt-appliance-centos7    #定义文件名

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)/imagefactory/" 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 $< > [email protected]
        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"                 [email protected]

%.qcow2: %.ks    #制作qcow2格式模板文件
        make -f imgbased/data/images/poor-mans-lmc-centos7.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 "[email protected]"    #将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" "[email protected]"

clean: clean-log    #清除log
        echo

clean-log:
        rm -f *.log    #删除log文件

(2)poor-mans-lmc-centos7.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命令附加选项

CENTOS_RELEASEVER = 7    #定义版本
CENTOS_ANACONDA_RELEASEVER = 7    #定义Anaconda版本
CENTOS_URL = http://192.168.3.239/mirrors/CentOS/7/os/x86_64/    #定义CentOS dvd镜像URL
CENTOS_ANACONDA_URL = $(CENTOS_URL)    #定义Anaconda URL

ifneq ($(CENTOS_RELEASEVER), $(CENTOS_ANACONDA_RELEASEVER))
CENTOS_ANACONDA_URL = http://192.168.3.239/mirrors/CentOS/7/os/x86_64/
endif

SHELL = /bin/bash

.INTERMEDIATE: spawned_pids

vmlinuz:    #定义vmlinuz文件位置
        $(CURL) $(CENTOS_ANACONDA_URL)/isolinux/vmlinuz

initrd.img:    #定义initrd.img文件位置
        $(CURL) $(CENTOS_ANACONDA_URL)/isolinux/initrd.img

squashfs.img:    #定义squashfs.img文件位置
        $(CURL) $(CENTOS_ANACONDA_URL)/LiveOS/squashfs.img

define TREEINFO    #定义TreeInfo信息
[general]
name = CentOS-$(CENTOS_RELEASEVER)
family = CentOS
variant = CentOS
version = $(CENTOS_RELEASEVER)
packagedir =
arch = x86_64

[stage2]
mainimage = squashfs.img

[images-x86_64]
kernel = vmlinuz
initrd = initrd.img
endef

.PHONY: .treeinfo
export TREEINFO
.treeinfo:
        echo -e "$$TREEINFO" > [email protected]

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=$(CENTOS_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)
时间: 2024-08-06 20:07:07

oVirt专题:Hosted Engine之Engine Appliance制作的相关文章

oVirt专题:Hosted Engine之Engine Appliance使用(1)

前文中介绍了如何制作Engine Appliance.当Appliance制作好以后,如何使用它呢?下面就来详细介绍下Engine Appliance的使用方法. 首先,我们需要一台物理服务器,在这服务器上要先安装好CentOS7.0的操作系统.然后根据以下步骤进行配置: (1)配置网络 IP:192.168.14.67 NETMASK:255.255.252.0 GATEWAY:192.168.14.1 (2)配置域名解析 192.168.14.67      node.test 192.16

oVirt专题:Hosted Engine之Engine Appliance使用(3)

(6)Engine VM操作流程     a.配置网络 IP:192.168.14.77 NETMASK:255.255.252.0 GATEWAY:192.168.14.1 b.配置域名解析 192.168.14.67      node.test 192.168.14.77      engine.test c.执行命令,部署engine # engine-setup --config-append=/root/ovirt-engine-answers --offline        #(

oVirt专题:Hosted Engine之Engine Appliance使用(2)

(5)执行命令,部署hosted-engine # hosted-engine --deploy [ INFO  ] Stage: Initializing           Continuing will configure this host for serving as hypervisor and create  a VM where you have to install oVirt Engine afterwards.           Are you sure you want

第四季-专题3-嵌入式Linux内核制作

专题3-嵌入式Linux内核制作 一.linux内核简介 系统架构 (1)Linux系统是怎么构成的? (2)为什么linux系统分为了用户空间和内核空间? 现代CPU通常实现了不同的工作模式,以ARM为例,就实现了7中工作模式: 用户模式(usr),快速中断(fiq),外部中断(irq).管理模式(svc),数据访问中止(abt),系统模式(sys),未定义指令异常(und). X86也实现了4个不同的级别:Ring0-Ring3.Ring0下,可以执行特权指令,可以访问IO设备等,在RIng

oVirt专题:Hosted Engine之Engine Appliance制作(2)

下面来分析下自动安装虚机时用到的ks文件: 默认情况下,整个自动安装过程会涉及到4个ks文件,但是我们可以根据我们的实际情况及需求进行灵活调整. (1)ovirt-appliance-fedora.ks.tpl **导入fedora-cloud-base.ks文件内容** %include fedora-spin-kickstarts/fedora-cloud-base.ks # # Repos # # baseurl variant #url --url=http://download.fed

engine.io分析1--socket.io的基石

转载请注明: TheViper http://www.cnblogs.com/TheViper 在上一篇socket.io迁移指南中提到过一点engine.io.engine.io是socket.io 1.x的抽象,核心. 特点: Maximum reliability(最大的可靠性) 即使在下列情况下,仍然可以建立连接: 1.代理,或负载均衡. 2.存在个人的防火墙,杀毒软件. Minimal client size(最小的客户端) 1.对flash传输方式懒加载 2.去除了冗余的传输方式 S

engine.io分析2--socket.io的基石

转载请注明: TheViper http://www.cnblogs.com/TheViper 源码分析 var engine = require('./node_modules/engine.io/lib/engine.io.js'); var server = engine.listen(8000,{ transports:['polling'] }); server.on('connection', function(socket){ socket.send('utf 8 string')

tomcat(13)Host和Engine容器

[0]README 0.1)本文部分文字描述转自 "how tomcat works",旨在学习 "tomcat(13)Host和Engine容器" 的基础知识: 0.2)Host容器:若你想在同一个tomcat部署 上运行多个Context 容器的话,就需要使用 Host 容器:它是Context容器的父容器:(干货--若你想在同一个tomcat部署 上运行多个Context 容器的话,就需要使用 Host 容器,Host容器表示包含有一个或多个 Context容

使用 Codec Engine 的 API 函数(七)

本文翻译自TI的手册,该手册是学习GPP+DSP开发的金典文档,希望对各位入门有所帮助,有理解不当之处望请赐教. Codec Engine Application Developer User's Guide.pdf (Literature Number: SPRUE67D) <Codec Engine 应用开发使用手册>           http://blog.csdn.net/dyzok88/article/details/42154487 <第一章 Codec Engine 概