手把手教你如何逐步安装OpenStack

日期: 2016-05-10 作者:Walker Rowe翻译:王学强 来源:TechTarget中国 英文

尽管OpenStack官方提供的在线安装教程和分步向导能够为管理员提供很大帮助,但是依然存在很多不尽如人意的地方。因此在Ubuntu上安装OpenStack的过程当中,可以使用下面的操作文档来弥补官方教程的不足。 学习如何使用OpenStack的最简单方式就是在自己的电脑上进行实际部署。OpenStack官网提供了如何进行部署的相关教程,但是这个教程所包含的步骤过于繁杂,并且还有很多不准确的地方,因此用户很难顺利完成整个流程——比如,在整个安装流程当中,用户不可能简单地通过apt-get来获得所有的必要组件。

虽然OpenStack同时提供了图形化的分步向导,但是这种方式需要使用五台单独的虚拟机……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

尽管OpenStack官方提供的在线安装教程和分步向导能够为管理员提供很大帮助,但是依然存在很多不尽如人意的地方。因此在Ubuntu上安装OpenStack的过程当中,可以使用下面的操作文档来弥补官方教程的不足。

学习如何使用OpenStack的最简单方式就是在自己的电脑上进行实际部署。OpenStack官网提供了如何进行部署的相关教程,但是这个教程所包含的步骤过于繁杂,并且还有很多不准确的地方,因此用户很难顺利完成整个流程——比如,在整个安装流程当中,用户不可能简单地通过apt-get来获得所有的必要组件。虽然OpenStack同时提供了图形化的分步向导,但是这种方式需要使用五台单独的虚拟机。

在安装OpenStack的过程当中用户可能会遇到一系列的错误提示信息,尽管可以在Google当中逐个搜索这些问题的解决方案,但是这种方式会让用户在漫长的安装过程中感到更加沮丧,因此我推荐用户参考这个教程完成安装。为了彻底理解整个安装流程,我在Ubuntu上完成了两次OpenStack的完整安装过程,并且将所有获得的经验都体现在这个OpenStack安装教程当中。简单来说,这个教程的目的在于尽量简化和详尽说明OpenStack所提供的官方文档,最大程度上解决可能遇到的任何问题。

OpenStack安装前提

在开始之前,首先浏览一下OpenStack官网提供的文档“OpenStack Installation Guide for Ubuntu 14.04。”为了实现最佳效果,可以同时参考官网教程以及这个文档,以保证安装过程的顺利实施。作为参考,我使用的是OpenStack Kilo,也被称为version K。

为了保证系统正常运行,环境当中必须至少包含一个计算节点和一个控制器节点。虽然我们没有部署对象存储、块存储或者网络节点,但是这些都是在生产环境当中所必须的。

如果在安装过程当中卡在某一环节无法完成,那么可以暂时跳过这一环节,因为这些步骤除了第一步之外,并不需要按照时间顺序完成。在后面的安装过程当中可能会找到之前问题的解决方案。

总体来说,部署OpenStack环境包含如下基本步骤:

  1. 通过安装数据库、配置主机文件来创建基本环境;
  2. 安装Identity Service(身份验证服务);
  3. 安装Image Service(镜像服务);
  4. 安装Compute Service(计算服务);
  5. 安装Dashboard以便能够登陆lb界面。

搭建基础环境

在尝试搭建基础环境之前,必须首先创建一台Ubuntu 14.04 Server虚拟机。可以使用任何种类的hypervisor完成这项任务。我使用的是VMware vCloud Director。至于操作系统版本,尽管我倾向于使用Ubuntu Server,但是这个文档应该同样适用于Ubuntu Desktop。Ubuntu Server和Ubuntu Desktop的主要区别在于Server版没有图形界面。

注意需要使用root权限执行如下命令。如果用户使用的是Ubuntu Desktop而不是Server版,那么需要首先使用不同于root的普通账户登录,之后更改root账户密码,这样才能够运行后续的用户命令。在搭建环境的过程当中,还应该确保制作足够的快照,这样就能够在某些部分出现问题的时候及时进行回滚操作。

用户可以使用OpenStack教程当中提供的密码,直接复制和粘结这些密码可以尽量减少可能产生的错误。此外,SQL数据库当中不会使用root密码。除非文档特殊说明,否则不要运行apt-get命令,因为根据OpenStack.org的提示,不允许对OpenStack进行自动更新。

在创建Ubuntu Server虚拟机之后,需要向“/etc/hosts”文件当中添加controller和compute1的IP地址。为了保证这两个组件都在同一台机器上,可以使用如下命令:

127.0.0.1 controller compute1

之后,运行下面的命令:

apt-get install ubuntu-cloud-keyring

echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu"

           "trusty-updates/kilo main" > /etc/apt/sources.list.d/cloudarchive-kilo.list

apt-get update && apt-get dist-upgrade

跳过安装NTP(网络时间协议)服务器这一步。当前环境当中只有一台机器,因此不需要同步时间。现在运行下面的命令:

apt-get install mariadb-server python-mysqldb

需要注意的是我们使用的是MariaDB,而不是MySQL。现在我们需要按照文档说明来编辑“/etc/mysql/my.cnf”配置文件。

完成这一步之后,执行下面的命令:

service mysql restart

mysql_secure_installation

之后使用如下命令安装RabbitMQ服务器:

apt-get install rabbitmq-server

rabbitmqctl change_password guest RABBIT_PASS

身份验证服务

为了安装Identity Service,首先创建Keystone数据库。用户通过创建token来实现Keystone操作,之后用户才能够创建用户ID和密码,通过执行如下命令来完成这项任务:

openssl rand -hex 10

运行这个命令之后我得到了一个token:cde3aa151a5a7e048da9。用户可以使用这个token或者制作自己的token。之后,运行如下命令:

apt-get install keystone python-keystoneclient

参照OpenStack提供的文档,使用 vi /etc/keystone/keystone.conf来编辑配置文件。

需要注意的是OpenStack文档当中的某些命令会导致错误,因为其打开了一个新的shell。可以通过运行如下命令来避免产生这种错误,注意前面不要添加su –s:

/bin/sh -c "keystone-manage db_sync" keystone

之后执行如下命令重启keystone服务:

service keystone restart

现在用户必须导出这两种环境变量。这样就能够临时允许用户使用token来通过Keystone的认证,而不需要使用用户账户。

export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9

OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

创建tenant、用户和角色

这时候我遇到了一个error 500的错误,是因为我忘记了重启Keystone服务。为了创建Keystone、用户和角色,需要首先执行下面的命令:

keystone tenant-create --name admin --description "Admin Tenant"

keystone user-create --name admin --pass ADMIN_PASS --email EMAIL_ADDRESS

继续参照OpenStack提供的文档,执行如下命令:

keystone tenant-create --name service --description "Service Tenant"

创建service entity(服务实体)和API endpoint

根据OpenStack提供的文档说明,下一步需要进行验证操作,也就是尝试发现任何错误。

验证操作

根据OpenStack所提供的文档,如果想要验证上面的操作是否正确需要执行下面的命令:

unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT

为了保证用户名和密码能够顺利通过验证过程,可以使用下面的命令:

keystone --os-tenant-name admin --os-username admin --os-password ADMIN_PASS

>   --os-auth-url http://controller:35357/v2.0 token-get

上面的命令模拟了Identity Service的验证过程,会为用户分配一个登陆token。

在我执行OpenStack所提供命令的过程当中,收到了下面的错误提示信息:

The request you have made requires authentication. (HTTP 401) (Request-ID: req-0550f2c3-9077-470b-95d8-ce4ff498ff8f)

Error 401表明用户没有通过验证,意味着我忘记使用下面的命令创建管理员角色了。

keystone role-create --name admin

用户还可以使用下面这条命令检查用户具有哪些角色:

keystone user-role-list --user admin --tenant admin

可以使用如下命令重设token环境变量:

export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9

export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

为了修复这个问题,我为admin用户添加了admin角色:

keystone user-role-add --user admin --tenant admin --role admin

还可以使用其他Keystone命令——比如list——在当前环境当中进行debug。这对于将要安装的下一个命令集同样适用:

创建OpenStack客户端环境脚本

如果不想使用token运行这些命令或者不想将它们放在命令行当中执行,那么可以配置环境变量。使用下面的命令创建两个脚本文件。

vi admin-openrc.sh

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=ADMIN_PASS

export OS_AUTH_URL=http://controller:35357/v2.0

vi demo-openrc.sh

export OS_TENANT_NAME=demo

export OS_USERNAME=demo

export OS_PASSWORD=DEMO_PASS

export OS_AUTH_URL=http://controller:5000/v2.0

之后执行如下命令:

source admin-openrc.sh

添加image service(镜像服务)

参考这个文档安装Glance,之后使用下面的命令来创建数据库:

keystone user-create --name glance --pass GLANCE_PASS

我收到了error 401错误提示信息,但是可以使用如下命令进行修复:

export OS_SERVICE_TOKEN=cde3aa151a5a7e048da9

export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

如果你同时使用shell和endpoint进行认证,那么将会收到下面的提示:“警告,可以使用token和终端来绕开认证(认证凭证已经被忽略。)”

继续输入如下所示的一系列命令:

keystone service-create --name glance --type image

 --description "OpenStack Image Service"

keystone endpoint-create

 --service-id $(keystone service-list | awk '/ image / {print $2}')

 --publicurl http://controller:9292

 --internalurl http://controller:9292

 --adminurl http://controller:9292

 --region regionOne

apt-get install glance python-glanceclient

这时当你参照OpenStack教程编辑“/etc/glance/glance-api.conf”文件的时候,还需要rem out:

#sqlite_db = /var/lib/glance/glance.sqlite

使用下面这些命令来替换上面这条命令:

[keystone_authtoken]

#identity_uri = http://127.0.0.1:35357

#admin_tenant_name = %SERVICE_TENANT_NAME%

#admin_user = %SERVICE_USER%

#admin_password = %SERVICE_PASSWORD%

#revocation_cache_time = 10

    auth_uri = http://controller:5000/v2.0

identity_uri = http://controller:35357

admin_tenant_name = service

admin_user = glance

admin_password = GLANCE_PASS

完成上面的操作之后,参考OpenStack教程继续进行编辑:

vi /etc/glance/glance-registry.conf

之后输入下面的命令,省略sh –c:

/bin/sh -c "glance-manage db_sync" glance

这时,我收到了如下的错误提示信息:

CRITICAL glance [-] DBConnectionError: (OperationalError) (2003, "Can't connect to MySQL server on 'controller' (111)") None None

这条信息表明,我没有输入正确格式的IP地址,而且没有执行如下命令:

flavor = keystone in [paste_deploy]

验证操作

根据验证操作的说明,用户必须首先下载一个Linux镜像,之后使用如下命令将其上传到image service当中:

glance image-create --name "cirros-0.3.3-x86_64" --file /tmp/images/cirros-0.3.3-x86_64-disk.img

 --disk-format qcow2 --container-format bare --is-public True --progress

执行这条命令之后我收到了如下错误信息:

error 403

<h1>403 Forbidden</h1>

    Access was denied to this resource.<br /><br />

To debug that, I ran:

之后我运行下面这条命令进行debug:

glance image-list

但是程序又返回一个error 500错误提示,因此我重启了glance服务:

service glance-registry restart

    service glance-api restart

添加计算服务和部署控制器节点

我发现OpenStack教程当中的下一部分会让人感到十分困惑,因为通过apt-get获取的配置文件当中的全部内容都丢失了,为了解决这个问题,可以使用下面的内容进行替换:

[DEFAULT]

verbose = True

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

force_dhcp_release=True

libvirt_use_virtio_for_bridges=True

verbose=True

ec2_private_dns_show_ip=True

api_paste_config=/etc/nova/api-paste.ini

enabled_apis=ec2,osapi_compute,metadata

my_ip = 127.0.0.1

vncserver_listen = 127.0.0.1

vncserver_proxyclient_address = 127.0.0.1

rpc_backend = rabbit

rabbit_host = controller

rabbit_password = RABBIT_PASS

auth_strategy = keystone

[database]

connection = mysql://nova:NOVA_DBPASS@controller/nova

[keystone_authtoken]

auth_uri = http://controller:5000/v2.0

identity_uri = http://controller:35357

admin_tenant_name = service

admin_user = nova

admin_password = NOVA_PASS

[glance]

host = controller

配置计算节点

到这个部分为止,用户已经控制器节点这个部分编辑过“/etc/nova/nova.conf"”文件了。现在唯一需要做的就是将下面这两条命令添加到“DEFAULT”区域当中:

vnc_enabled = True

novncproxy_base_url = http://controller:6080/vnc_auto.html

之前我们已经运行过下面这条命令:

/bin/sh -c "nova-manage db sync" nova

但是现在还是应该再运行一次,虽然只是显示如下信息,没有什么实际作用:

No handlers could be found for logger "oslo_config.cfg"

我们可以跳过Neutron Networking这一部分,因为我们只部署一台机器,不需要使用虚拟接口。

添加dashboard

参考OpenStack教程来安装Apache,并且在其中配置OpenStack dashboard;这样你就能够访问OpenStack命令行界面工具了。当你重启Apache之后应该会出现如下信息:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

出现这种信息十分正常,可以直接忽略。

如果用户使用的是Ubuntu Server,那么可以安装Unity Ubuntu desktop来登陆dashboard。如果用户使用的是Ubuntu Desktop,那么虚拟机当中默认已经安装了Unity Ubuntu。通过将Ubuntu虚拟机作为桥接网络,用户还可以从另外一台虚拟机登陆Apache。

可以使用如下命令安装Unity Ubuntu:

sudo apt-get install --no-install-recommends ubuntu-desktop

上面的操作并不会安装Firefox或者任何浏览器,所以用户需要在Ubuntu命令行当中添加一个用户,之后使用visudo为其赋予root访问权限,允许用户运行程序。

登陆dashborad查看hypervisor和硬件使用情况

图A. 登陆dashborad查看hypervisor和硬件使用情况

之后用户就可以使用和“admin-openrc.sh”文件当中相同的用户ID和密码登陆dashboard了。

作者

Walker Rowe
Walker Rowe

资深IT从业人员

翻译

王学强
王学强

TechTarget特邀编辑,毕业于计算机专业,现任职于外企IT分析师,负责网络、防火墙和服务器等系统运维工作,对虚拟化、网络安全和渗透测试拥有浓厚兴趣,工作外热爱旅行、汽车和健身。

相关推荐