OpenNebula 深入分析
-------------------
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 深入分析的更多相关文章
- 深入分析Spring 与 Spring MVC容器
1 Spring MVC WEB配置 Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext, ...
- Linux堆内存管理深入分析(下)
Linux堆内存管理深入分析 (下半部) 作者@走位,阿里聚安全 0 前言回顾 在上一篇文章中(链接见文章底部),详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分 ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...
- 深入分析@Transactional的用法
关键词:事务, 编程式事务,声明式事务.spring 事务管理.AOP事务增强.@Transactional 在分析深入分析@Transactional的使用之前,我们先回顾一下事务的一些基本内容. ...
- Javascript是单线程的深入分析
本来想总结一下的,网上却发现有人已经解释的很清楚了,特转过来. 这也解释了为什么在用自动化测试工具来运行dumrendtree时设定的超时和测试case设定的超时的关联性. 面试的时候发现99%的童鞋 ...
- 并发编程 20—— AbstractQueuedSynchronizer 深入分析
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...
- 深入分析PHP优化及注意事项
深入分析PHP优化及注意事项 1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍. 当然了,这个测试方法需要在十万级以上次执行,效果才明显 ...
- 深入分析Java Web技术内幕(修订版)
阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著 ISBN 978-7-121- ...
- 深入分析 Java 中的中文编码问题
登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Del ...
随机推荐
- Linux部分常用命令学习(一)
什么是linux命令? 是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样. 属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++语言写成的程序, 也可以是由脚本语言写 ...
- Java中数据库连接池原理机制的详细讲解(转)
连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池 (Resource Pool).该模 ...
- C++之内核对象进行线程同步
用户模式下的线程同步机制提供了非常好的性能,但他们也的确存在一些局限性,而且不适用于许多应用程序,例如,对Interlocked系列函数只能对一个值进行操作,它们从来不会把线程切换到等待状态.我们可以 ...
- 简直offer-第四章解决面试题思路(二叉树中和为某一值的路径)
题目:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点往下一直到叶子节点形成一条路径. 思路:很明显用前序遍历可以从根节点开始遍历到叶子节点,然后将遍历的节点添加到 ...
- 【转】C#中的线程 入门
Keywords:C# 线程 Source:http://www.albahari.com/threading/ Author: Joe Albahari Translator: Swanky Wu ...
- ACM学习历程—HihoCoder1309任务分配(排序 && 贪心)
http://hihocoder.com/problemset/problem/1309 题目大意是给定n个任务的起始时间,求问最少需要多少台机器. 有一个贪心的策略就是,如果说对于一个任务结束,必然 ...
- Python 函数 set()
set() 功能: set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. iterable -- 可迭代对象对象:返回新的集合对象. 语法 ...
- 主窗体上按钮jig画图时,CAD得不到焦点的问题
主窗体上按钮jig画图时,CAD得不到焦点的问题 按钮不要用 Click 事件,用 MouseDown 事件, 可完美解决该问题 1.试过CAD窗体获得焦点,不顶用 2.试用用命令行去执行,可行 ...
- implicit declaration of function 'init_MUTEX'
'init_MUTEX' 在新版本系统上已被淘汰 改用sema_init(sem, 1);
- 老齐python-基础1
1.基本对象类型 1.1数: >>> 3 #基本数字 3 >>> 3333 3333 >>> 3.222 3.222 >>&g ...