首先如果你打算搭建一套单节点环境的Openstack,那一定是用于测试的,真正的Openstack环境请勿使用单节点环境,这仅仅只是让你了解并初步安装Openstack来用的环境。
其次,由于Openstack的发展壮大,现在越来越多的公司都开始加入Openstack,包括Redhat,所以渐渐地越来越人性化的安装命令也被一步步的完善。对新手安装Openstack来说还是非常有用的。
本文是基于fedora官方的"Getting started with Openstack EPEL"和Redhat官方的"Getting Started Guide"两篇文章,然后根据自己的网络状况进行整合而最终安装完成的,大家在安装的时候只要根据自己的实际情况进行一些简单的调整即可。
之前在摸索Openstack安装的时候,总是被网络环节所卡住研究了很长时间,最后发现Openstack的网络不吭,而是需要选择一个好的镜像才对。稍后我会写一篇关于在安装Openstack时候遇到的一些问题以及解决办法。
一、基础硬件环境准备
我这里使用的是一台R410:
系统:CentOS release 6.3 (Final),安装采用最简安装。
网络:单网卡(em1),网卡直接配ip:10.199.21.215,并确保这个网卡到外网畅通无阻。
硬盘分区:由于Openstack的Volume需要一块独立的分卷,所以我在分区的时候就直接创建了一个100G的Volume作为vg。这里注意vg的名字一定要为"nova-vloumes",通过vgdisplay可以看到:
# vgdisplay |
当一切准备就绪,就可以开始准备搭建Openstack环境了。
二、软件环境准备
2.1.添加epel源
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm |
由于fedora官方的大力支持,Openstack的最新稳定版已经出现在epel的测试源中,我们更新完epel源之后直接使用yum安装即可
# yum update # yum --enablerepo=epel-testing install openstack-nova openstack-glance openstack-keystone openstack-quantum openstack-swift\* openstack-dashboard openstack-utils memcached qpid-cpp-server mysql-server avahi dnsmasq-utils |
2.2.更改安全设置 修改/etc/qpidd.conf文件,确保里面auth=no
# sed -i s/^auth=.*/auth=no/g /etc/qpidd.conf |
关闭selinux
# sed -i s/^SELINUX=.*/SELINUX=disabled/g /etc/selinux/config |
三、Openstack安装
3.1 开启各项服务
我们是yum安装的mysql,所以刚上来要先进行第一次启动以及一些配置,mysql的配置这里就不详述了,包括root密码什么的,大家根据自己的环境需要自己给mysql加入密码。之后启动即可
# /etc/init.d/mysqld start && chkconfig mysqld on |
为Openstack准备数据库
# openstack-db --init --service nova # openstack-db --init --service glance |
开启提供支持的服务
# service qpidd start && chkconfig qpidd on # service libvirtd start && chkconfig libvirtd on |
开启glance服务
# for svc in api registry; do service openstack-glance-$svc start; chkconfig openstack-glance-$svc on ; done |
开启Nova服务
# for svc in api objectstore compute network volume scheduler cert; do service openstack-nova-$svc start ; chkconfig openstack-nova-$svc on ; done |
按理来说,各项服务都应该能正常开启。我们需要手动检查各个服务的Log查看是否有报错:Log在/var/log/nova下。
3.2 Keystone设置
Keystone就是一个密码库,管理所有的认证机制,包括各种服务的密码验证,以及我们从浏览器访问Web版的控制台的时候的登陆认证等。可以说它就是Openstack的机要处,必须要有它。然后我们使用各个命令来查询状态的时候,都要先进行一个密码的验证,而这个验证有一些明文的参数,这些内容是需要被指定在系统的环境变量中的。所以下面就可以看到我们添加系统环境变量的一步。
首先进行keystone的数据库设置
# openstack-db --init --service keystone |
然后添加系统环境变量,由于环境变量会因为我们每次登陆而重置,所以我们把它写到一个文件里,这样我们每次ssh连入系统的时候就可以直接直读这个文件而获得我们自定义的这些系统环境变量。这里OS_PASSWORD对应的密码可以自己设置,由于Openstack中各项认证的密码众多,所以我建议大家都使用统一的密码。注意里面的ADMIN_TOKEN这将是所有服务获取认证的关键。
# cat > keystonerc <<EOF export ADMIN_TOKEN=$(openssl rand -hex 10) export OS_USERNAME=admin export OS_PASSWORD=Abcd1234 export OS_TENANT_NAME=admin export OS_AUTH_URL=http://127.0.0.1:5000/v2.0/ EOF |
这样我们当前目录下就有一个keystonerc的文件,这里记录着这些系统变量。
# . ./keystonerc |
在配置文件中设置管理员的token
# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN |
开始keystone服务
# service openstack-keystone start && chkconfig openstack-keystone on |
创建默认的Tenants, Users和Roles,注意这里的SERVICE_PASSWORD,将会成为这些Users的默认密码
# ADMIN_PASSWORD=$OS_PASSWORD SERVICE_PASSWORD=Abcd1234 openstack-keystone-sample-data |
创建好后,验证一下,如果弹出下面的内容,那就是创建完成了。
# keystone user-list +----------------------------------+---------+--------------------+--------+ | id | enabled | email | name | +----------------------------------+---------+--------------------+--------+ | 1581bec2ca864aa7b6a88947dddf7926 | True | [email protected] | glance | | 3170c1630b154997acd9aed847ef3f48 | True | [email protected] | nova | | 8b0d755e74524742966fdaf14a6e77d6 | True | [email protected] | demo | | c2a3f53f014445a88650ba14a264e207 | True | [email protected] | admin | +----------------------------------+---------+--------------------+--------+ |
3.3 配置nova
更改nova配置文件中的相关keystone认证的配置,注意,由于我们是单网卡节点,所以我们一定要制定flat_interface和public_interface为我们的网卡"em1"
# openstack-config --set /etc/nova/api-paste.ini filter:authtoken admin_tenant_name service # openstack-config --set /etc/nova/api-paste.ini filter:authtoken admin_user nova # openstack-config --set /etc/nova/api-paste.ini filter:authtoken admin_password Abcd1234 # openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone # openstack-config --set /etc/nova/nova.conf DEFAULT flat_interface em1 # openstack-config --set /etc/nova/nova.conf DEFAULT public_interface em1 # for svc in api compute; do service openstack-nova-$svc restart; done |
查看flavor的列表来检查一下我们配置好的nova是否能通过keystone来进行验证了
# nova flavor-list +----+-----------+-----------+------+-----------+------+-------+-------------+ | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | +----+-----------+-----------+------+-----------+------+-------+-------------+ | 1 | m1.tiny | 512 | 0 | 0 | | 1 | 1.0 | | 2 | m1.small | 2048 | 10 | 20 | | 1 | 1.0 | | 3 | m1.medium | 4096 | 10 | 40 | | 2 | 1.0 | | 4 | m1.large | 8192 | 10 | 80 | | 4 | 1.0 | | 5 | m1.xlarge | 16384 | 10 | 160 | | 8 | 1.0 | +----+-----------+-----------+------+-----------+------+-------+-------------+ |
3.4 配置glance
与nova的配置一样,我们也依然需要先设置glance来能使用keystone进行认证
# openstack-config --set /etc/glance/glance-api.conf paste_deploy flavor keystone # openstack-config --set /etc/glance/glance-registry.conf paste_deploy flavor keystone # openstack-config --set /etc/glance/glance-api-paste.ini filter:authtoken admin_tenant_name service # openstack-config --set /etc/glance/glance-api-paste.ini filter:authtoken admin_user glance # openstack-config --set /etc/glance/glance-api-paste.ini filter:authtoken admin_password Abcd1234 # openstack-config --set /etc/glance/glance-registry-paste.ini filter:authtoken admin_tenant_name service # openstack-config --set /etc/glance/glance-registry-paste.ini filter:authtoken admin_user glance # openstack-config --set /etc/glance/glance-registry-paste.ini filter:authtoken admin_password Abcd1234 # service openstack-glance-api restart # service openstack-glance-registry restart |
配置完后,使用查看当前镜像命令进行验证:
# glance index |
如果命令正确的话,返回值是0,当前我们没有添加任何镜像,所以这个一定是查不出内容的。但是返回值可以告诉我们是否命令执行正常。
3.5 添加网络
创建一个网络,这个网络是到时候由openstack创建出的虚拟机的主网络,所以我们可以根据自己的需要来创建,并且制定网桥,Openstack的虚拟网络会在创建第一个实例的时候由openstack自动创建出来,无需我们手动添加。
# nova-manage network create weiyantest 192.168.0.0/24 1 256 --bridge=weiyanbr01 |
3.6 创建一个keypair
keypair实际上就是ssh认证时候的私钥,我们创建好的实例想进入它还不知道密码的时候就需要使用它来进入,而如果有keypair,则所有新创建出来的实例都是已它来作为自己的私钥的。我们这里创建一个名字叫mykey的私钥
# nova keypair-add mykey > oskey.priv # chmod 600 oskey.priv |
设置keypair的加载类型,允许我们使用这一个私钥进入多个不同的实例
# openstack-config --set /etc/nova/nova.conf DEFAULT libvirt_inject_partition -1 # service openstack-nova-compute restart |
3.7 设置Dashboard
Dashboard实际上就是Openstack的Web控制端,比较好安装
# yum install openstack-dashboard # service httpd restart && chkconfig httpd on |
之后,我们就可以通过 http://你机器的IP/dashboard 的方式访问到了,用户名是admin,密码是我们在系统环境中指定的密码
3.8 设置安全策略
这里的安全策略实际上就是后台那些创建出来的实例的防火墙~~
# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 # nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 # nova secgroup-list # nova secgroup-list-rules default +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | icmp | -1 | -1 | 0.0.0.0/0 | | | tcp | 22 | 22 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ |
创建确保从任意ip访问能ping通,能ssh进
3.9 设置VNC(可选)
VNC实际上是非必须的,不过既然Openstack有这功能,我们加入它实际上也不费力: 首先修改/etc/nova/nova.conf,在里面加入下面的内容,确保novncproxy_base_url这里的ip是你自己openstack的ip
novncproxy_host = 0.0.0.0 novncproxy_port = 6080 novncproxy_base_url=http://10.199.21.215:6080/vnc_auto.html vnc_enabled=true vncserver_listen=127.0.0.1 vncserver_proxyclient_address=127.0.0.1 |
安装novnc模块
# yum install openstack-nova-novncproxy openstack-nova-consoleauth # service openstack-nova-novncproxy start # service openstack-nova-consoleauth start # chkconfig openstack-nova-novncproxy on # chkconfig openstack-nova-consoleauth on # service openstack-nova-compute restart |
如果你安装到这里,那么基本上大部分的内容都已经安装完了,接下来就剩上传镜像并创建第一个实例了~!
四、上传镜像,开启实例
关于镜像的制作,网上有很多教程,不过镜像制作好后能不能直接使用还是另一回事,至于能否使用,需要根据创建实例的时候它是否报错来对症下药。这里我只说明,使用一个简单的镜像来帮助大家先能正确的上传外加开启实例。
4.1 上传镜像
首先我们把别人已经制作好的镜像下载下来,这里使用的是一个12.1版本的Ubuntu的精简系统(至于其他的系统如CentOS,Windows什么的,大家可以多找找类似的文章,然后自己制作一个适合自己的镜像):
# wget http://smoser.brickies.net/ubuntu/ttylinux-uec/ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz # tar zxvf ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz |
根据镜像的不同,添加到Openstack的方式也不同,这里使用的是指定内核和分区的添加方式,首先加载内核
# glance add name="tty-ubuntu-kernel" disk_format=aki container_format=aki < ttylinux-uec-amd64-12.1_2.6.35-22_1-vmlinuz |
结束后会出现一个image的ID,注意我们要暂时的记录一下,后面还要用到 然后添加分区表bootloader的镜像
# glance add name="tty-ubuntu-ramdisk" disk_format=ari container_format=ari < ttylinux-uec-amd64-12.1_2.6.35-22_1-loader |
之后也会生成一个ID。 最后添加真正的系统镜像,注意这里的kernel_id就是我们添加的第一个vmlinuz之后生成的ID,而ramdisk_id则是我们添加第二个bootloader后生成的ID,每个人的环境生成的ID不同,这里我将我生成的ID填上去,大家安装的时候一定不要照搬!
# glance add name="tty-ubuntu" disk_format=ami container_format=ami kernel_id=492e2667-ad20-4bf4-9aeb-dc54c4078695 ramdisk_id=ccd7403a-ea56-44e9-b281-d785ea5fe733 < ttylinux-uec-amd64-12.1_2.6.35-22_1.img |
成功添加后,我们使用命令查看一下添加的镜像:
# glance index ID Name Disk Format Container Format Size ------------------------------------ ------------------------------ -------------------- -------------------- -------------- 069d6ea1-fc3e-4894-8da2-596bc80c86b9 ttyubuntu ami ami 25165824 ccd7403a-ea56-44e9-b281-d785ea5fe733 ttyubuntu-ramdisk ari ari 96629 492e2667-ad20-4bf4-9aeb-dc54c4078695 ttyubuntu-kernel aki aki 4404752 |
4.2 创建/启动实例
4.2.1 使用命令行创建一个实例:
# nova boot --flavor 2 --key_name mykey --image 069d6ea1-fc3e-4894-8da2-596bc80c86b9 |
这里,flavor实际上就是选择这个实例的"型号",可以通过nova flavor-list来查看都有什么样的配置;--key_name就是我们的keypair的名字,这里我们用自己的--mykey,最后--image就是我们选用的image了。 创建完成后我们可以来查看一下实例的状态
# nova list +--------------------------------------+----------+--------+---------------------+ | ID | Name | Status | Networks | +--------------------------------------+----------+--------+---------------------+ | aa4b06a0-db0f-4d37-bacc-b610266785a5 | linux456 | ACTIVE | demonet=192.168.0.5 | +--------------------------------------+----------+--------+---------------------+ |
需要查看详细,我们也可以使用
# nova show linux456 +-------------------------------------+----------------------------------------------------------+ | Property | Value | +-------------------------------------+----------------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-SRV-ATTR:host | openstack-all.ubisoft.org | | OS-EXT-SRV-ATTR:hypervisor_hostname | None | | OS-EXT-SRV-ATTR:instance_name | instance-00000009 | | OS-EXT-STS:power_state | 1 | | OS-EXT-STS:task_state | None | | OS-EXT-STS:vm_state | active | | accessIPv4 | | | accessIPv6 | | | config_drive | | | created | 2012-10-09T10:23:45Z | | demonet network | 192.168.0.5 | | flavor | m1.small | | hostId | a8b209232974e07c716015d75757d6c07c83b11dbba6012f94fec285 | | id | aa4b06a0-db0f-4d37-bacc-b610266785a5 | | image | ttyubuntu | | key_name | mykey | | metadata | {} | | name | linux456 | | progress | 0 | | status | ACTIVE | | tenant_id | d389ef56457647a6bb8c40818bcf9d3f | | updated | 2012-10-09T10:24:19Z | | user_id | c2a3f53f014445a88650ba14a264e207 | +-------------------------------------+----------------------------------------------------------+ |
当实例彻底启动完之后,Status为ACTIVE的话,这时我们就可以使用ssh连接进我们的实例了。
# ssh -i oskey.priv [email protected] The authenticity of host '192.168.0.5 (192.168.0.5)' can't be established. RSA key fingerprint is 95:13:b6:8b:84:79:f5:b7:00:7b:4f:7d:c6:1a:6b:ef. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.5' (RSA) to the list of known hosts. Chop wood, carry water. VM># ll total 18 drwx------ 3 root root 1.0K Oct 9 10:24 ./ drwxr-xr-x 18 root root 1.0K Oct 9 10:24 ../ drwx------ 2 root root 1.0K Oct 9 10:24 .ssh/ -rwx------ 1 root root 7.0K Oct 17 2010 g01-static-tests.sh* -rw-r--r-- 1 root root 691 Oct 9 10:24 ssh-host-dss-key.pub -rw-r--r-- 1 root root 315 Oct 9 10:24 ssh-host-rsa-key.pub -rwx------ 1 root root 2.0K Oct 17 2010 ssh_key_gen.sh* |
4.2.2 使用图形化界面创建实例
如果使用Dashboard提供的Web页面来创建一个实例的话则相对会简单不少,于是我们登陆到Web页面上。注意,这里建议大家使用Chrome登陆,使用IE登陆可能会有一些不好用……
登陆进Openstack,然后在Images & Snapshots这个页面中在我们自己上传的Images上点击Launch即可
之后弹出创建一个实例的配置页面:我们只需要填好名字,选好Flavor,设置好Keypair,然后点击Launch Instance即可
之后,页面自动跳入Instances界面我们可以看到我们的Instances的加载状态,没过1分钟,我们可以看到已经是Active的状态了。
此时,我们回到ssh端,就可以使用命令来连接进入了。
单网卡单节点环境安装Essex的基础就是这些,稍后我会放出多节点,多网卡,以及手动用源码包安装,以及最新的F版本的安装过程,以及安装中出现的错误解决。 感谢支持,欢迎持续关注"魏延是反贼"的小站 www.weiyan.me