glance上传镜像
① openstack 对虚拟机快照 操作有哪些
对openstack而言,虚拟机的快照即是镜像,快照做完后以镜像形式存于glance。虽然openstack的快照是基于libvirt(qemu-kvm),但是二者在实现上有很大区别:
libvirt 主流快照实现: 采用virDomainSnapshotCreateXML()函数(CLI为virsh snapshot-create)。 新建的快照与虚拟机有关联:若为内置快照,快照信息和虚拟机存在同一个qcow2镜像中;若为外置快照,新建一个qcow2文件,原虚拟机的disk将变为一个read only的模板镜像,新qcow2镜像仅记录与2.模板镜像的差异数据。这种快照包含快照链信息,可保留disk和ram信息,可回滚至快照点。
openstack快照实现:openstack并未采用virDomainSnapshotCreateXML()来实现快照,而是单纯的对虚拟机镜像做转换和拷贝,生成一个与虚拟机无关联的镜像,最后上传至glance中。这种快照不包含快照链信息,只保留disk信息,无法回滚至快照点,只能采用该快照镜像创建一个新的虚拟机。
2. cold snapshot and live snapshot
cold snapshot: 创建snapshot时,需暂停虚拟机。
live snapshot: 创建snapshot时,无需暂停虚拟机。
3. cold snapshot 流程:
# Save the state and stop a running guest, then detach pci devices
$ virsh managedsave vm
# Create a qemu internal snapshot
$ qemu-img snapshot -c snap1 vm_snapshot
# Extract the internal snapshot, convert it to qcow2 and export it a file, then upload to glance
$ qemu-img convert -f qcow2 vm -O qcow2 vm_snapshot
# Start the guest again
$ virsh start vm
4. live snapshot 流程
# Abort any failed/finished block operations:
$ virsh blockjob vm vda --abort
# Undefine a running domain. (Note: Undefining a running domain does not _kill_ the domain, it just converts it from persistent to transient.)
$ virsh undefine vm
# create a destination image with the original backing file and matching size of the instance root disk.
$ qemu-img create -f qcow2 vm_ --backing_file=backing_file --size=root_disk_size
#Invoke 'virsh block' (This will take time, depending on the size of disk image vm1):
$ virsh block --domain vm vda vm_ --wait --verbose
#Abort any failed/finished block operations:
$ virsh blockjob vm vda --abort
#Define the guest again (to make it persistent):
$ virsh define vm
#From the obtained new , convert the QCOW2 with a backing file to a qcow2 image with no backing file, then upload to glance:
$ qemu-img convert -f qcow2 -O raw vm_ vm_convert
5. virsh snapshot-create-as/snapshot-create 快照简析
默认为内置快照,支持快照链,支持快照回滚,支持内存信息。
快照过程中,虚拟机短暂卡顿。
② 简述OpenStack的各核心项目及相应用途
OpenStack覆盖了网络、虚拟化、操作系统、服务器等各个方面。它是一个正在开发中的云计算平台项目,根据成熟及重要程度的不同,被分解成核心项目、孵化项目,以及支持项目和相关项目。每个项目都有自己的委员会和项目技术主管,而且每个项目都不是一成不变的,孵化项目可以根据发展的成熟度和重要性,转变为核心项目。截止到Icehouse版本,下面列出了10个核心项目(即OpenStack服务)。
计算(Compute):Nova。一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。自Austin版本集成到项目中。
对象存储(Object Storage):Swift。一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供卷备份服务。自Austin版本集成到项目中
镜像服务(Image Service):Glance。一套虚拟机镜像查找及检索系统,支持多种虚拟机镜像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有创建上传镜像、删除镜像、编辑镜像基本信息的功能。自Bexar版本集成到项目中。
身份服务(Identity Service):Keystone。为OpenStack其他服务提供身份验证、服务规则和服务令牌的功能,管理Domains、Projects、Users、Groups、Roles。自Essex版本集成到项目中。
网络&地址管理(Network):Neutron。提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络连接服务。为用户提供接口,可以定义Network、Subnet、Router,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN。插件架构支持许多主流的网络厂家和技术,如OpenvSwitch。自Folsom版本集成到项目中。
块存储 (Block Storage):Cinder。为运行实例提供稳定的数据块存储服务,它的插件驱动架构有利于块设备的创建和管理,如创建卷、删除卷,在实例上挂载和卸载卷。自Folsom版本集成到项目中。
UI 界面 (Dashboard):Horizon。OpenStack中各种服务的Web管理门户,用于简化用户对服务的操作,例如:启动实例、分配IP地址、配置访问控制等。自Essex版本集成到项目中。
测量 (Metering):Ceilometer。像一个漏斗一样,能把OpenStack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其它服务提供数据支撑。自Havana版本集成到项目中。
部署编排 (Orchestration):Heat [2] 。提供了一种通过模板定义的协同部署方式,实现云基础设施软件运行环境(计算、存储和网络资源)的自动化部署。自Havana版本集成到项目中。
数据库服务(Database Service):Trove。为用户在OpenStack的环境提供可扩展和可靠的关系和非关系数据库引擎服务。自Icehouse版本集成到项目中。
③ 如何把glance的镜像放到cinder上
我的测试环境中,cinder后端存储采用FC SAN,现在想实现glance的后端存储为cinder.
④ glance的主要目标是
什么是Glance
glance即image service(镜像服务),是为虚拟机的创建提供镜像服务
为什么要有Glance
我们基于openstack是构建基本的Iaas平台对外提供虚机,而虚机在创建的时候必须为其选择操作系统,glance服务器就是为该选择提供不同的系统镜像
Glance的功能
glance服务使用户能够发现,注册,检索虚拟机的镜像,它提供一个能够查询虚拟机镜像元数据和检索真实镜像的REST API
具体的:REST API的体现就是一个URI,而在glance中通过一个URI地址来唯一标示一个镜像的形式如下
<Glance Server Location>/v1/images/<ID>
<Glance Server Location>:glance服务安装的位置
/v1:使用v1版本
/images:请求的类型为镜像
/<ID>:一个uuid,在glance中全局唯一
⑤ 2015openstack win7镜像怎么制作
镜像制作方法一:
centos6.5镜像制作:(首先将CentOS-6.5-x86_64-minimal.iso镜像拷贝到/home下面)
1:
qemu-img create -f qcow2 /home/ttxImg/ttx_centos6.5.img 2.8G
2:
virt-install --connect qemu:///system -n ttx_centos6.5 -r 1024 --vcpus=2 --disk path=/home/ttxImg/ttx_centos6.5.img -c /home/ttxImg/CentOS-6.5-x86_64-minimal.iso --vnc --vncport=5914 --vnclisten=0.0.0.0 --noautoconsole --os-type linux --network=bridge:br100 --hvm --noautoconsole
windows7镜像制作:
qemu-img create -f qcow2 /home/ttxImg/ttx_win7.qcow2 40000M
virt-install --connect qemu:///system -n ttx_win7 -r 2048 --vcpus=2 --disk path=/home/ttxImg/ttx_win7.qcow2,bus=virtio,format=qcow2,cache=writeback --disk path=/home/ttxImg/virtio-win-0.1-81.iso,device=cdrom,perms=ro --force -c /home/ttxImg/win7_x86_64.iso --vnc --vncport=5914 --vnclisten=0.0.0.0 --noautoconsole --os-type windows --os-variant=win7 --network=bridge:virbr0 --hvm --noautoconsole
注:假若安装系统时,磁盘损坏,则可以将上述bus=virtio修改为bus=ide
若是还找不到,使用如下命令:
virt-install --connect qemu:///system -n neokylin_lst -r 1024 --vcpus=2 --disk path=/neokylinlst.qcow2,bus=virtio,format=qcow2,cache=writeback --force -c /home/neokylin.iso --vnc --vncport=5914 --vnclisten=0.0.0.0 --noautoconsole --os-type linux --network=bridge:virbr0 --hvm --noautoconsole
使用virtio网卡驱动:
virt-install --connect qemu:///system -n ttx_win7 -r 2048 --vcpus=2 --disk path=/home/ttxImg/ttx_win7.qcow2,bus=virtio,format=qcow2,cache=writeback --disk path=/home/ttxImg/virtio-win-0.1-81.iso,device=cdrom,perms=ro --force -c /home/ttxImg/win7_x86_64.iso --vnc --vncport=5914 --vnclisten=0.0.0.0 --noautoconsole --os-type windows --os-variant=win7 --network=bridge:virbr0,model=virtio --hvm --noautoconsole
<interface type='bridge'>
<mac address='52:54:00:ac:9c:4c'/>
<source bridge='br1'/>
<target dev='vnet3'/>
<model type='virtio'/>
<alias name='net3'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</interface>
windows镜像上传命令:
glance add name="windows" is_public=true container_format=ovf disk_format=qcow2 < windowsxp.img
centos镜像上传命令:
glance image-create --name centos --is-public true --container-format ovf --disk-format qcow2 < /home/agen/centos63.img
centos镜像上传命令:
glance add name=centos_6.2_ramdisk disk_format=ari container_format=ari is_public=True < initrd-2.6.32-220.el6.x86_64.img
输出:Added new image with ID: 9
以上命令是先上传镜像的ramdisk文件,注意类型必须是ari
glance add name=centos_6.2_kernel disk_format=aki container_format=aki is_public=True < vmlinuz-2.6.32-220.el6.x86_64
输出:Added new image with ID: 10
以上命令是上传镜像的kernel文件,格式必须是aki
glance add name=centos_6.2_final disk_format=ami container_format=ami is_public=True ramdisk_id=9 kernel_id=10 < centos_6.2_final.img
以上命令是上传主要镜像文件,格式必须是ami,ramdisk_id是刚上传的ramdisk的id,kernel_id同理。
镜像制作方法二:
1、将iso镜像文件转换为img镜像
qemu-img convert -f raw CentOS_6.2_Final64bit.iso /home/createvm/test.img
2、创建配置文件setup.xml
<domain type='kvm' id='21'>
<name>test_mini_centos</name>
<uuid>7e7f54d0-4b62-7c5e-d385-ed72473a5785</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc-0.14'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/var/lib/libvirt/images/test_mini_centos.img'/>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<alias name='ide0-1-0'/>
<address type='drive' controller='0' bus='1' unit='0'/>
</disk>
<controller type='ide' index='0'>
<alias name='ide0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:7a:d2:93'/>
<source bridge='br0'/>
<target dev='vnet1'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/0'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/0'>
<source path='/dev/pts/0'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<input type='tablet' bus='usb'>
<alias name='input0'/>
</input>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5901' autoport='yes'/>
<sound model='ich6'>
<alias name='sound0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<alias name='video0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</memballoon>
</devices>
</domain>
3、virsh define setup.xml //创建虚拟机 查看当前系统所有的虚拟机信息:virsh list --all
4、virsh start vm_name //启动你创建的相应名字的虚拟机
注意:假若出现br0 没有此设备则使用sudo /usr/sbin/brctl addbr br0命令
qemu-img create -f raw /home/ttxImg/centos6.5_openstack_ttx.img 3000M
virt-install -n CentOS6.5-openstack-ttx -r 2048 --cpu host -c /home/ttxImg/CentOS-6.5-i386-minimal.iso --disk path=/home/ttxImg/centos6.5_openstack_ttx.img,device=disk,bus=virtio,size=10,format=qcow2 --vnc --vncport=5908 --vnclisten=0.0.0.0 -v --network bridge=br0
用 vncviewer 登录后按照屏幕提示完成 CentOS 安装。需要注意的是在分区阶段把 10GB 硬盘全部划分成一个 ext4 root 分区,不要创建多个分区也不要创建 swap 区:
$ vncviewer 172.16.39.111:5900
安装完后会自动重启,如果没有重启的话按照下面的命令启动刚刚安装好的虚拟机镜像 centos.img,如果出现 failed to find romfile “pxe-rtf8139.bin” 的错误提示可以通过安装 kvm-pxe 解决:
$ sudo qemu-kvm -m 512 -drive file=centos.img -boot c -net nic -net user -nographic -vnc :10
kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"
$ sudo apt-get install kvm-pxe
再次用 vnc 登录虚拟机镜像,安装一些必要工具(因为这个镜像将会是模板,所以最好保持最简最小化):
$ vncviewer 172.16.39.111:5900
# yum update
# yum upgrade
# yum install openssh-server
# chkconfig sshd on
修改分区加载表(/etc/fstab),注释或删除以前的,加上 LABEL=cec-rootfs 一行:
# vi /etc/fstab
#UUID=47a90bea-2d88-4c82-a335-09c1533b1538 / ext4 defaults 1 1
LABEL=cec-rootfs / ext4 defaults 0 0
在网络接口配置里面注释或删除这行 #HWADDR= 一行,启用 DHCP:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
#HWADDR="00:11:22:12:34:56"
#NM_CONTROLLED="yes"
BOOTPROTO=dhcp
ONBOOT="yes"
注射 ssh key 以便外界可以用 ssh -i mykey.priv root@host 的形式无密码登录到虚拟机实例,在 /etc/rc.local 文件中加入下面这些:
# vi /etc/rc.local
...
mkdir -p /root/.ssh
echo >> /root/.ssh/authorized_keys
curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
| grep 'ssh-rsa' >> /root/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
echo "AUTHORIZED_KEYS:"
echo "--------------------"
cat /root/.ssh/authorized_keys
echo "--------------------"
别忘了还需要修改 sshd 的配置实现无密码登录:
# vi /etc/ssh/sshd_config
...
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin without-password
no
PasswordAuthentication no
UsePAM no
需要关闭 SELINUX,否则即使上面 ssh 设定允许 root 无密码登录也无效:
# vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
70-persistent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口,关闭虚拟机准备发布镜像:
# rm -rf /etc/udev/rules.d/70-persistent-net.rules
# shutdown -h now
上传镜像:
glance image-create --name centos6.5_openstack_ttx --is-public true --container-format ovf --disk-format qcow2 < /home/ttxImg/centos6.5_openstack_ttx.img
后面为其他地方复制,仅供参考:
Openstack kvm win7镜像制作
2012-12-13 13:35:17 我来说两句 作者:China_OS
收藏 我要投稿
Openstack不但能管理linux虚拟机还能管理windows虚拟机,之前做过基于kvm的debian6镜像,今天实战一下win镜像的制作,以win7为例。 www.2cto.com
母系统环境:ubuntu12.10 server + kvm
下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd
1
wget http://autosetup1.googlecode.com/files/virtio-win-1.1.16.vfd
2
wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/virtio-win-0.1-30.iso
下载一个win7的镜像,默认的名字太长了,修改短一点
1
mvcn_windows_7_professional_vl_build_x86_dvd_x15-71025.iso win7.iso
创建一个win7的镜像,raw格式,大小7G
www.2cto.com
1
kvm-img create -f raw win7.img 7G
启动基于win7的kvm虚拟机,映射驱动vfd到软盘A
1
kvm -m 1024 -cdrom win7.iso -drivefile=win7.img,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -boot d -nographic -vnc 10.1.6.228:8
用vnc安装win7,因为默认没有virtio驱动,所以识别不了硬盘,需要手动选择,整个过程如下:
选择键盘
⑥ glance中的镜像为什么分为kernel和initrd
系统启动的时候,booload会把initrd文件读到内存中,然后把initrd的起始地址告诉内核。内核在运行过程中会解压initrd,然后把initrd挂载为根目录,然后执行根目录中的/initrc脚本
kernel, 内核,一些核心的代码块,如进程管理,它要求体积很小。
initrd, 进入系统所需预告加载的硬件驱动mole的一个最小集。当GRUB加载kernel时,kernel会在内存中将initrd文件mount到rootfs上激活,然后kernel照着initrd中的init一步一步地加载驱动。在initrd文件中所放入的模块,必须是与操作系统同一版本kernel所编译的模块。
⑦ openstack怎么制作centos7的镜像
Ubuntu和Fedora都有官方的系统镜像,偏偏CentOS没有,网上能找到一些也都不甚靠谱,加之在我们自己的项目中有一些需要自己定制的东西,所以还是自己做镜像比较合适。
为OpenStack制作CentOS系统镜像,官方的在线文档以及网上很多资料中给出了一种方法,即利用virt-install或者kvm创建虚拟机之后通过vnc安装系统、配置系统参数,最后上传到OpenStack中,参考:
http://docs.openstack.org/grizzly/openstack-image/content/centos-image.html[1]
http://www.vpsee.com/2012/02/create-centos-kvm-image-for-openstack-nova/[2]
系统参数配置参考:
http://docs.openstack.org/grizzly/openstack-image/content/ch_openstack_images.html[3]
http://www.linuxidc.com/Linux/2012-09/71175p2.htm[4]
但是以上的这类方法对制作镜像的环境有一定要求,比如硬件必须支持VT技术,要安装一些软件,配置虚拟网卡等等,即使准备好了,也难免会遇上磁盘或者网络或者vnc等种种让新手无从下手的问题。
下面是另外一种为OpenStack制作CentOS镜像的方法,参考:
https://github.com/globocom/references/wiki/Building-a-CentOS-6.2-image-for-openstack[5]
【引用请注明出处:http://blog.csdn.net/bhq2010/article/details/9319289】
制作过程:
1. 制作一个本地网络的软件源
这种制作镜像的方法需要从CentOS软件源中安装系统的内核和必要的软件,[5]中从美国的一个公共CentOS软件源安装,以天朝的网速半天也做不出一个镜像,可以在本地做一个源,不但做镜像可以用,以后安装和更新软件也可以用。制作方法参考:
http://blog.csdn.net/bhq2010/article/details/9237727
http://blog.csdn.net/bhq2010/article/details/9318269
本文中本地base和updates软件源的地址分别是:
http://10.77.50.9/yum/centos-6.4和http://10.77.50.9/yum/centos-6.4-updates.
2. 创建镜像
后续的所有操作都在root用户下做。
首先创建一个空的块文件并给文件创建ext4文件系统,这就是镜像文件了。bs和count相乘是文件大小,根据需要自己设,这里是2.5GB,如果只安装最小系统,1GB就绰绰有余了:
[html] view plain
mkdir ~/centos-image
dd if=/dev/zero of=~/centos-image/centos.img bs=8192 count=327680
mkfs.ext4 ~/centos-image/centos.img
将块文件挂载到/mnt/centos-image目录下,初始化rpm数据库:
[html] view plain
mkdir /mnt/centos-image
mount -o loop ~/centos-image/centos.img /mnt/centos-image
mkdir -p /mnt/centos-image/var/lib/rpm
rpm --rebuilddb --root=/mnt/centos-image
rpm -i --root=/mnt/centos-image --nodeps http://10.77.50.9/yum/centos-6.4/Packages/centos-release-6-4.el6.centos.10.x86_64.rpm
最后的那个包名centos-release-6-4.el6.centos.10.x86_64.rpm和现在用的centos系统版本(6.4)是对应的,装其他版本系统时需要使用相应的软件源并改成对应的文件名。
将软件源改到刚才搭建的本地软件源:
[html] view plain
rm -rf /mnt/centos-image/etc/yum.repos.d/*
vi /mnt/centos-image/etc/yum.repos.d/CentOS-Base.repo
写入内容如下:
[html] view plain
[base]
name=CentOS-$releasever - Base
baseurl=http://10.77.50.9/yum/centos-6.4
gpgcheck=1
gpgkey=http://10.77.50.9/yum/centos-6.4/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://10.77.50.9/yum/centos-6.4-updates
gpgcheck=0
enabled = 1
往镜像文件中安装操作系统(下文称镜像系统):
[html] view plain
yum --installroot=/mnt/centos-image install -y rpm-build yum initscripts kernel passwd dhclient openssh-clients openssh-server vim sudo java-1.6.0-openjdk* java-1.7.0-openjdk*
这里除了最基本的系统内核和软件外,还安装了vim、sudo、jdk1.6和jdk1.7,需要安装其他包的话,列在后面即可。
3. 配置镜像系统参数
首先修改文件系统配置文件:
[html] view plain
vi /mnt/centos-image/etc/fstab
写入如下的内容:
[html] view plain
/dev/vda / ext4 defaults 0 0
/dev/vdb /opt ext4 defaults 0 2
修改默认hostname:
[html] view plain
vi /mnt/centos-image/etc/sysconfig/network
写入如下内容:
[html] view plain
NETWORKING=yes
HOSTNAME=ruc-xcloud
如果需要dns,可以加上dns配置:
[html] view plain
vi /mnt/centos-image/etc/resolv.conf
写入dns服务器的地址,以google提供的免费dns为例,多个dns一行一个:
[html] view plain
nameserver 8.8.8.8
修改eth0的配置文件,去掉UUID和MAC地址:
[html] view plain
vi /mnt/centos-image/etc/sysconfig/network-scripts/ifcfg-eth0
配置后内容如下:
[html] view plain
DEVICE=eth0
BOOTPROTO=dhcp
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
DNS1=8.8.8.8
后面的DNS1和之前配置的dns对应,如果有多个dns,依次为DNS2、DNS3……
还要让镜像系统能从OpenStack的元数据服务中读取必要的信息并更新系统中的配置文件,如hostname,否则新建的实例不会根据实例名更改hostname。要实现这个,可以安装openstack的cloud-in组件,也可以自己写启动脚本,以启动脚本为例:
[html] view plain
vi /mnt/centos-image/etc/rc.local
在#!/bin/sh和touch /var/lock/subsys/local之间加上如下的脚本:
[html] view plain
if [ ! -d /root/.ssh ]; then
mkdir -p /root/.ssh
chmod 700 /root/.ssh
fi
# Fetch hostname using HTTP
ATTEMPTS=30
FAILED=0
while [ ! -f /tmp/metadata-hostname ]; do
curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null
if [ $? -eq 0 ]; then
TEMP_HOST=`cat /tmp/metadata-hostname | awk -F '.novalocal' '{print $1}'`
sed -i "s/^HOSTNAME=.*$/HOSTNAME=$TEMP_HOST/g" /etc/sysconfig/network
/bin/hostname $TEMP_HOST
echo "Successfully retrieved hostname from instance metadata"
echo "*****************"
echo "HOSTNAME CONFIG"
echo "*****************"
cat /etc/sysconfig/network
echo "*****************"
else
echo "Failed to retrieve hostname from instance metadata. This is a soft error, so we'll continue"
FAILED=$(($FAILED + 1))
if [ $FAILED -ge $ATTEMPTS ]; then
echo "Failed to retrieve hostname from instance metadata after $FAILED attempts, quitting"
break
fi
echo "Could not retrieve hostname from instance metadata (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds..."
rm -f /tmp/metadata-hostname
sleep 5
fi
done
rm -f /tmp/metadata-hostname
然后配置系统的用户:
[html] view plain
chroot /mnt/centos-image/
passwd
adser xc
passwd xc
chmod u+w /etc/sudoers
vi /etc/sudoers
chmod u-w /etc/sudoers
mkinitrd --with virtio_pci --with virtio_ring --with virtio_blk --with virtio_net --with virtio_balloon --with virtio -f /boot/initramfs-$(ls /lib/moles/).img $(ls /lib/moles/)
exit
4. 上传镜像
准备好镜像:
[html] view plain
cp /mnt/centos-image/boot/initramfs-$(ls /mnt/centos-image/lib/moles/).img ~/centos-image/
cp /mnt/centos-image/boot/vmlinuz* ~/centos-image/
umount /mnt/centos-image
将做好的镜像文件(包含三个文件)拷贝到OpenStack Controller Node上:
[html] view plain
scp -r ~/centos-image [email protected]:~/centos-image
rm -rf ~/centos-image
rm -rf /mnt/centos-image
登录到OpenStack Controller Node上,将镜像上传到OpenStack中,上传之前要先设置glance的环境变量,这里不说了:
[html] view plain
glance add name="CentOS 6.4 b52img kernel" is_public=true container_format=aki disk_format=aki < ~/centos-image/vmlinuz-2.6.32-358.11.1.el6.x86_64
glance add name="CentOS 6.4 b52img ramdisk" is_public=true container_format=ari disk_format=ari < ~/centos-image/initramfs-2.6.32-358.11.1.el6.x86_64.img
glance add name="CentOS 6.4 b52img" is_public=true container_format=ami disk_format=ami kernel_id=xxx ramdisk_id=xxx < ~/centos-image/centos.img
【引用请注明出处:http://blog.csdn.net/bhq2010/article/details/9319289】
其中的xxx分别是,执行前两句得到的kernel id和ramdisk id。
用新建的镜像启动一个实例,正常的话就算是成功了。
⑧ openstack 上传镜像怎么实现
1、执行环境变量[root@qas-controller ~]# source admin-openrc.sh 2、查看openstack所以有的镜像[root@qas-controller ~]# glance image-list
+--------------------------------------+--------+
| ID | Name |
+--------------------------------------+--------+
| c2161609-843d-4878-ae37-cc9711126ce7 | cirros |
+--------------------------------------+--------+3、上传镜像[root@qas-controller ~]# glance image-create --name "centos7.1" --file CentOS-7-x86_64-GenericCloud-1503.qcow2 --disk-format qcow2 --container-format bare --visibility public --progress
[=============================>] 100%
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | |
| container_format | bare |
| created_at | 2016-11-17T11:56:23Z |
| disk_format | qcow2 |
| id | 8c4f2a82-39b1-4f65-a59d-f0eecff96655 |
| min_disk | 0 |
| min_ram | 0 |
| name | centos7.1 |
| owner | |
| protected | False |
| size | 1004994560 |
| status | active |
| tags | [] |
| updated_at | 2016-11-17T11:56:38Z |
| virtual_size | None |
| visibility | public |
+------------------+--------------------------------------
4、查看上传结果
⑨ 镜像传到glance是存在哪个文件夹下的
glance是OpenStack管理镜像的一个组件,从web client上传的镜像或者从命令行上传的镜像默认保存到了那个目录下,可以在:
# cat /etc/glance/glance-api.conf | grep -v "^$" | grep -v "^#"
filesystem_store_datadir=/var/lib/glance/images/ #这行中是显示的image存储目录
# cd /var/lib/glance/images/
[root@CLOUD1 images(keystone_admin)]# ls