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