-------------------
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. 【ES6】蛋疼

  2. Windows下运行Hadoop

    Windows下运行Hadoop,通常有两种方式:一种是用VM方式安装一个Linux操作系统,这样基本可以实现全Linux环境的Hadoop运行:另一种是通过Cygwin模拟Linux环境.后者的好处 ...

  3. 【java反射】Class类型的相关操作演练

    [一]获取范型接口的实现类的范型类型 (1)范型接口 package org.springframework.context; import java.util.EventListener; publ ...

  4. 洛谷P2661 信息传递

    传送门 题目大意:每个人每一轮可以把消息传给另一个人,问几轮后某个人可以从人 听到自己的消息. 题解:tarjian缩点,求缩点后缩的点包含的最少的点个数. 代码: 正解 #include<io ...

  5. [BZOJ]4034: [HAOI2015]树上操作

    [HAOI2015]树上操作 传送门 题目大意:三个操作 1:a,b,c b节点权值+c 2:a,b,c 以b为根的子树节点权值全部+c 3:a,b 查询b到根路径的权值和. 题解:树链剖分 操作1 ...

  6. yield关键字用法与解析(C# 参考)

    yield 关键字向编译器指示它所在的方法是迭代器块. 编译器生成一个类来实现迭代器块中表示的行为. 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返 ...

  7. 10 Things ASP.NET Developers Should Know About Web.config Inheritance and Overrides(转)

    10 Things ASP.NET Developers Should Know About Web.config Inheritance and Overrides Wednesday, Janua ...

  8. Volley请求图片

    ImageRequest imageRequest = new ImageRequest(Config.USER_ASSETS_URL + md5(userid) + "/images/av ...

  9. mybatis返回Date类型数据 格式化

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") public Date getC ...

  10. 执行 rails server 报错 Could not find a JavaScript runtime

    修改第15行 # gem 'therubyracer', platforms: :ruby 去掉注释 执行 bundle install