日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
在線升級glance鏡像技巧

0.背景

成都創(chuàng)新互聯(lián)主要從事網(wǎng)頁設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、響應(yīng)式網(wǎng)站設(shè)計(jì)、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、微信小程序定制開發(fā)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計(jì)、營銷、管理等多方位專業(yè)化運(yùn)作于一體。

我們經(jīng)常需要更新glance鏡像,比如上傳的鏡像可能有配置問題,或者我們需要對已有的鏡像進(jìn)行軟件包升級或者預(yù)裝一些新的軟件包等。當(dāng)時著手這件事是由于我們對cloud-init進(jìn)行了大量的patch,需要同步到glance鏡像中,如果重新制作鏡像然后傳輸?shù)缴a(chǎn)環(huán)境再上傳,不僅工作非常繁瑣,還非常消耗時間,我們希望能夠在原來的鏡像基礎(chǔ)之上直接升級cloud-init。

1.通過快照方式更新鏡像

最簡單的方式是通過創(chuàng)建一個云主機(jī),然后更新cloud-init后創(chuàng)建快照形成新的鏡像(注意刪除/var/lib/cloud下的文件,否則cloud-init下次啟動時不會重新拉取metadata)。可是我們遇到的問題是,老版本的cloud-init在L版中注入密碼和密鑰都失敗,并且安裝的qemu-guest-agent不支持修改密碼,因此完全沒有辦法登錄云主機(jī)。因此必須另辟蹊徑。

2.glance存儲后端使用本地文件系統(tǒng)

于是我們想到把鏡像掛載到本地文件系統(tǒng)中,然后chroot到鏡像文件系統(tǒng)環(huán)境中進(jìn)行升級配置。如果glance鏡像使用本地文件系統(tǒng)作為存儲后端,鏡像格式為raw,掛載鏡像就非常簡單了:

 
 
 
 
  1. losetup /dev/loop0 image.img 
  2. kpartx -a /dev/loop0 
  3. mount /dev/mapper/loop0p1 /mnt/image 

如果是qcow2格式,需要安裝qemu-nbd工具包,并且加載nbd內(nèi)核模塊:

 
 
 
 
  1. modprobe nbd max_part=63 
  2. qemu-nbd -c /dev/nbd0 image.img 
  3. mount /dev/nbd0p1 /mnt/image 

如果鏡像文件系統(tǒng)中使用LVM,可以使用以下方法初始化:

 
 
 
 
  1. vgscan 
  2. vgchange -ay 
  3. mount /dev/VolGroupName/LogVolName /mnt/image 

chroot進(jìn)行后執(zhí)行相關(guān)操作后,卸載鏡像文件系統(tǒng):

 
 
 
 
  1. umount /mnt/image 
  2. vgchange -an VolGroupName 
  3. killall qemu-nbd 
  4. kpartx -d /dev/loop0 
  5. losetup -d /dev/loop0 

以上方法參考Mounting-raw-and-qcow2-vm-disk-images。

本文重點(diǎn)不在于基于本地文件系統(tǒng)作為存儲后端的情況,重點(diǎn)介紹基于Ceph存儲后端的操作方法,下文將詳細(xì)介紹過程。

3.基于Ceph存儲后端的更新方法

我們知道使用ceph作為存儲后端時,鏡像首先會生成一個以snap命名的快照,比如glance有一個鏡像id為35fcb79c-43a1-4b59-83d7-f4e46a524419,則在rbd中有對應(yīng)的image,命名與glance鏡像id一致,我們查看其快照:

 
 
 
 
  1. rbd snap ls --image openstack-images/35fcb79c-43a1-4b59-83d7-f4e46a524419 2>/dev/null 

輸出:

 
 
 
 
  1. SNAPID NAME     SIZE 
  2.  94604 snap 20480 MB 

我們不能直接修改快照snap,因?yàn)樗莗rotect的,只能讀不能寫。直接修改鏡像的話不能同步到快照中,并且出錯也不好回滾。

因此我們的做法是先復(fù)制一個rbd image副本.

首先使用glance命令行工具獲取需要更新的鏡像的id:

 
 
 
 
  1. IMAGE_ID=$(glance image-list --name "CentOS 7.1 64bit 2>/dev/null | awk --re-interval '/\w{8}-.*/{print $2}') 

使用rbd命令拷貝一份鏡像副本,假設(shè)POOL變量為glance使用的ceph池:

 
 
 
 
  1. rbd cp $POOL/${IMAGE_ID} $POOL/${IMAGE_ID}_copy 

掛載鏡像到本地文件系統(tǒng)中:

 
 
 
 
  1. rbd map $POOL/${IMAGE_ID}_copy 
  2. # /dev/rbd0 
  3. mount /dev/rbd0p1  /mnt 

注意由于鏡像是Linux文件系統(tǒng),因此通常只有一個根分區(qū),如果是windows鏡像,***個分區(qū)通常是隱藏分區(qū),C盤是第二個分區(qū),因此掛載時注意選擇rbd0p2,其中p表示partition。

掛載到本地后,可以拷貝軟件包、配置模板等到鏡像文件系統(tǒng)中,比如/mnt/root/,然后chroot到鏡像文件系統(tǒng)中:

 
 
 
 
  1. cd /mnt # /mnt是我們需要chroot的根目錄 
  2. # mount -t proc proc proc/ # 掛載proc 
  3.    
  4. # To use an internet connection in the chroot environment copy over the DNS details: 
  5. cp /etc/resolv.conf etc/resolv.conf # 覆蓋即可,生成云主機(jī)會自動覆蓋 
  6.    
  7. # To change root into a bash shell: 
  8. chroot /mnt bash # chroot 到/mnt中,如果提示bash命令找不到,使用絕對路徑試試 chroot /mnt /bin/bash 
  9. # 初始化環(huán)境變量 
  10. source /etc/profile 
  11. source ~/.bashrc 
  12.   
  13. # 如果提示找不到ls等命令,需要手動設(shè)置PATH變量: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/bin 
  14.    
  15. # Tip: Optionally, create a unique prompt to be able to differentiate your chroot environment: 
  16. export PS1="(chroot) $PS1" 

接下來就可以執(zhí)行命令對鏡像進(jìn)行更新了,比如更新cloud-init:

 
 
 
 
  1. yum remove cloud-init # Remove the old version package 
  2. rpm -i cloud-init-0.7.6-bzr1.el7.centos.noarch.rpm # Install the pacakge 

升級qemu-guest-agent:

 
 
 
 
  1. yum install -y qemu-guest-agent  
  2. rpm -aq | grep qemu-guest-agent 
  3. # qemu-guest-agent-2.3.0-4.el7.x86_64 

執(zhí)行完所有的更新操作后,完成以下清理工作:

 
 
 
 
  1. yum clean all 
  2. rm -rf /root/* # 危險(xiǎn)?。?!刪除根目錄下拷貝的臨時文件,執(zhí)行前確認(rèn)無有用文件! 
  3. exit # 退出chroot環(huán)境 
  4. cd # 切換到家目錄,工作目錄不能位于/mnt,否則卸載不了 
  5. umount --recursive /mnt/ # 如果busy怎么辦?lsof查看哪個進(jìn)程占用,如果還是不行試試使用 --lazy 參數(shù) 
  6. rbd unmap /dev/rbd0 # 從rbd中卸載 

***需要更新glance,我們的方法是先創(chuàng)建一個glance空鏡像實(shí)例,不需要指定鏡像文件,只是占個坑,拿到新鏡像id:

 
 
 
 
  1. NEW_IMAGE_ID=`glance image-create | grep id | awk '{print $4}'` || { echo 'Error: glance image-create failed !' ; exit 1; } 

接下來更新我們的rbd image,命名為新創(chuàng)建鏡像實(shí)例id并設(shè)置快照:

 
 
 
 
  1. rbd mv  $POOL/${IMAGE_ID}_copy $POOL/${NEW_IMAGE_ID}  
  2. rbd --pool=$POOL --image=${NEW_IMAGE_ID} --snap=snap snap create 
  3. rbd --pool=$POOL --image=${NEW_IMAGE_ID} --snap=snap snap protect 

***更新glance鏡像元數(shù)據(jù):

 
 
 
 
  1. glance image-update --name="$DISPLAY_NAME" --disk-format=raw --container-format=bare --is-public=True ${NEW_IMAGE_ID} 
  2.  
  3. glance image-update --property image_meta="$image_meta" ${NEW_IMAGE_ID} 
  4. glance image-update --property hw_qemu_guest_agent=yes $IMAGE_ID 
  5.  
  6.  
  7. # ... 
  8.  
  9. # update image location 
  10. FSID=`ceph -s | grep cluster | awk '{print $2}'` 
  11. glance image-update --location rbd://$FSID/$POOL/$IMAGE_ID/snap ${NEW_IMAGE_ID} 
  12.  
  13. if [[ $IMAGE_LABEL == "Windows" || $IMAGE_LABEL == "windows" ]]; then 
  14.        glance image-update --property hw_video_model=qxl --property hw_video_ram=64 --property os_admin_user=Administrator $IMAGE_ID 
  15. fi 

***對新鏡像進(jìn)行功能驗(yàn)證,如果沒有問題,就可以安全的刪除老的鏡像了。

【本文是專欄作者“付廣平”的原創(chuàng)文章,如需轉(zhuǎn)載請通過獲得聯(lián)系】

戳這里,看該作者更多好文


網(wǎng)站欄目:在線升級glance鏡像技巧
轉(zhuǎn)載注明:http://www.5511xx.com/article/codjgee.html