[openstack] 建立現有的 instance 為 image

一班而言使用即時存檔或名”快照” (snapshots) 就可以達到下次起另外一個雲實例或名”實體” (instance) 的功能,但是礙於我自己龜毛,想要一個 image 直接可以啟動,所以寫這篇文章記錄。

用 server list 指令查看想要做 image 的主機狀態

$ openstack server list

如果還在開機狀態請關機,可以用 server stop 關機

$ openstack server stop latte

關機好之後,就可以建立該主機 latte 的 image

$ openstack server image create --name latte_s1 latte

在 openstack 網頁上面看到 latte_s1 的型態是 Snapshot,這樣其實已經可以啟用另外一個實體,但是我不想因為這是用快照。下列指令可以列出目前的快照:

$ openstack volume snapshot list

然後按照上面的快照ID建立一個雲硬碟(volume)

$ openstack volume create --snapshot 0ee45900-f3e6-4fc5-9e44-76dd6f4414c0 --size 80 latte_s1_v1

用 volume list 看看剛剛建立的結果

$ openstack volume list

再把剛剛建立的 volume 建立成 image

$ openstack image create --volume f4b6e194-77bd-492b-825c-bf18e09c9a7b latte_i1

這要等待一段時間,因為他是按照該主機的 volume 大小去建立

然後用 image list 找出剛剛建立的 80GB RAW image

$ openstack image list

把 latte_i1 下載為 latte_i1.raw,這也需要等待一段時間

$ openstack image save --file latte_i1.raw 1af2092c-ccd6-4e79-84e9-2566b737c556

用 qemu-img 工具轉換 raw 為 qcow2, 請耐心等待

$ qemu-img convert -f raw -O qcow2 latte_i1.raw latte_v2.qcow2

轉好 qcow2 image 上傳到 openstack 上

$ openstack image create --container-format bare --disk-format qcow2 --file latte_v2.qcow2 latte_v2

確認沒問題後,把剛剛產生出來的 latte_i1, latte_s1 刪除,一樣用 image list 找出那兩個 images 然後用 image delete 刪除。

$ openstack image list
$ openstack image delete 1af2092c-ccd6-4e79-84e9-2566b737c556
$ openstack image delete aa4a2f55-87c1-4a4a-8c56-8537193b4335

然後也找出快照把它刪除。

$ openstack volume snapshot list
$ openstack volume snapshot delete 0ee45900-f3e6-4fc5-9e44-76dd6f4414c0

最後把剛剛建立的 volume 把它刪除

$ openstack volume list
$ openstack volume delete f4b6e194-77bd-492b-825c-bf18e09c9a7b