柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!
全部博文(1669)
分类: 云计算
2014-02-26 17:13:32
(一)在 Ubuntu 上安装和配置 OpenStack Nova
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install bridge-utils $ sudo reboot |
配置网桥:
2.安装 NTP 服务
OpenStack Nova 需要 NTP 服务器来保持所有节点服务器(Cloud Compute)的时间同步,所以需要在前端控制服务器(Cloud Controller)上安装 NTP 服务器,然后在节点服务器上安装 NTP 客户端保持与前端的同步:
$ sudo apt-get install ntp $ sudo vi /etc/ntp.conf server 127.127.1.0 fudge 127.127.1.0 stratum 10 $ sudo /etc/init.d/ntp restart |
3.安装和配置 MySQL 数据库
OpenStack Nova 需要数据库的支持,这里选用 MySQL(当然也可以用其他的数据库,比如 PostgreSQL 等):
$ sudo apt-get install mysql-server |
修改 MySQL 绑定地址,以便其他的节点服务器也能访问这个数据库:
$ sudo vi /etc/mysql/my.cnf ... #bind-address = 127.0.0.1 bind-address = 0.0.0.0 ...
$ sudo /etc/init.d/mysql restart |
创建一个名为 nova 的数据库,并设置 root 从任何 IP 访问的权限和密码:
$ sudo mysql -uroot -ppassword -e 'CREATE DATABASE nova;' $ sudo mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO \ 'root'@'%' WITH GRANT OPTION;" $ sudo mysql -uroot -ppassword -e "SET PASSWORD FOR \ 'root'@'%' = PASSWORD('password');" |
4.安装 Glance 镜像服务
Glance 是个镜像服务器,用来给 OpenStack Nova 提供操作系统镜像(image)服务,提供可选择的操作系统模版(镜像)。
$ sudo apt-get install glance |
5.安装 OpenStack Nova
OpenStack Nova 已经进入 Ubuntu 11.04 源,所以直接安装就可以了,不必源码安装:
$ sudo apt-get install rabbitmq-server nova-common nova-doc python-nova
nova-api nova-network nova-volume nova-objectstore nova-scheduler nova-compute
$ sudo apt-get install -y euca2ools $ sudo apt-get install -y unzip |
配置 Nova:
$ sudo vi /etc/nova/nova.conf --dhcpbridge_flagfile=/etc/nova/nova.conf --dhcpbridge=/usr/bin/nova-dhcpbridge --logdir=/var/log/nova --state_path=/var/lib/nova --lock_path=/var/lock/nova --verbose --s3_host=172.16.39.111 --rabbit_host=192.168.0.1 --cc_host=192.168.0.1 --ec2_url= --fixed_range=192.168.0.0/16 --network_size=8 --FAKE_subdomain=ec2 --routing_source_ip=192.168.0.1 --sql_connection=mysql://root:password@172.16.39.111/nova --glance_host=192.168.0.1 --image_service=nova.image.glance.GlanceImageService |
重启 nova 相关服务以便设置生效:
$ sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry |
6.使用 Nova
开始使用 Nova 前需要创建 nova 数据库表、创建网络、创建管理员帐号、创建云并联到刚才创建的管理员上:
$ sudo nova-manage db sync $ sudo nova-manage network create 192.168.0.0/24 1 255 $ sudo nova-manage floating create 10.10.10.2 10.10.10.224/27 $ sudo nova-manage user admin vpsee $ sudo nova-manage project create mycloud vpsee |
因为多个管理员可以创建多个不同的云,所以某个云的管理员需要特定的权限才能访问和管理自己的 Nova 云,创建权限信息,并解压到自己的目录里,需要注意的是每次使用 nova 管理云的时候都需要读取 novarc 里面的配置信息:
$ mkdir /home/vpsee/creds
$ sudo nova-manage project zipfile mycloud vpsee /home/vpsee/creds/novacreds.zip $ cd /home/vpsee/creds $ unzip novacreds.zip $ sudo chown -R vpsee:vpsee /home/vpsee/creds/ $ source /home/vpsee/creds/novarc |
每次用 nova 的时候都要用到 novarc 里面的环境变量,每次 source novarc 很麻烦,所以最好加到 .bashrc 里面:
$ cat /home/vpsee/creds/novarc >> /home/vpsee/.bashrc $ source /home/vpsee/.bashrc |
再次重启 nova 相关的所有服务:
$ sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry |
如果一切正常的话,应该可以打印出如下的类似信息:
$ euca-describe-availability-zones verbose AVAILABILITYZONE nova available AVAILABILITYZONE |- node00 AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-05-22 10:32:31 AVAILABILITYZONE | |- nova-network enabled :-) 2011-05-22 10:32:32 AVAILABILITYZONE | |- nova-compute enabled :-) 2011-05-22 10:32:24 |
7.启动第一个实例
启动实例之前需要先上传一个系统模版,我们称之为镜像(image),这里直接使用一个已经做好的 Ubuntu 10.10 版本镜像,下载已经做好的镜像文件并上传到镜像服务器(这里镜像服务器和前端服务器在同一台物理服务器上):
$ wget http://c0179148.cdn1.cloudfiles.rackspacecloud.com/ubuntu1010-UEC-localuser-image.tar.gz $ uec-publish-tarball ubuntu1010-UEC-localuser-image.tar.gz ubuntu1010-bucket x86_64 |
列出云里现有的可以加载的镜像,并以某个镜像(比如编号为 ami-00000003)为模版启动一个实例(操作系统):
$ euca-describe-images IMAGE aki-00000001 ubuntu1010-bucket/vmlinuz-2.6.32-28-server.manifest.xml available public x86_64 kernel IMAGE ari-00000002 ubuntu1010-bucket/initrd.img-2.6.32-28-server.manifest.xmavailable public x86_64 ramdisk IMAGE ami-00000003 ubuntu1010-bucket/maverick-server-uec-amd64.img.manifest.xml available public x86_64 machine aki-00000001 ari-00000002 $ euca-add-keypair mykey > mykey.priv $ euca-run-instances -k mykey -t m1.tiny ami-00000003 |
检查一下实例是否成功启动和运行:
$ virsh list Id Name State ---------------------------------- 1 instance-00000001 running |
8.访问实例
启动实例后怎么访问呢?和访问 VPS 一样,需要 IP 地址然后 ssh 访问,还记得上面的网络配置么,新创建的系统将按照 192.168.0.x 的形式分配 IP,所以 192.168.0.3 就是刚刚 euca-run-instances 创建的实例的 IP 地址:
$ ssh ubuntu@192.168.0.3 |
(二)在 CentOS 上安装和配置 OpenStack Nova
因为 Python 的版本问题,在 CentOS 5.6 上安装 OpenStack 不是件容易的事情,因为 OpenStack 是 Python 2.6 写的,CentOS 5.6 上默认的是 Python 2.4 的环境,一些关键工具(比如 yum 等)和依赖关系都需要 2.4,不容易直接升级到 2.6,所以要在 CentOS 上安装 OpenStack 的话简单的办法是直接用 CentOS 6.0(默认是 Python 2.6)。
1.安装和配置基本系统
在安装完基本的 CentOS 6.0 系统后(最小化安装)升级和更新整个系统,然后关闭 SELINUX 后重启,为了简单方便最好也关闭 iptables:
# yum update # yum upgrade
# vi /etc/sysconfig/selinux SELINUX=disabled
# chkconfig iptables off # service iptables stop
# shutdown -r now |
2.安装 OpenStack Nova
下载和安装 OpenStack 源:
# wget # rpm -ivh openstack-repo-2011.3-0.3.noarch.rpm |
OpenStack Nova 需要在控制结点(Cloud Controller)和计算结点(Cloud Compute)上都安装和启用 libvirtd:
# yum install libvirt # chkconfig libvirtd on # service libvirtd start |
如果服务器用来做 Cloud Controller 结点需要安装(OpenStack Nova 云里至少要有一台服务器作为控制结点):
# yum install euca2ools openstack-nova-node-full unzip |
如果服务器只是做 Cloud Compute 结点则需要在每个计算结点上都安装(理论上 OpenStack Nova 云里可以有无数个计算结点):
# yum install openstack-nova-node-compute |
3.配置 MySQL 数据库
OpenStack Nova 需要数据库的支持,这里用的是 MySQL:
# service mysqld start # chkconfig mysqld on # service rabbitmq-server start # chkconfig rabbitmq-server on |
修改 MySQL 绑定地址,以便其他的节点服务器也能访问这个数据库:
# vi /etc/my.cnf ... #bind-address = 127.0.0.1 bind-address = 0.0.0.0 ...
# service mysql restart |
创建一个名为 nova 的数据库,并设置 root 从任何 IP 访问的权限和密码:
# mysql -uroot -ppassword -e 'CREATE DATABASE nova;' # mysql -uroot -ppassword -e "GRANT ALL PRIVILEGES ON *.* TO \ 'root'@'%' WITH GRANT OPTION;" # mysql -uroot -ppassword -e "SET PASSWORD FOR \ 'root'@'%' = PASSWORD('password');" |
配置 Nova:
$ sudo vi /etc/nova/nova.conf --verbose=false --ec2_url= --s3_host=172.16.39.111 --cc_host=172.16.39.111 --rabbit_host=172.16.39.111 --sql_connection=mysql://nova:nova@172.16.39.111/nova --glance_api_servers=172.16.39.111:9292 --use_s3=true --libvirt_type=kvm --use_syslog=false --node_availability_zone=nova --logdir=/var/log/nova --logging_context_format_string=%(asctime)s %(name)s: %(levelname)s [%(request_id)s %(user)s %(project)s] %(message)s --logging_default_format_string=%(asctime)s %(name)s: %(message)s --logging_debug_format_suffix= --use_cow_images=true --auth_driver=nova.auth.dbdriver.DbDriver --network_manager=nova.network.manager.VlanManager --scheduler_driver=nova.scheduler.zone.ZoneScheduler --image_service=nova.image.glance.GlanceImageService --use_ipv6=false --ca_path=/var/lib/nova/CA --keys_path=/var/lib/nova/keys --images_path=/var/lib/nova/images --buckets_path=/var/lib/nova/buckets --instances_path=/var/lib/nova/instances --networks_path=/var/lib/nova/networks --dhcpbridge_flagfile=/etc/nova/nova.conf --dhcpbridge=/usr/bin/nova-dhcpbridge --injected_network_template=/usr/share/nova/interfaces/ --libvirt_xml_template=/usr/share/nova/libvirt.xml.template --vpn_client_template=/usr/share/nova/client.ovpn.template --credentials_template=/usr/share/nova/novarc.template --state_path=/var/lib/nova --lock_path=/var/lib/nova/tmp --vnc_enabled=true --vncproxy_url= --vncserver_host=0.0.0.0 --vnc_token_ttl=300 |
每次重启一堆服务很麻烦,写个脚本方便重启 nova 所有服务:
# vi nova-restart-all.sh #!/bin/bash for n in api compute network objectstore scheduler vncproxy; do service openstack-nova-$n restart; done service openstack-glance-api restart service openstack-glance-registry restart
# chmod +x nova-restart-all.sh
# ./nova-restart-all.sh |
4.使用 Nova
接下来的步骤和“(一)在 Ubuntu 上安装和配置 OpenStack Nova” 差不多,这里就不再赘述:
# nova-manage db sync # nova-manage network create 192.168.0.0/24 1 255 # nova-manage floating create 10.10.10.2 10.10.10.224/27 # nova-manage user admin vpsee # nova-manage project create mycloud vpsee |
导出权限信息:
# mkdir /home/vpsee/creds # nova-manage project zipfile mycloud vpsee /home/vpsee/creds/novacreds.zip
# cd /home/vpsee/creds # unzip novacreds.zip # chown -R vpsee:vpsee /home/vpsee/creds/
# source /home/vpsee/creds/novarc |
再次重启 nova 相关的所有服务:
# ./nova-restart-all.sh |
如果一切正常的话,应该可以看到下面的类似信息,这样 OpenStack Nova 就成功安装了:
# euca-describe-availability-zones verbose AVAILABILITYZONE nova available AVAILABILITYZONE |- node00 AVAILABILITYZONE | |- nova-network enabled :-) 2011-08-16 19:28:13 AVAILABILITYZONE | |- nova-compute enabled :-) 2011-08-16 19:28:22 AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-08-16 19:28:14 |
之后就可以启动实例了。
(三)为 OpenStack Nova 制作 Ubuntu 镜像
进一步介绍如何在 OpenStack Nova 环境里制作虚拟机模板(镜像)以及创建虚拟机运行实例(以 Ubuntu 为例子)。为了和我们平时说的 “VMware/Xen/KVM/VirtualBox 虚拟机” 区分开,在这里把在 OpenStack Nova、OpenNebula 这样的云计算平台上运行的虚拟机称为 “云虚拟机”。简单说在 OpenStack Nova 平台上运行一个 ubuntu 虚拟机的流程是:先制作一个 ubuntu 虚拟机镜像(模板),然后再以这个镜像为模板来创建 ubuntu 虚拟机(实例)。
$ wget |
$ kvm-img create -f raw ubuntu.img 10G Formatting 'ubuntu.img', fmt=raw size=10737418240 |
使用刚才下载的 ubuntu “安装盘” 和刚创建的 “硬盘” 引导启动系统,为了简单起见,VPSee 在这里使用 kvm 虚拟技术,避开 xen 繁琐的配置。-vnc 参数代表打开 vnc 访问,以便可以用其他机器远程登录到这个引导界面进行安装操作:
$ sudo kvm -m 512 -cdrom ubuntu-10.04.2-server-amd64.iso \ -drive file=ubuntu.img -boot d -nographic -vnc :0 |
用 vncviewer 登录引导界面后按照屏幕的提示完成 ubuntu 的安装工作(和在自己电脑上安装 ubuntu 过程一样)。需要注意的是在分区阶段把 10GB 硬盘全部划分成一个 ext4 root 分区,不要创建多个分区也不要创建 swap 区:
$ vncviewer 172.16.39.111:5900 |
安装完后退出(必要时 kill 掉 kvm 进程),按照下面命令启动刚刚安装好的虚拟机镜像 ubuntu.img,如果出现 failed to find romfile “pxe-rtf8139.bin” 的错误提示可以通过安装 kvm-pxe 解决:
$ sudo kvm -m 512 -drive file=ubuntu.img -boot c -nographic -vnc :0 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
$ sudo update $ sudo upgrade $ sudo apt-get install openssh-server cloud-init |
70-persistent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口。删除后系统基本就准备好了,关闭虚拟机:
$ sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
$ sudo shutdown -h now |
2.调整 Ubuntu 镜像
因为 OpenStack 只接受 ext4 文件系统格式的镜像,所以需要把上面创建的 raw 镜像(kvm-img create -f raw)转换成 ext4 镜像。下面的步骤用来找出镜像文件里面的分区起点是从哪里开始的:
$ sudo losetup -f ubuntu.img $ sudo losetup -a /dev/loop0: [fb00]:24117291 (/home/vpsee/ubuntu.img)
$ sudo fdisk -cul /dev/loop0
Disk /dev/loop0: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000502e6
Device Boot Start End Blocks Id System /dev/loop0p1 * 2048 20969471 10483712 83 Linux |
上面最后一行显示分区是从扇区(sector)2048开始的,每个扇区是512个字节,所以是从 2048 x 512 = 1048576个字节开始的。记住这个1048576,下面会用到。
卸载 loop 后重新从1048576字节开始挂载:
$ sudo losetup -d /dev/loop0
$ sudo losetup -f -o 1048576 ubuntu.img $ sudo losetup -a /dev/loop0: [fb00]:24117291 (/home/vpsee/ubuntu.img), offset 1048576 |
把这整个分区拷贝到一个新文件就是一个我们要的 ext4 文件系统镜像:
$ sudo dd if=/dev/loop0 of=ubuntutemplate.img 20969472+0 records in 20969472+0 records out 10736369664 bytes (11 GB) copied, 107.455 s, 99.9 MB/s |
用完 loop 后记得卸载:
$ sudo losetup -d /dev/loop0 |
挂载(mount)刚创建的 ext4 文件系统镜像,并修改分区加载表(/etc/fstab),注释或删除以前的,加上 UUID=uec-rootfs 一行:
$ sudo mount -o loop ubuntutemplate.img /mnt
$ sudo vi /mnt/etc/fstab #UUID=1dc3a59e-faab-41ee-b232-3300163676bf / ext4 errors=remount-ro 0 1 UUID=uec-rootfs / ext4 defaults 0 0 |
把内核(vmlinuz)和内存盘(initrd)文件拷贝出来以便后面和虚拟机镜像一起发布到OpenStack 云里。使用完虚拟机镜像后记得卸载(unmount):
$ sudo cp /mnt/boot/vmlinuz-2.6.32-28-server /home/vpsee/ $ sudo cp /mnt/boot/initrd.img-2.6.32-28-server /home/vpsee/
$ sudo umount /mnt |
把刚才的虚拟机镜像 ubuntutemplate.img 的文件系统标志改成 ‘uec-rootfs’:
$ sudo tune2fs -L uec-rootfs ubuntutemplate.img tune2fs 1.41.14 (22-Dec-2010) |
3.发布 Ubuntu 镜像
好了,ubuntu 镜像已经做好了,现在可以发布到云里了,需要3个东西,虚拟机的内核文件、虚拟机的内存盘文件和虚拟机镜像文件:
$ uec-publish-image -t image --kernel-file vmlinuz-2.6.32-28-server \ --ramdisk-file initrd.img-2.6.32-28-server amd64 ubuntutemplate.img mybucket ami-00000006 mybucket/ubuntutemplate.img.manifest.xml |
等待一段时间后出现 ami-00000006 mybucket/ubuntutemplate.img.manifest.xml 表示我们刚制作的 ubuntu 镜像已经正式发布到云里,以后就可以以这个镜像为模板来快速生成虚拟机实例(instance)。可以通过 euca-describe-images 来查看:
$ euca-describe-images
IMAGE aki-00000001 mybucket/vmlinuz-2.6.32-28-server.manifest.xml availablpublic x86_64 kernel IMAGE ari-00000002 mybucket/initrd.img-2.6.32-28-server.manifest.xml available public x86_64 ramdisk IMAGE ami-00000003 mybucket/ubuntutemplate.img.manifest.xml untarring |
4.第一个 Ubuntu 虚拟机实例
有了 ubuntu 镜像(模板)以后我们就可以以这个 “镜像” 为模板来为云计算用户创建 n 个 ubuntu 虚拟机(操作系统)实例,不过在运行实例之前需要 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.tiny ami-00000003 RESERVATION r-n0lpdme5 mycloud default INSTANCE i-00000001 ami-00000003 scheduling mykey (mycloud) |
上面使用 euca-run-instances 创建一个实例后可以用 nova-manage 命令看到:
$ sudo nova-manage vm list instance node type state launched image kernel ramdisk project user zone index i-00000001 node01 launching None 3 1 2 |
可以看看现在的云里面 IP 分配情况:
$ sudo nova-manage network list network netmask start address DNS 192.168.3.0/25 255.255.255.128 192.168.3.3 None |
刚才用 euca-run-instances 启动的一个 ubuntu 虚拟机实例的 IP 就是从 192.168.3.3 开始的,所以 ssh 登录这个 IP 就登上了我们的第一个云虚拟机:)
$ ssh 192.168.3.3 vpsee@i-00000001:~$ |