1 2 3 4 5 6 7 作者:李晓辉 联系方式: 微信:Lxh_Chat 邮箱:939958092@qq.com
前言 在云计算环境中,资源管理和调度是确保虚拟机高效运行和资源合理利用的关键环节。OpenStack作为一个强大的开源云平台,提供了灵活的资源管理和高效的虚拟化能力。而Placement服务作为OpenStack的核心组件之一,负责跟踪和管理计算资源,为调度器提供资源信息,确保虚拟机能够获得所需的资源。本文将详细介绍如何在OpenStack环境中安装和配置Placement服务,帮你顺利搭建一个功能完善的云平台。
Placement服务概述 Placement的作用 Placement服务是OpenStack中的资源跟踪和调度组件,它在OpenStack架构中扮演着至关重要的角色。以下是Placement的主要功能:
资源跟踪 :Placement服务负责跟踪和管理计算资源,包括CPU、内存、磁盘等。它维护一个资源提供者的目录,记录每个计算节点的资源使用情况。
调度决策 :Placement服务为Nova调度器提供资源信息,帮助调度器做出合理的调度决策。调度器根据Placement提供的资源信息,选择最适合运行虚拟机的计算节点。
资源分配 :Placement服务管理资源分配,确保虚拟机能够获得所需的资源。它记录每个虚拟机的资源分配情况,确保资源不会被过度分配。
Placement的架构 Placement服务由以下几个主要组件构成:
placement-api :这是Placement服务的核心组件,提供RESTful API接口,供其他OpenStack服务(如Nova)查询和报告资源信息。
数据库 :Placement使用关系型数据库(如MariaDB)存储资源提供者和资源分配的信息。
配置文件 :Placement的主要配置文件是placement.conf
,其中包含了数据库连接信息、身份认证配置等。
工作原理 Placement的工作原理可以概括为以下几个步骤:
资源报告 :计算节点(Nova-compute)定期向Placement服务报告其资源使用情况。Placement服务将这些信息存储在数据库中。
资源查询 :Nova调度器在需要调度虚拟机时,向Placement服务查询可用资源。Placement服务根据数据库中的信息,返回符合条件的资源提供者。
资源分配 :Nova调度器选择一个资源提供者后,向Placement服务请求资源分配。Placement服务更新数据库中的资源分配信息,并返回分配结果。
资源释放 :当虚拟机被删除时,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命令行工具
创建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/placementauth_strategy:指定Placement API使用的认证策略。这里设置为keystone,表示使用Keystone服务进行身份认证。 [api] ... auth_strategy = keystone这部分配置了Placement服务如何与Keystone服务进行交互,以进行身份认证和授权 [keystone_authtoken] ... auth_url = http://controller:5000 /v3memcached_servers = controller:11211 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = placementpassword = 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服务能够正常运行