為 OpenStack Nova 制作 CentOS 鏡像
做 CentOS 鏡像的過(guò)程和去年寫(xiě)的那篇為 OpenStack Nova 制作 Ubuntu 鏡像的步驟差不多,不過(guò)這半年 OpenStack 發(fā)展神速,比以前要穩(wěn)定多了,有些步驟可以省了,而且有些命令工具、參數(shù)、功能都有改動(dòng),比如以前的 uec-publish-image 改成了現(xiàn)在的 cloud-publish-image,功能也有變化。下面的制作鏡像步驟在 Ubuntu 11.10 + OpenStack Diablo Release 上完成。
安裝 CentOS 鏡像
下載要安裝的 CentOS 版本,這里選用最新的 CentOS 6.2:
$ wget http://mirrors.kernel.org/centos/6.2/isos/x86_64/CentOS-6.2-x86_64-minimal.iso
創(chuàng)建一個(gè) 10GB 大小的 “硬盤(pán)”(raw 格式),最好用一個(gè)較小的 “硬盤(pán)”,體積太大提交到云里會(huì)花很長(zhǎng)時(shí)間,而且每次運(yùn)行實(shí)例也會(huì)花很長(zhǎng)時(shí)間:
$ kvm-img create -f raw centos.img 10G Formatting 'centos.img', fmt=raw size=10737418240
使用剛才下載的 CentOS “安裝盤(pán)” 和剛創(chuàng)建的 “硬盤(pán)” 引導(dǎo)啟動(dòng)系統(tǒng),用 -vnc 參數(shù)打開(kāi) vnc 訪問(wèn),這樣可以從其他機(jī)器登錄到這個(gè)界面安裝系統(tǒng):
$ sudo kvm -m 512 -cdrom CentOS-6.2-x86_64-minimal.iso \ -drive file=centos.img -boot d -net nic -net tap -nographic -vnc :0
用 vncviewer 登錄后按照屏幕提示完成 CentOS 安裝。需要注意的是在分區(qū)階段把 10GB 硬盤(pán)全部劃分成一個(gè) ext4 root 分區(qū),不要?jiǎng)?chuàng)建多個(gè)分區(qū)也不要?jiǎng)?chuàng)建 swap 區(qū):
$ vncviewer 172.16.39.111:5900
安裝完后會(huì)自動(dòng)重啟,如果沒(méi)有重啟的話按照下面的命令啟動(dòng)剛剛安裝好的虛擬機(jī)鏡像 centos.img,如果出現(xiàn) failed to find romfile “pxe-rtf8139.bin” 的錯(cuò)誤提示可以通過(guò)安裝 kvm-pxe 解決:
$ sudo kvm -m 512 -drive file=centos.img -boot c -net nic -net tap \ -nographic -vnc :0 kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin" $ sudo apt-get install kvm-pxe
再次用 vnc 登錄虛擬機(jī)鏡像,安裝一些必要工具(因?yàn)檫@個(gè)鏡像將會(huì)是模板,所以最好保持最簡(jiǎn)最小化):
$ vncviewer 172.16.39.111:5900 # yum update # yum upgrade # yum install openssh-server # chkconfig sshd on
修改分區(qū)加載表(/etc/fstab),注釋或刪除以前的,加上 UUID=cec-rootfs 一行:
# vi /etc/fstab #UUID=47a90bea-2d88-4c82-a335-09c1533b1538 / ext4 defaults 1 1 LABEL=cec-rootfs / ext4 defaults 0 0
在網(wǎng)絡(luò)接口配置里面注釋或刪除這行 #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 的形式無(wú)密碼登錄到虛擬機(jī)實(shí)例,在 /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 的配置實(shí)現(xiàn)無(wú)密碼登錄:
# vi /etc/ssh/sshd_config ... RSAAuthentication yes PubkeyAuthentication yes PermitRootLogin without-password ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no
需要關(guān)閉 SELINUX,否則即使上面 ssh 設(shè)定允許 root 無(wú)密碼登錄也無(wú)效:
# vi /etc/selinux/config SELINUX=disabled SELINUXTYPE=targeted
70-persistent-net.rules 會(huì)自動(dòng)添加其他的網(wǎng)絡(luò)接口,需要?jiǎng)h除這個(gè)文件避免自動(dòng)添加除了 eth0 以外的接口,關(guān)閉虛擬機(jī)準(zhǔn)備發(fā)布鏡像:
# rm -rf /etc/udev/rules.d/70-persistent-net.rules # shutdown -h now
發(fā)布 CentOS 鏡像
CentOS 鏡像已經(jīng)做好了,現(xiàn)在可以發(fā)布到云里了:
$ cloud-publish-image amd64 centos.img mybucket ami-00000007 mybucket/centos.img.manifest.xml
等待一段時(shí)間后出現(xiàn) ami-00000008 mybucket/centos.img.manifest.xml 表示我們剛制作的 CentOS 鏡像已經(jīng)正式發(fā)布到云里,以后就可以以這個(gè)鏡像為模板來(lái)快速生成虛擬機(jī)實(shí)例(instance)??梢酝ㄟ^(guò) euca-describe-images 來(lái)查看:
$ euca-describe-images IMAGE ami-00000008 images/centos.img.manifest.xml available private x86_64 machine instance-store
第一個(gè) CentOS 虛擬機(jī)實(shí)例
有了 CentOS 鏡像(模板)以后我們就可以以這個(gè) “鏡像” 為模板來(lái)為云計(jì)算用戶創(chuàng)建 n 個(gè) CentOS 虛擬機(jī)(操作系統(tǒng))實(shí)例,不過(guò)在運(yùn)行實(shí)例之前需要 key:
$ euca-add-keypair mykey > mykey.priv $ chmod 600 mykey.priv $ euca-describe-keypairs KEYPAIR mykey 76:7d:93:88:a0:e5:3e:5d:4b:62:cd:85:c5:23:7a:05 $ euca-run-instances -k mykey -t m1.small ami-00000008 RESERVATION r-hzwwif81 vpseecloud default INSTANCE i-0000002a ami-00000008 pending vpsee (vpseecloud, None) 0 m1.small 2012-02-01T14:26:51Z unknown zone aki-00000001 ami-00000000
上面使用 euca-run-instances 創(chuàng)建一個(gè)實(shí)例后可以用 nova-manage 命令看到:
$ euca-describe-instances RESERVATION r-z973l7mm vpseecloud default INSTANCE i-0000002a ami-00000008 172.16.39.200 172.16.39.200 running vpsee (vpseecloud, cloud00) 0 m1.small 2012-02-01T13:56:02Z nova ami-00000000 ami-00000000
還記得在 Ubuntu 上安裝和配置 OpenStack Nova 的創(chuàng)建網(wǎng)絡(luò)部分嗎?看看現(xiàn)在云里面 IP 的分配情況:
$ sudo nova-manage network list id IPv4 IPv6 start address DNS1 DNS2 VlanID project uuid 1 172.16.38.0/23 None 172.16.38.2 8.8.4.4 None None None None
剛才用 euca-run-instances 啟動(dòng)的一個(gè) ubuntu 虛擬機(jī)實(shí)例的 IP 就是從 172.16.38.2 開(kāi)始的,目前分配的 IP 是 172.16.39.200(從 euca-describe-instances 可以看出來(lái)),所以 ssh 登錄這個(gè) IP 就登上了我們的 CentOS 云虛擬機(jī):
$ ssh -i mykey.priv root@172.16.39.200 [root@server-25 ~]#
想制作 Windows 虛擬機(jī)鏡像的話可以看這篇:為 OpenStack Nova 制作 Windows 鏡像。
原文:http://www.vpsee.com/2012/02/create-centos-kvm-image-for-openstack-nova/