本节书摘来自华章出版社《openstack实战指南》一 书中的第2章,第2.2节,作者:黄 凯 毛伟杰 顾骏杰 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
对于各个版本的linux来说,都会制作openstack相应的软件包。虽然在2.1节中介绍了二进制包安装,但是在这里笔者还是会讲一下源代码安装openstack基本组件的过程,因为从学习的角度来说,通过源代码安装openstack各个组件的过程,可以使读者对openstack的框架和各个组件的作用有一个比使用二进制安装更全面的了解。另一个好处是,二进制包的发布会滞后于源代码,如果想在第一时间尝试一些最新的功能或修复bug后的版本,源代码安装是个不错的选择。当然,源代码安装比二进制包安装复杂,有一定的难度,并且要用户自己去解决一些依赖问题。
在本节中,将会介绍如何使用源代码方式安装keystone、glance、nova、neutron、cinder和horizon组件。openstack各个项目的代码都可以在github上获取。在接下来的安装过程中,笔者按照1个controller节点、1个network节点、1个compute节点、1个volume节点的架构来部署。因为其架构方式和二进制安装一样,所以一些基础配置,如每个节点的ip设置、ntp配置等,在本节中跳过。本节使用的操作系统依旧是ubuntu 12.04 lts版本。
在controller节点上计划部署如下组件:
controller上各个组件负责的功能与使用二进制包安装时的一样。在本节中,如果没有特殊说明,那么与2.1节中介绍的架构一样,只是安装方式上有些区别。
1.?前置准备
首先进行ip配置,以及rabbitmq、ntp的安装配置,可参考2.1节相关内容。
使用postgresql作为openstack的后端数据库。如果需要一个稳定的开源数据库,那么postgresql可以优先考虑。此外,需要安装python访问postgresql时用的psycopg2,这是目前流行的postgresql的python连接库。命令如下:
创建一个数据库用户openstackdbadmin,设置密码为openstack123。这个用户将作为各个组件连接数据库的唯一用户。示例代码如下:
在二进制包安装的时候使用root用户,并且安装的时候会把配置文件配置成特定的用户组属性,不需要手动干预。但是在使用源代码安装的时候,必须处理好这些文件的用户组属性关系。在本节中,笔者将会以openstack这个用户的身份去安装、配置、启动服务。首先建立一个称为openstack的用户,并且加入到sudo组,让其有使用sudo的权限。命令如下:
接下来的包都会放在openstack这个用户的主目录下,在这里是/home/openstack
除非特殊说明,否则本节其余操作都是在openstack这个用户下执行。
下载需要用到的git工具的源代码,在ubuntu下安装,命令如下:
对于学习源代码安装的一个较好的,也是官方的方法就是阅读openstack开发人员写的一套安装脚本,我们称之为devstack,其源代码在github上维护。这个项目的初衷是让开发人员能够快速建立一个完整的openstack开发环境,该项目由rackspace的团队创建,并且由openstack的开发社区维护,它的脚本更新速度应该是最接近于openstack开发的,一些新的功能在脚本中都会更新体现出来。无论是开发人员还是系统运维工程师,这个脚本都是学习openstack的一个重要资源。后面的安装也是基于这个脚本的,会用到里面的一些文件,因此,首先需要下载该项目脚本的代码:
源代码安装和二进制包安装的区别主要体现在几个方面,如果读者能把握住哪些是不同的,哪些是相同的,那么学会二进制包安装后,源代码安装的学习就会相对容易点。第一个区别是安装的软件包不同。在二进制包中,各个linux发行平台已经把openstack组件中每个软件打成相应的包,其中包括运行组件所需的很多依赖包。而源代码安装方式,除了安装openstack社区发布的组件包外,还需要手动安装那些组件所需要的依赖包。能否完全正确地安装好依赖包是要解决的一个关键问题。第二个区别体现在配置文件上。二进制包安装好后,都会在/etc下建立好所需的配置文件。而源代码安装需要自己去建立相关目录。第三个区别是启动问题。在二进制包安装好后,往往都配置成了相应linux系统版本的启动方式,譬如使用service启动。而源代码安装方式,需要自己写启动脚本,每个人的启动脚本和方式都不一样,因人而异。还有一些小的区别就是源代码安装需要建立用户,自己设置 openstack组件的安装路径、用户、权限,手动建立一些必要的目录等。至于两者相同的地方,很明显就是数据库,以及配置文件中的参数。
openstack各个组件的配置文件都会放在/etc下的各个目录中,包括nova、glance、 keystone、neutron等。这样做是为了统一规范每个组件的配置目录,方便管理。这里介绍一下安装的思路。一般情况下,在/etc下建立组件的目录,设置为用户的权限,在各个组件的源代码中也有相应的etc目录,其中包括需要用到的配置文件。把要用的配置文件从源代码目录复制到/etc下组件的目录中,然后编辑/etc下相应的配置文件。安装的思路是首先确保每个组件需要的依赖包已经安装,然后在源代码的第一层目录,执行python的安装命令。这样一个组件就安装好了。
2.?安装部署keystone
首先下载keystone源代码,并且切换到havana版本的稳定分支:
在/etc下建立名为keystone的目录。设置属主为用户openstack。从下载的keystone源代码中把/etc下的配置文件复制到/etc/keystone下,其代码如下:
keystone有许多配置选项,这也是openstack一个比较大的特点。openstack会尽量支持更多的,同时比较流行的一些开源软件来完成类似功能。由于不同的开源软件有自身的特点和功能,因此openstack可给用户比较多的选择余地,用户可根据自身的情况选择适合的方式。在keystone中,选择存放认证数据(包括用户、密码等数据)的方式时,可以选择ldap、数据库。在这里我们把用得比较多,同时也比较容易上手的mysql数据库作为存放数据的方式。在认证方式上,keystone可以使用原有的uuid的方式,也可以选择后来加入的pki方式来增强安全性。在本节中,会介绍一些使用广泛的配置,其他更多内容可以从第5章获取。需要配置keystone.conf以下主要的选项:
初始化keystone,首先要创建keystone所用的数据库,以及一些配置文件中用到的目录,然后初始化keystone用的pki。
需要创建不存在的目录,用来存放keystone日志,可在keystone.conf中定义,其代码如下:
需要创建不存在的目录,用来存放keystone使用pki的相关文件,其代码如下:
创建keystone所用的数据库,代码如下:
切记要退出postgres用户,返回到openstack用户环境中,其代码如下:
进入devstack项目的目录,因为要用到里面的一些文件。
在devstack项目中,开发人员告诉了我们需要安装哪些前置依赖的和需要使用的第三方的软件包,这里需要安装general和keystone,其代码如下:
keystone需要用到passlib软件包,使用pki时必须安装,其代码如下:
安装keystone组件,其代码如下:
进入keystone目录,其代码如下:
下面开始安装keystone client。keystone client是一个使用keystone的命令行接口工具,和dashboard一样,它能完成大部分的日常操作。熟悉和熟练使用命令行工具对维护openstack及其每一个组件是非常重要的,系统管理员90%的工作是通过client命令行完成的,而不是通过dashboard。
切记退回到openstack的home目录,所有组件的顶层都在用户home目录下,其代码如下:
在安装的过程中,如果出现依赖包安装报错的情况,可根据出错的python软件包的url进行手动下载,并进行安装,然后返回安装keystone client,其代码如下:
3.?使用tmux启动keystone
至此,已经安装好了keystone服务和命令行下的keystone client。接下来要启动keystone进程。我们是通过源代码方式来安装keystone的,没有配置成ubuntu服务管理程序,因此,不能像二进制包方式安装后那样,通过命令“service keystone start”来启动,而是需要直接运行keystone的可执行文件,并加上一些配置文件的参数。
可执行文件都放在bin目录下。--config-file参数指明了keystone的配置文件路径。
启动完成后,是不是发现什么输出也没有,shell也不会返回提示符?而一旦关掉ssh窗口或按+组合键后,keystone进程就结束了。是不是应该把这个程序放在后台运行呢?这里要用到终端复用软件tmux。tmux是一个类似于screen的软件,采用bsd授权。ubuntu 12.04下默认安装了这个优秀的软件,在这里仅简单地使用它来打开一个会话。退出前面创建的keystone进程,不要怕,因为我们已经学会如何启动keystone了。用+组合键中断刚才创建的keystone进程,当然也可以再开启一个终端会话窗口,用命令kill结束keystone进程。
在下面这行代码中,new-session打开一个新的会话,-s给这个会话命名为keystone,按回车键之后可以看到一个空白的新的会话。
执行启动keystone的命令,代码如下:
读者可能会发现,这里介绍的内容看上去和前面介绍的内容差不多。然后先按住和<b>键不放,然后再按键,退出刚才新建的会话。是不是又返回到我们新建会话之前的窗口了?现在使用命令“ps aux | grep keystone”,查看一下keystone的进程是否还存在。不存在的话记得发邮件告诉笔者。现在回到tmux,在源代码安装时会多次使用tmux,使用下面的命令可列出将会用到的和tmux相关的命令。</b>
列出当前存在的所有的tmux会话,代码如下:
返回会话名为name的会话,代码如下:
现在可以使用命令“tmux attach-session -t keystone”回到刚才创建的keystone会话中。tmux还有很多参数和命令,可以使用命令“man tmux”查看。
接下来是关于使用keystone的内容,包括创建用户等,都和二进制包安装方式一样,读者可以参考2.1节的相关内容。
4.?安装部署glance
安装glance的思路和过程与安装keystone类似,大致的过程可以分为下载源代码、安装依赖软件包、安装glance和glance client、编辑glance的配置文件等。
将openstack的数据目录放在/data下,包括glance的镜像和nova的虚拟机等。读者需要自己建立这个目录,并且确保这个目录足够大能满足用户环境所需的大小。
在安装过程中,确保这个目录所在的文件系统的可用空间有50gb,涉及的命令如下:
安装glance组件所需要的依赖软件,命令如下:
安装glance组件,代码如下:
创建用来存放glance配置文件的目录,和keystone一样,也是放在/etc下,其代码如下:
以上给出的是配置文件中需要修改和注意的部分,其他没有列出的按照默认设置即可,不要删除其他在这里没有列出的配置项。以下给出的配置也是如此。
建立专门的glance目录用来存放镜像文件和镜像缓存,代码如下:
5.?启动glance
glance服务包括glance-registry和glance-api,需要分别启动这两个服务进程。同启动keystone一样,使用tmux来建立两个新会话,分别命名为glance-registry和glance-api。命令如下:
6.?安装部署nova
首先下载nova源代码,并且切换到havana版本的稳定分支:
安装nova组件所需要的依赖软件,代码如下:
安装nova组件,代码如下:
安装nova client,代码如下:
配置nova,主要是建立一些必要的目录,把配置文件从源代码目录中复制到/etc下,设置用户的sudo权限等,其代码如下:
把以下内容添加到nova-rootwrap文件中。
下载novnc,因为novnc不是openstack项目的组件,所以需要去novnc的项目网站下载。
接下来就是编辑配置文件,可参照2.1节相关内容。注意,把nova.conf中的state_path参数改成现在的/data/nova,数据库改成使用postgresql的格式。配置文件完成之后,使用命令nova-manage运行“db sync”同步一下。
7.?启动nova服务
启动nova的服务同样使用tmux,可参照glance和keystone的使用方式。启动的服务与二进制包安装方式一样,代码如下:
8.?安装配置neutron-server
安装neutron-server的方式和前面介绍的keystone、nova、glance类似,主要思路是:下载源代码、安装源代码、建立neutron和open vswitch plugin的目录并且设置权限、复制源代码中的配置文件到相应的目录中、设置rootwrap配置文件。剩下的和前几节类似,即修改配置文件内容、建立数据库、启动服务,这部分内容不再赘述。其代码如下:
把下面第一行代码加入到neutron-rootwrap文件中,接着执行余下命令。
安装neutron client,命令如下:
9.?安装部署cinder
下面安装cinder组件,代码如下。注意,由于同前面其他组件安装类似,因此不再进行具体说明。
添加下面第一行代码到cinder-rootwrap文件中,接着执行余下命令。
其余的配置文件内容,包括安装tgt、建立数据库等内容,可参照2.1节相关内容。在控制节点上,启动cinder-api和cinder-scheduler服务即可,其代码如下:
10.?安装horizon
安装horizon的方法完全可以参照devstack的脚本,主要是先安装apache2等依赖软件包,然后复制配置文件,进行一定的修改即可,其代码如下:
最后,重启apache服务。