deles 发表于 2012-9-16 19:26:40

为 OpenStack Nova 制作 CentOS 镜像

本帖最后由 deles 于 2012-9-16 19:36 编辑




做 CentOS 镜像的过程和去年写的那篇为 OpenStack Nova 制作 Ubuntu 镜像的步骤差不多,不过这半年 OpenStack 发展神速,比以前要稳定多了,有些步骤可以省了,而且有些命令工具、参数、功能都有改动,比如以前的 uec-publish-image 改成了现在的
cloud-publish-image,功能也有变化。下面的制作镜像步骤在 Ubuntu 11.10 +
OpenStack Diablo Release 上完成。



安装 CentOS 镜像


下载要安装的 CentOS 版本,这里选用最新的 CentOS 6.2:



$ wget http://mirrors.kernel.org/centos ... -x86_64-minimal.iso


创建一个 10GB 大小的 “硬盘”(raw 格式),最好用一个较小的 “硬盘”,体积太大提交到云里会花很长时间,而且每次运行实例也会花很长时间:



$ kvm-img create -f raw centos.img 10GFormatting 'centos.img', fmt=raw size=10737418240


使用刚才下载的 CentOS “安装盘” 和刚创建的 “硬盘” 引导启动系统,用 -vnc 参数打开 vnc 访问,这样可以从其他机器登录到这个界面安装系统:



$ 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 安装。需要注意的是在分区阶段把 10GB 硬盘全部划分成一个 ext4 root 分区,不要创建多个分区也不要创建 swap 区:



$ vncviewer 172.16.39.111:5900


安装完后会自动重启,如果没有重启的话按照下面的命令启动刚刚安装好的虚拟机镜像 centos.img,如果出现 failed to find romfile “pxe-rtf8139.bin” 的错误提示可以通过安装 kvm-pxe 解决:



$ sudo kvm -m 512 -drive file=centos.img -boot c -net nic -net tap \-nographic -vnc :0kvm: 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 1LABEL=cec-rootfs                           / ext4 defaults 0 0


在网络接口配置里面注释或删除这行 #HWADDR= 一行,启用
DHCP:



# vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE="eth0"#HWADDR="00:11:22:12:34:56"#NM_CONTROLLED="yes"BOOTPROTO=dhcpONBOOT="yes"


注射 ssh key 以便外界可以用 ssh -i
mykey.priv root@host 的形式无密码登录到虚拟机实例,在 /etc/rc.local 文件中加入下面这些:



# vi /etc/rc.local...mkdir -p /root/.sshecho >> /root/.ssh/authorized_keyscurl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key| grep 'ssh-rsa' >> /root/.ssh/authorized_keyschmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keysecho "AUTHORIZED_KEYS:"echo "--------------------"cat /root/.ssh/authorized_keysecho "--------------------"


别忘了还需要修改 sshd 的配置实现无密码登录:



# vi /etc/ssh/sshd_config...RSAAuthentication yesPubkeyAuthentication yesPermitRootLogin without-passwordChallengeResponseAuthentication noPasswordAuthentication noUsePAM no


需要关闭 SELINUX,否则即使上面 ssh 设定允许 root 无密码登录也无效:



# vi /etc/selinux/configSELINUX=disabledSELINUXTYPE=targeted


70-persistent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口,关闭虚拟机准备发布镜像:



# rm -rf /etc/udev/rules.d/70-persistent-net.rules # shutdown -h now


发布 CentOS 镜像


CentOS 镜像已经做好了,现在可以发布到云里了:



$ cloud-publish-image amd64 centos.img mybucketami-00000007    mybucket/centos.img.manifest.xml


等待一段时间后出现 ami-00000008 mybucket/centos.img.manifest.xml 表示我们刚制作的 CentOS 镜像已经正式发布到云里,以后就可以以这个镜像为模板来快速生成虚拟机实例(instance)。可以通过 euca-describe-images 来查看:



$ euca-describe-imagesIMAGE   ami-00000008   images/centos.img.manifest.xml      available      private         x86_64machine               instance-store


第一个 CentOS 虚拟机实例


有了 CentOS 镜像(模板)以后我们就可以以这个 “镜像” 为模板来为云计算用户创建 n 个
CentOS 虚拟机(操作系统)实例,不过在运行实例之前需要 key:



$ euca-add-keypair mykey > mykey.priv$ chmod 600 mykey.priv$ euca-describe-keypairsKEYPAIR 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-00000008RESERVATION    r-hzwwif81   vpseecloud   defaultINSTANCE       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 创建一个实例后可以用
nova-manage 命令看到:



$ euca-describe-instances RESERVATION    r-z973l7mm   vpseecloud   defaultINSTANCE       i-0000002a   ami-00000008   172.16.39.200172.16.39.200running vpsee (vpseecloud, cloud00)0            m1.small       2012-02-01T13:56:02Z   nova      ami-00000000   ami-00000000


还记得在 Ubuntu 上安装和配置 OpenStack Nova 的创建网络部分吗?看看现在云里面 IP 的分配情况:



$ sudo nova-manage network listid      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 启动的一个 ubuntu
虚拟机实例的 IP 就是从 172.16.38.2 开始的,目前分配的 IP 是 172.16.39.200(从 euca-describe-instances 可以看出来),所以 ssh 登录这个 IP 就登上了我们的 CentOS 云虚拟机:



$ ssh -i mykey.priv root@172.16.39.200#






hailai 发表于 2013-3-14 00:01:19

学习了,不错,讲的太有道理了

xiaui520 发表于 2013-5-15 22:10:54

勿以坑小而不灌,勿以坑大而灌之。

不正狼 发表于 2013-5-16 07:39:09

不要在一棵树上吊死,在附近几棵树上多试试死几次~

plantegg 发表于 2013-5-16 21:17:30

修养的艺术,其实就是说谎的艺术。

52037317 发表于 2013-5-17 14:28:48

学习了,谢谢分享、、、

megnlingling 发表于 2013-5-18 01:30:04

走过了年少,脚起了水泡
页: [1]
查看完整版本: 为 OpenStack Nova 制作 CentOS 镜像