转载请注明出处 - 阿Q
v1.0 //2013/11/12
v1.1 //2013/12/6 修改glance的配置,防止snapshot创建时的错误。
//2013/12/7 修改Horizon的配置,使一些项目可以编辑
//2014/02/08修改小错误
Havana于2013年10月份发布,稳定版本为2013.2。相信很多Openstack爱好者和开发测试人员已经开始使用了。作为IaaS架构平台,Openstack面向的是集群主机虚拟化和资源的半自动化调配。但是作为测试和开发使用,尤其是在有限成本控制下,多主机测试在资金和空间占用上耗费较多。所以我们寻求在单主机下实现Openstack的运行。
本文面向的读者:
- 具备基本的Openstack知识(逻辑架构和组成部分)
- 熟悉基本的Linux操作和配置。本文使用的是Ubuntu12.04 LTS Server版,这也是Openstack官方测试所选择的Linux发行版。
既然是单主机系统,那就对主机的配置稍有要求。我用的是Dell的PC服务器,4核,4G内存,500G硬盘,单网卡。这也应该算是最低配置了。说起网卡,Havana官方文档建议的是采用双网段(可以区分内网管理和外网服务),这也就要求我们的服务器具有两个物理端口。因为我们是测试环境,无需区分网络,所以单网卡可以满足要求,只是需要检查单网段下Havana是否工作正常。
因为是单机安装,存储和网络相对都简单化了,所以这里我们暂时不会涉及对象存储(Object Storage),块存储(Block Storage)和网络,以后我会讲如何仿真。
安装会涉及到如下几部分。
- 操作系统的基本配置
- 配置认证服务(Identity Service)
- 配置镜像服务(Image Service)
- 配置云计算服务(Compute Services)
- 增加用户面板(Dashboard)
注:本文所有的操作命令都是在Ubuntu 12.04 LTS Server版的root用户下执行,所以请先进入root用户模式(sudo -i)以方便执行。
1. 操作系统的基本配置
1.1 网络配置
由于我们只有单网卡,OS的网络配置在你安装系统的时候就已经完成了,所以在此无需配置。针对Openstack的内部网段,我们可以通过虚拟桥接方式实现。你可以手工配置,当然Openstack安装的时候也会自动配置,这里我们先略过不谈。
1.2 NTP配置
因为是单机安装,无需配置NTP Server。
1.3 安装MySql数据库
Openstack服务需要数据库来存储信息。我们就拿常用的MySql来举例。需要安装客户端,数据库和Python库。
# apt-get install python-mysqldb mysql-server
安装时,会需要你设置root用户密码。Openstack要求MySql没有匿名用户权限,所以你需要删除匿名用户和无关的数据库。下面这个命令可以实现。
# mysql_secure_installation
运行以后,会有一些选项,全选yes就ok。
1.4 准备Openstack包
在Ubuntu下,需要安装一些针对Havana的最新的包。
# apt-get install python-software-properties
# add-apt-repository cloud-archive:havana
这些包安装完后,你需要升级一下系统。
# apt-get update && apt-get dist-upgrade
1.5 安装消息队列服务
Openstack默认选用了RabbitMQ。也支持Qpid和ZeroMQ。# apt-get install rabbitmq-server
2. 配置认证服务(Identity Service)
2.1 安装认证服务(Keystone)
# apt-get install keystone python-keystone python-keystoneclient
我们在mysql里为认证服务创建一个数据库,名字就叫做keystone,密码也是keystone
# mysql -u root -p
mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
修改Keystone的配置文件/etc/keystone/keystone.conf,使其指向我们刚刚创建的数据库。修改[sql]部分如下:
[sql]
# The SQLAlchemy connection string used to connect to the database
connection = mysql://keystone:keystone@localhost/keystone
接下来创建keystone需要的表格。
# keystone-manage db_sync
生成admin的token。
# openssl rand -hex 10
还是编辑/etc/keystone/keystone.conf,把上面生成的token替换下面的ADMIN_TOKEN
[DEFAULT]
# A "shared secret" between keystone and other openstack services
admin_token = ADMIN_TOKEN
重启认证服务
# service keystone restart
2.2 定义用户(Users)、租户(Tenants)和角色(Roles)
在使用认证服务的时候,你需要一对用户名和密码。目前我们还没有创建任何用户,但我们可以使用之前创建的管理token。需要做的就是把这个token传给keystone命令(参数为--token)。为了避免每次使用keystone命令都加一些相同的参数,我们可以把这些参数值放到环境变量里。
# export OS_SERVICE_TOKEN=ADMIN_TOKEN
# export OS_SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0
其中endpoint指明认证服务在哪运行。下面创建租户。
# keystone tenant-create --name=admin --description="Admin Tenant"
# keystone tenant-create --name=service --description="Service Tenant"
创建管理用户。用户密码ADMIN_PASS需要自己指定。
# keystone user-create --name=admin --pass=ADMIN_PASS --email=admin@example.com
创建角色
# keystone role-create --name=admin
为用户添加角色和租户属性。
# keystone user-role-add --user=admin --tenant=admin --role=admin
2.3 定义服务和API接入点(endpoints)
认证服务不光管理着用户属性,还登记所有Openstack服务,包括它自己本身。所以我们注册一个认证服务。
# keystone service-create --name=keystone --type=identity --description="Keystone Identity Service"
创建成功后会生成一个id,这个id要用在下面这个命令上,以便创建API接入点。
# keystone endpoint-create --service-id=the_service_id_above --publicurl=http://127.0.0.1:5000/v2.0 \
--internalurl=http://127.0.0.1:5000/v2.0 --adminurl=http://127.0.0.1:35357/v2.0
同样的,当你安装其他Openstack服务时,像Glance,Nova,都要运行类似上面的命令。
2.4 验证认证服务是否安装成功
先把环境变量取消。
# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
制作一个文件,文件名自取,例如ksrc,内容如下,然后source一下它。
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://127.0.0.1:35357/v2.0
# source ksrc
现在你可以尝试获得一下token,如果成功,说明认证服务工作正常。
$ keystone token-get
3. 配置镜像服务
很多命令与配置认证服务一样,我就不做过多解释了。
3.1 安装镜像服务(Glance)
安装glance包。
# apt-get install glance
删除/var/lib/glance/glance.sqlite,防止错误使用sqlite数据库。
为镜像服务创建数据库,名字叫做glance,密码也是glance
# mysql -u root -p
mysql> CREATE DATABASE glance;
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';
生成数据表。
# glance-manage db_sync
keystone里创建glance用户,密码(GLANCE_PASS)自己指定
# keystone user-create --name=glance --pass=GLANCE_PASS--email=glance@example.com
# keystone user-role-add --user=glance --tenant=service --role=admin
修改glance配置文件/etc/glance/glance-api.conf和glance-registry.conf,找到如下部分并修改。
[keystone_authtoken]
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = GLANCE_PASS
[paste_deploy]
flavor = keystone
在认证服务里注册镜像服务并创建API接入点。
# keystone service-create --name=glance --type=image --description="Glance Image Service"
# keystone endpoint-create \
--service-id=the_service_id_above \
--publicurl=http://127.0.0.1:9292 \
--internalurl=http://127.0.0.1:9292 \
--adminurl=http://127.0.0.1:9292
重启服务。
# service glance-registry restart
# service glance-api restart
3.2 验证镜像服务是否安装成功
准备好一个镜像文件,这个镜像文件可以自己制作,也可以从网上下载。我制作了一个Ubuntu12.04 LTS Server的镜像ubuntu_1204_server.qcow2。至于怎么制作镜像,我们另文讨论。
创建一个镜像。
# glance image-create --name="Ubuntu 12.04 LTS Server" --disk-format=qcow2 \
--container-format=bare --is-public=true < ubuntu_1204_server.qcow2
我的镜像如下所示。
# glance image-list
+--------------------------------------+-------------------------+-------------+------------------+------------+--------+
| ID | Name | Disk Format | Container Format | Size | Status |
+--------------------------------------+-------------------------+-------------+------------------+------------+--------+
| dbe3ba9c-c22b-41c9-bac5-dd0e6964c1ce | Ubuntu 12.04 LTS Server | qcow2 | bare | 1502347264 | active |
+--------------------------------------+-------------------------+-------------+------------------+------------+--------+
4. 配置云计算服务
4.1 安装nova控制服务
先安装所需要的包
# apt-get install nova-novncproxy novnc nova-api nova-ajax-console-proxy nova-cert nova-conductor nova-consoleauth nova-doc nova-scheduler python-novaclient
为nova创建数据库,名字叫做nova,密码也是nova
# mysql -u root -p
mysql> CREATE DATABASE nova;
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';
编辑nova配置文件/etc/nova/nova.conf,使其指向自己的数据库。
[database]
# The SQLAlchemy connection string used to connect to the database
sql_connection = mysql://nova:nova@localhost/nova
还有一些其他需要在配置文件nova.conf里修改或添加的属性,如下所示
my_ip=127.0.0.1
vncserver_listen=0.0.0.0
vncserver_proxyclient_address=127.0.0.1
auth_strategy=keystone
rpc_backend=nova.rpc.impl_kombu
rabbit_host=127.0.0.1
glance_host=127.0.0.1
同时修改/etc/nova/api-paste.ini如下。
[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name=service
admin_user=nova
admin_password=nova
生成数据表。
# nova-manage db sync
接下来就是比较熟悉的命令了,如果命令返回错误,可以重启一下nova服务。
# keystone user-create --name=nova --pass=NOVA_PASS --email=nova@example.com
# keystone user-role-add --user=nova --tenant=service --role=admin
# keystone service-create --name=nova --type=compute --description="Nova Compute Service"
# keystone endpoint-create --service-id=the_service_id_above --publicurl=http://127.0.0.1:8774/v2/%\(tenant_id\)s --internalurl=http://127.0.0.1:8774/v2/%\(tenant_id\)s --adminurl=http://127.0.0.1:8774/v2/%\(tenant_id\)s
然后重启一下服务
# service nova-api restart
# service nova-cert restart
# service nova-consoleauth restart
# service nova-scheduler restart
# service nova-conductor restart
# service nova-novncproxy restart
下面可以检查一下nova是否配置正确,可以用如下命令。
# nova image-list
+--------------------------------------+-------------------------+--------+--------+
| ID | Name | Status | Server |
+--------------------------------------+-------------------------+--------+--------+
| dbe3ba9c-c22b-41c9-bac5-dd0e6964c1ce | Ubuntu 12.04 LTS Server | ACTIVE | |
+--------------------------------------+-------------------------+--------+--------+
4.2 安装一个nova云计算节点
先下载所需要的包。
# apt-get install nova-compute-kvm python-novaclient python-guestfs
删除默认安装的SQLite数据库
# rm /var/lib/nova/nova.sqlite
重启计算服务
# service nova-compute restart
4.3 激活内部网络
这应该算是很关键的一步了。我们选用FlatDHCPManager。以后我会用一个专题讲网络。下载网络包。
# apt-get install nova-network
编辑配置文件/etc/nova/nova.conf
[DEFAULT]
network_manager=nova.network.manager.FlatDHCPManager
fixed_range=192.168.122.0/24
flat_network_dhcp_start=192.168.122.2
flat_network_bridge=virbr0
重启网络服务。
# service nova-network restart
创建自己的虚拟网络。
# nova network-create vmnet --bridge-interface=virbr0
4.4 启动一个镜像
生成密钥
$ ssh-keygen
$ cd .ssh
$ nova keypair-add --pub_key id_rsa.pub mykey
如果你需要自己的镜像实例能被ping通和ssh,需要放开如下权限
# nova secgroup-add-rule defaulttcp 22 22 0.0.0.0/0
# nova secgroup-add-rule defaulticmp -1 -1 0.0.0.0/0
启动实例
$ nova boot --flavor <flavor-id> --key_name mykey --image <image-id> --security_group default Ubuntu
以下是我的例子。
# nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True |
| 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True |
| 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True |
| 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True |
| 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
# nova image-list
+--------------------------------------+-------------------------+--------+--------+
| ID | Name | Status | Server |
+--------------------------------------+-------------------------+--------+--------+
| dbe3ba9c-c22b-41c9-bac5-dd0e6964c1ce | Ubuntu 12.04 LTS Server | ACTIVE | |
+--------------------------------------+-------------------------+--------+--------+
# nova list
+--------------------------------------+--------+--------+------------+-------------+---------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+--------+--------+------------+-------------+---------------------+
| eff82154-bd75-40a7-bc83-60ba0f5b2ac4 | ubuntu | ACTIVE | None | Running | vmnet=192.168.122.2 |
+--------------------------------------+--------+--------+------------+-------------+---------------------+
5. 增加用户面板
这个非常简单,安装完以后就可以访问了。
# apt-get install memcached libapache2-mod-wsgi openstack-dashboard
编辑/etc/openstack-dashboard/local_settings.py
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "_member_"
接着访问http://<your-host-id>/horizon,是不是很简单。
因为时间有限,写的比较简单,肯定会有错误,有些概念也没有深入,以后有时间我会补充。也希望大家的反馈。