1
2
3
4
5
6
7
作者:李晓辉

联系方式:

微信:Lxh_Chat

邮箱:939958092@qq.com

前言

在云计算环境中,资源管理和调度是确保虚拟机高效运行和资源合理利用的关键环节。OpenStack作为一个强大的开源云平台,提供了灵活的资源管理和高效的虚拟化能力。而Placement服务作为OpenStack的核心组件之一,负责跟踪和管理计算资源,为调度器提供资源信息,确保虚拟机能够获得所需的资源。本文将详细介绍如何在OpenStack环境中安装和配置Placement服务,帮你顺利搭建一个功能完善的云平台。

Placement服务概述

Placement的作用

Placement服务是OpenStack中的资源跟踪和调度组件,它在OpenStack架构中扮演着至关重要的角色。以下是Placement的主要功能:

  1. 资源跟踪:Placement服务负责跟踪和管理计算资源,包括CPU、内存、磁盘等。它维护一个资源提供者的目录,记录每个计算节点的资源使用情况。

  2. 调度决策:Placement服务为Nova调度器提供资源信息,帮助调度器做出合理的调度决策。调度器根据Placement提供的资源信息,选择最适合运行虚拟机的计算节点。

  3. 资源分配:Placement服务管理资源分配,确保虚拟机能够获得所需的资源。它记录每个虚拟机的资源分配情况,确保资源不会被过度分配。

Placement的架构

Placement服务由以下几个主要组件构成:

  1. placement-api:这是Placement服务的核心组件,提供RESTful API接口,供其他OpenStack服务(如Nova)查询和报告资源信息。

  2. 数据库:Placement使用关系型数据库(如MariaDB)存储资源提供者和资源分配的信息。

  3. 配置文件:Placement的主要配置文件是placement.conf,其中包含了数据库连接信息、身份认证配置等。

工作原理

Placement的工作原理可以概括为以下几个步骤:

  1. 资源报告:计算节点(Nova-compute)定期向Placement服务报告其资源使用情况。Placement服务将这些信息存储在数据库中。

  2. 资源查询:Nova调度器在需要调度虚拟机时,向Placement服务查询可用资源。Placement服务根据数据库中的信息,返回符合条件的资源提供者。

  3. 资源分配:Nova调度器选择一个资源提供者后,向Placement服务请求资源分配。Placement服务更新数据库中的资源分配信息,并返回分配结果。

  4. 资源释放:当虚拟机被删除时,Nova服务通知Placement服务释放相应的资源。Placement服务更新数据库中的资源分配信息,释放资源。

通过以上机制,Placement服务确保了资源的有效管理和合理分配。接下来我将详细介绍如何安装和配置Placement服务,以确保你的OpenStack环境能够高效地管理计算资源。

准备placement数据库

创建Placement用户并分配密码和权限,以便Placement服务可以访问数据库。

1
mysql -u root -pLiXiaohui
1
2
3
4
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'LiXiaohui';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'LiXiaohui';
exit

创建placement服务用户和角色

加载管理员环境变量文件,以便使用OpenStack命令行工具

1
source adminrc.sh

创建Placement用户并添加为service项目的管理员

1
2
3
4
5
6
7
8
9
10
11
[root@controller ~]# openstack user create --domain default --password LiXiaohui placement
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | c6f92a93afcb44bf9627a46131e010a4 |
| name | placement |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+

将其添加为service项目的管理员

1
[root@controller ~]# openstack role add --project service --user placement admin

创建Placement服务和Endpoint

创建placement服务

创建Placement服务,并为其定义描述信息

1
2
3
4
5
6
7
8
9
10
[root@controller ~]# openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Placement API |
| enabled | True |
| id | 5e175cbd51a04a8aa2a9821947769347 |
| name | placement |
| type | placement |
+-------------+----------------------------------+

创建endpoint

创建公共、内部和管理三个Endpoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@controller ~]# openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | e939b955c89840daa86b7971da69571b |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 5e175cbd51a04a8aa2a9821947769347 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 14e61050ac91462aa067d29b02b60532 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 5e175cbd51a04a8aa2a9821947769347 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 58f6dcc9f88749658dcc339ea800c73f |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 5e175cbd51a04a8aa2a9821947769347 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+

安装配置placement组件

安装placement组件

安装Placement服务所需的软件包

1
yum install openstack-placement-api -y

准备配置文件

准备配置文件/etc/placement/placement.conf

1
2
3
4
5
6
7
8
9
10
crudini --set /etc/placement/placement.conf placement_database connection mysql+pymysql://placement:LiXiaohui@controller/placement
crudini --set /etc/placement/placement.conf api auth_strategy keystone
crudini --set /etc/placement/placement.conf keystone_authtoken auth_url http://controller:5000/v3
crudini --set /etc/placement/placement.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/placement/placement.conf keystone_authtoken auth_type password
crudini --set /etc/placement/placement.conf keystone_authtoken project_domain_name Default
crudini --set /etc/placement/placement.conf keystone_authtoken user_domain_name Default
crudini --set /etc/placement/placement.conf keystone_authtoken project_name service
crudini --set /etc/placement/placement.conf keystone_authtoken username placement
crudini --set /etc/placement/placement.conf keystone_authtoken password LiXiaohui

或者

这部分配置了Placement服务如何连接到数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[placement_database]
...
connection = mysql+pymysql://placement:LiXiaohui@controller/placement

auth_strategy:指定Placement API使用的认证策略。这里设置为keystone,表示使用Keystone服务进行身份认证。

[api]
...
auth_strategy = keystone

这部分配置了Placement服务如何与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 = service
username = placement
password = LiXiaohui

填充placement数据库

同步Placement数据库,创建所有必要的表和初始数据结构

1
su -s /bin/sh -c "placement-manage db sync" placement

默认情况下,Placement配置文件可能存在权限问题,需要对Placement API命令位置授权。

1
2
3
4
5
cat >> /etc/httpd/conf.d/00-placement-api.conf <<'EOF'
<Directory /usr/bin>
Require all granted
</Directory>
EOF

重新启动httpd服务

重新启动HTTPD服务,确保Placement服务能够正常运行

1
systemctl restart httpd