-------------------
OpenNebula 深入分析
-------------------

#容量清单

属性 描述
NAME 如果名字是空的,那么默认名字是:one-<VID>
MEMORY 单位是Mb,是为虚拟机RAM分配的内存大小
CPU Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.
VCPU Number of virtual cpus. This value is optional, the default hypervisor behavior is used, usually one virtual CPU

#镜像类型
opennebula有三种类型的镜像,可以通过oneimage chtype改变镜像的类型。
OS:此种镜像包含一个完整的os,每一个virtual template必须包含一个OS型的镜像作为root disk
CDROM:此种镜像包含只读的数据
DATABLOCK:此种镜像作为数据的存储,能够被不同的vm访问和修改

当镜像状态处于Error状态时,重新Enable 转为Ready状态

#镜像加入Context后,创建VM报错
=======================================================================================
Thu Aug 7 22:17:06 2014 [DiM][I]: New VM state is ACTIVE.
Thu Aug 7 22:17:06 2014 [LCM][I]: New VM state is PROLOG.
Thu Aug 7 22:17:07 2014 [LCM][I]: New VM state is BOOT
Thu Aug 7 22:17:07 2014 [VMM][I]: Generating deployment file: /var/lib/one/opennebula/var/vms/213/deployment.0
Thu Aug 7 22:17:07 2014 [VMM][I]: ExitCode: 0
Thu Aug 7 22:17:07 2014 [VMM][I]: Successfully execute network driver operation: pre.
Thu Aug 7 22:17:09 2014 [VMM][I]: Command execution fail: cat << EOT | /var/tmp/one/vmm/xen4/deploy '/var/lib/one/opennebula/var/datastores/0/213/deployment.0' '192.168.70.70' 213 192.168.70.70
Thu Aug 7 22:17:09 2014 [VMM][I]: Error: Block device type "raw" is invalid.
Thu Aug 7 22:17:09 2014 [VMM][E]: Unable
Thu Aug 7 22:17:09 2014 [VMM][I]: ExitCode: 1
Thu Aug 7 22:17:09 2014 [VMM][I]: Failed to execute virtualization driver operation: deploy.
Thu Aug 7 22:17:09 2014 [VMM][E]: Error deploying virtual machine: Unable
Thu Aug 7 22:17:09 2014 [DiM][I]: New VM state is FAILED
=========================================================================================

#VNC日志
=========================================================================================
378: 192.168.21.52: Plain non-SSL (ws://) WebSocket connection
378: 192.168.21.52: Version hybi-13, base64: 'False'
378: 192.168.21.52: Path: '/?token=2cga46s9piy1cde4qggj'
378: connecting to: 192.168.70.70:6105
385: handler exception: (9, 'Bad file descriptor')
379: 192.168.21.52: Plain non-SSL (ws://) WebSocket connection
379: 192.168.21.52: Version hybi-13, base64: 'False'
379: 192.168.21.52: Path: '/?token=gokz7mftkedb0x09l084'
379: connecting to: 192.168.70.70:6104
373: 192.168.21.52: Plain non-SSL (ws://) WebSocket connection
373: 192.168.21.52: Version hybi-13, base64: 'False'
373: 192.168.21.52: Path: '/?token=30qt4r6tmg0ldklbzslf'
373: connecting to: 192.168.70.70:6105
==========================================================================================

#OpenNebula Context
>在iaas平台中,当用户创建一个虚拟机后,必须按照用户自定义的信息对虚拟机进行初始化,比如:主机名,用户名/密码,ip地址,mac地址等,另外,可能用户还想在虚拟机启动后,某些服务就已经被自动配置好了,比如ssh登录等。 所有这些对Virtual Machine的定制,在opennebula中是通过一个叫Context iso的文件来完成的。

>1. context iso的原理和功能
opennebula把所有的用户对Virtual Machine的定制化信息都做成一个iso文件,然后在Virtual Machine启动的时候,将此iso文件挂载到VM的光驱中,然后执行光驱中的相对应的脚本来完成对VM的定制,整个过程非常类似VMWare的vmware-tools。

>2. context iso的生成过程
opennebula生成context iso是由/opennebula-4.6.0/src/tm_mad/common/context脚本来实现的,下面详细分析此脚本的内容。

#md5码
>MD5中的MD代表Message Digest,就是信息摘要的意思,不过这个信息摘要不是信息内容的缩写,而是根据公开的MD5算法对原信息进行数学变换后得到的一个128位(bit)的特征码。

#Alpine Linux
http://alpinelinux.org/
#radvd
http://www.litech.org/radvd/

#如何让 OpenNebula 虚拟机自动获得 IP 等网络配置信息?
>制作完 OpenNebula 的 Ubuntu 虚拟机镜像后需要对镜像配置一下以适应所在的网络运行环境,因为我们的 OpenNebula 虚拟机使用的是网桥的方式,所以虚拟机启动后会使用现有网络,并企图从 DHCP 服务器那里获得 IP 地址,如果 DHCP 服务器不做绑定的话这样随便获得的 IP 地址并不符合我们在 small_network.net (onevnet create small_network.net) 定义的要求,我们希望虚拟机启动后能从 small_network.net 这个网络配置文件中获得相应的 IP 地址。OpenNebula 里面的 Contextualizing 部分就是用来对付这种情况的,不过 VPSee 在这里介绍一个更简单的偷懒办法:直接用一个启动脚本来搞定。OpenNebula 已经为我们准备了类似的脚本,只需要根据自己的要求调整一下就可以了,这里介绍 for ubuntu 和 for centos 两个版本的脚本,还有 for debian 和 opensuse 的。

>Ubuntu 虚拟机
下载 for ubuntu 的 context 文件后放在合适的地方,这个脚本有点问题需要在下载的 vmcontext.sh 文件最后加上重启网络(/etc/init.d/networking restart)这行:

$ wget http://dev.opennebula.org/attachments/download/378/vmcontext.sh
$ sudo -i
# mv vmcontext.sh /etc/init.d/vmcontext
# chmod +x /etc/init.d/vmcontext
# ln -sf /etc/init.d/vmcontext /etc/rc2.d/S01vmcontext
# echo "/etc/init.d/networking restart" >> /etc/init.d/vmcontext
CentOS 虚拟机
下载 for centos 的 context 文件后放在合适的地方:
# wget http://dev.opennebula.org/projects/opennebula/repository/revisions/master/raw/share/scripts/centos-5/net-vmcontext/vmcontext
# mv vmcontext.sh /etc/init.d/vmcontext
# chmod +x /etc/init.d/vmcontext
# chkconfig --add vmcontext
# reboot
还记得上次说的给 OpenNebula 虚拟机增加 swap 分区的问题吗,直接把激活 swap 的部分放在 vmcontext 里就不必每次创建虚拟机后再增加 swap 的繁琐工作了。

##模板Context中配置驱动错误日志
=========================================================================================
Fri Aug 8 01:39:46 2014 [DiM][I]: New VM state is ACTIVE.
Fri Aug 8 01:39:46 2014 [LCM][I]: New VM state is PROLOG.
Fri Aug 8 01:39:47 2014 [LCM][I]: New VM state is BOOT
Fri Aug 8 01:39:47 2014 [VMM][I]: Generating deployment file: /var/lib/one/opennebula/var/vms/224/deployment.0
Fri Aug 8 01:39:47 2014 [VMM][I]: ExitCode: 0
Fri Aug 8 01:39:47 2014 [VMM][I]: Successfully execute network driver operation: pre.
Fri Aug 8 01:39:49 2014 [VMM][I]: Command execution fail: cat << EOT | /var/tmp/one/vmm/xen4/deploy '/var/lib/one/opennebula/var//datastores/0/224/deployment.0' '192.168.70.70' 224 192.168.70.70
Fri Aug 8 01:39:49 2014 [VMM][I]: Error: Device 51728 (vbd) could not be connected. /var/lib/one/opennebula/var//datastores/0/224/disk.2 is not a block device.
Fri Aug 8 01:39:49 2014 [VMM][E]: Unable
Fri Aug 8 01:39:49 2014 [VMM][I]: ExitCode: 1
Fri Aug 8 01:39:49 2014 [VMM][I]: Failed to execute virtualization driver operation: deploy.
Fri Aug 8 01:39:49 2014 [VMM][E]: Error deploying virtual machine: Unable
Fri Aug 8 01:39:49 2014 [DiM][I]: New VM state is FAILED
=========================================================================================

###cdrom是sr0的软链接

###Xen 命令
xm create deployment.0

xedit xen-tmem-list-parse xenlockprof xenstore-exists xentop
xen-bugtool xen-vmresync xenmon.py xenstore-list xentrace
xen-destroy xenalyze xenperf xenstore-ls xentrace_format
xen-hptool xenalyze.dump-raw xenpm xenstore-read xentrace_setmask
xen-hvmcrash xenbaked xenpmd xenstore-rm xentrace_setsize
xen-hvmctx xencons xenstore xenstore-watch xenwatchdogd
xen-list xenconsoled xenstore-chmod xenstore-write xev
xen-python-path xend xenstore-control xenstored xeyes

####解决not a block device,
######设置TARGET:xvdc:cdrom
######设置DRIVER:file

linux-xen01:/var/lib/one/opennebula/var/datastores/0/226 # cat d
deployment.0 disk.0 disk.1 disk.2 disk.2.iso
linux-xen01:/var/lib/one/opennebula/var/datastores/0/226 # cat deployment.0
name = 'one-226'
#O CPU_CREDITS = 256
memory = '2048'
builder = 'hvm'
boot = 'c'
disk = [
'file:/var/lib/one/opennebula/var//datastores/0/226/disk.0,xvdb,w',
'file:/var/lib/one/opennebula/var//datastores/0/226/disk.1,xvda,w',
'file:/var/lib/one/opennebula/var//datastores/0/226/disk.2,xvdc:cdrom,r',
]
vif = [
' mac=02:00:c0:a8:46:96,ip=192.168.70.150,bridge=br0',
]
vnc = '1'
vnclisten = '0.0.0.0'
vncunused = '0'
vncdisplay = '226'

##模板Context
#!/bin/sh -e
mount -t iso9660 /dev/sdc /mnt
if [ -f /mnt/context.sh ]; then
. /mnt/init.sh
fi
umount /mnt
exit 0

##VM创建流程
- 上传镜像到存储

- 利用已经上传的镜像,制作一个包含ISO镜像的模板,同时该模板包括一个数据盘(此数据盘用于系统安装后的RootDisk)

- 通过该模板创建一个虚拟机

- 将此时安装的虚拟机删除掉(因为之前配置的DataBlock是设置了持久化的)

- 将原来安装了系统的Datablock 的镜像类型改为OS类型,并将持久化改为非持久化(以便持续对该OS使用,但是非持久化比持久化创建VM要慢很多)

OpenNebula 深入分析的更多相关文章

  1. 深入分析Spring 与 Spring MVC容器

    1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...

  2. Linux堆内存管理深入分析(下)

     Linux堆内存管理深入分析 (下半部) 作者@走位,阿里聚安全 0 前言回顾 在上一篇文章中(链接见文章底部),详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分 ...

  3. Linux堆内存管理深入分析(上)

    Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全   0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...

  4. 深入分析@Transactional的用法

    关键词:事务, 编程式事务,声明式事务.spring 事务管理.AOP事务增强.@Transactional 在分析深入分析@Transactional的使用之前,我们先回顾一下事务的一些基本内容. ...

  5. Javascript是单线程的深入分析

    本来想总结一下的,网上却发现有人已经解释的很清楚了,特转过来. 这也解释了为什么在用自动化测试工具来运行dumrendtree时设定的超时和测试case设定的超时的关联性. 面试的时候发现99%的童鞋 ...

  6. 并发编程 20—— AbstractQueuedSynchronizer 深入分析

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  7. 深入分析PHP优化及注意事项

    深入分析PHP优化及注意事项 1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显 ...

  8. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  9. 深入分析 Java 中的中文编码问题

    登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Del ...

随机推荐

  1. 类里边的构造函数可以被private修饰,在类的内部创建对象。利用这种特性创建单类模式

  2. 数据结构之最小生成树Prim算法

    普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树算法 基本思想:对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最 ...

  3. linux之epoll

    1. epoll简介 epoll 是Linux内核中的一种可扩展IO事件处理机制,最早在 Linux 2.5.44内核中引入,可被用于代替POSIX select 和 poll 系统调用,并且在具有大 ...

  4. bzoj 1220 跳蚤

    Written with StackEdit. Description \(Z\)城市居住着很多只跳蚤.在\(Z\)城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以 ...

  5. CentOS虚拟机中安装VMWare Tools

    1.单击VMWare的[虚拟机]菜单,选择[安装VMWare Tools]命令 2.接着CentOS系统会自动挂载VMWare  Tools,并自动打开,如果没有打开可以自己去图形界面打开VMWare ...

  6. 转: django数据库操作-增删改查-多对多关系以及一对多(外键)关系

    原文链接:http://blog.csdn.net/u010271717/article/details/22044415 一.一对多(外键) 例子:一个作者对应多本书,一本书只有一个作者 model ...

  7. yarn 管理nextjs 项目

     预备环境 nodejs npm 1. yarn 安装 npm install -g yarn 2. nextjs 项目初始化 yarn add next react react-dom 3. 配置n ...

  8. 一步一步建立 webpack 4 项目

    一步一步建立 webpack 4 项目 cnpm init -y cnpm i webpack --save-dev cnpm i webpack-cli --save-dev 修改 package. ...

  9. JGroups 入门实践

    前言 JGroups是一个开源的纯java编写的可靠的群组通讯工具.其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展.其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈. JGroup ...

  10. log4net内部调试开启

    最近用log4net写入日志到mysql数据库,死活写不进去,就想能不能看log4net的错误记录,在网上一找,还真有:开启log4net的内部调试,作个记录: <appSettings> ...