在Controller节点
在 OpenStack Stein 版本发布之前,放置服务 placement 与计算服务 API(nova-api)一起位于计算服务 nova 中。
一、安装与配置Placement
1、安装Placement软件包
[root@controller ~]# yum -y install openstack-placement-api
在安装“openstack-placement-api”软件包的时候,会自动在CentOS Linux中生成一个名为“placement”的用户和同名用户组。
(1)查看用户信息
[root@controller ~]# cat /etc/passwd | grep placement
placement:x:993:990:OpenStack Placement:/:/bin/bash
(2)查看用户组信息
[root@controller ~]# cat /etc/group | grep placement
placement:x:990:
2、创建Placement的数据库并授权
第1步,用下面的方法进入MariaDB数据库服务器。
[root@controller ~]# mysql -uroot -p000000
第2步,新建“placement”数据库。
MariaDB [(none)]> CREATE DATABASE placement;
第3步,给用户授权使用新建数据库。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO placement@'localhost' IDENTIFIED BY '000000';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO placement@'%' IDENTIFIED BY '000000';
第4步,退出数据库。
MariaDB [(none)]> quit
3、修改Placement配置文件
(1)将配置文件去掉注释和空行
第1步,备份配置文件。
[root@controller ~]# cp /etc/placement/placement.conf /etc/placement/placement.bak
第2步,去掉所有注释和空行,生成新的配置文件。
[root@controller ~]# grep -Ev '^$|#' /etc/placement/placement.bak > /etc/placement/placement.conf
这里的正则表达式“^|#”的具体含义为:匹配空行(“^”,其中“^”是一行的开头,“$”是一行的结尾),或者(符号“|”表示或者)匹配第一个字符为“#”的行。结合反向匹配参数“-v”,最终匹配的是所有不为空和不以注释符号“#”开头的行。
(2)编辑新的配置文件
第1步,打开配置文件进行编辑。
[root@controller ~]# nano /etc/placement/placement.conf
第2步,修改“[placement_database]”部分,实现与数据库连接。
connection = mysql+pymysql://placement:000000@controller/placement
第3步,修改“[api]”与“[keystone_authtoken]”部分,实现与Keystone交互。
(官方参考文献)
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = placement
password = 000000
4、修改Apache配置文件
(官方文档坑点之一,这个步骤官方文档没有提到,如果不做,后面计算服务检查时将会报错)
Placement本质上和Glance及Keystone一样,是运行在Web服务器上的应用。安装完Placement的软件包以后,将在Apache的配置文件目录下自动创建一个名为“00-placement-api.conf”的配置文件,通过它,Web服务器才能知道如何运行Placement
[root@controller ~]# vi /etc/httpd/conf.d/00-placement-api.conf
在“VirtualHost”节点中加入以下代码使Httpd对“/usr/bin”目录拥有权限。
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
重启httpd服务
[root@controller ~]# systemctl restart httpd
5、初始化Placement的数据库
(1)同步数据库
Placement安装文件提供了数据库的基础表数据,此时还没有将数据导入“placement”数据库中,需要手动将数据同步导入数据库中。
[root@controller ~]# su -s /bin/sh -c "placement-manage db sync" placement
“su placement”:su命令用于用户切换。这里切换到“placement”用户,该用户已经拥有对“placement”数据库的管理权限。
“-s /bin/sh”:-s为su命令的选项,指定用什么编译器(Shell)来执行命令,“/bin/sh”就是指定的编译器。
“-c”:su命令的选项,在其后引号内的是具体执行的命令。
"placement-manage db sync":实现了数据同步到数据库。
(2)检查数据库
[root@controller ~]# mysql -uroot -p000000
MariaDB [(none)]> use placement;
MariaDB [placement]> show tables;
二、Placement组件初始化
Placement安装与配置成功以后,需要给Placement初始化用户及密码并分配用户角色、初始化服务和服务端点等,使Placement组件可以启用。
1、创建Placement用户并分配角色
第1步,导入环境变量模拟登录。
[root@controller ~]# . admin-login
第2步,在OpenStack云计算平台中创建用户“placement”。
[root@controller ~]# openstack user create --domain default --password 000000 placement
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 567f9dfb13c54535a82924bd201169a5 |
| name | placement |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
第3步,给用户“placement”分配“admin”角色
[root@controller ~]# openstack role add --project project --user placement admin
2、创建Placement服务及端点
(1)创建服务
创建名为“placement”、类型为“placement”的服务。
[root@controller ~]# openstack service create --name placement placement
+---------+----------------------------------+
| Field | Value |
+---------+----------------------------------+
| enabled | True |
| id | e90d0dd74019416cba95d3e95add9fa8 |
| name | placement |
| type | placement |
+---------+----------------------------------+
2)创建放置服务端点
OpenStack组件的服务端点有3种,分别对应Admin用户(admin)、内部组件(internal)、公众用户(public)服务的地址。
第1步,创建公众用户访问的服务端点。
[root@controller ~]# openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 095f8d4e0679478784508fa71c8f3a62 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e90d0dd74019416cba95d3e95add9fa8 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
第2步,创建内部组件访问的服务端点。
[root@controller ~]# openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 30d51f9bc4824d66b4ba8b14a9bf6c79 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e90d0dd74019416cba95d3e95add9fa8 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
第3步,创建Admin用户访问端点。
[root@controller ~]# openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 697e348313364f1499149f825c97db45 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | e90d0dd74019416cba95d3e95add9fa8 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
3、启动Placement服务
Placement和Keystone以及Glance一样,需要借助Apache的Web服务实现功能。这里只需要重启Apache服务,使配置文件生效。
[root@controller ~]# systemctl restart httpd
三、检测Placement服务
1.查看端口占用情况
由于Placement服务要占用8778端口,查看8778端口是否启用就可以知道Placement是否已运行。
[root@controller ~]# netstat -tnlup|grep 8778
tcp6 0 0 :::8778 :::* LISTEN 119996/httpd
2.检验服务端点
通过curl命令和Placement提供的服务端点通信进行检验。
[root@controller ~]# curl http://controller:8778
{"versions": [{"status": "CURRENT", "min_version": "1.0", "max_version": "1.36", "id": "v1.0", "links": [{"href": "", "rel": "self"}]}]}
3.使用下面的命令检查,看能否返回如下图中的列表
[root@controller ~]# placement-status upgrade check
+----------------------------------+
| Upgrade Check Results |
+----------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success |
| Details: None |
+----------------------------------+
| Check: Incomplete Consumers |
| Result: Success |
| Details: None |
+----------------------------------+