OpenStack Placement组件

荒凉一梦 提交于 2020-12-10 09:52:21

安装

在 Stein 发布之前,placement代码与计算 REST API 代码 (nova-api) 一起位于 Nova 中。确保本文档的发布版本与要部署的发布版本匹配。

Placement API 服务在 nova 存储库中的 14.0.0 Newton 版本中引入,并placement repository19.0.0 Stein 版本中的placement存储库。这是一个 REST API 堆栈和数据模型,用于跟踪资源提供程序的清单和使用情况,以及不同的资源类别。

例如

资源提供程序可以是计算节点、共享存储池或 IP 分配池。Placement 服务跟踪每个提供程序的库存和使用。

在计算节点上创建的实例可能是来自计算节点资源提供程序的 RAM 和 CPU、来自外部共享存储池资源提供程序的磁盘和来自外部 IP 池资源提供程序的 IP 地址等资源的使用者。

消耗的资源类型被跟踪为classes。该服务提供一组标准资源类(例如 , 和),并提供根据需要定义自定义资源类的能力。DISK_GB MEMORY_MB VCPU

每个资源提供程序也可能具有一组描述资源提供程序质量方面的特征。Traits 描述资源提供程序的一个方面,该方面本身无法使用,但工作负荷可能希望指定。例如,可用磁盘可能是固态驱动器 (SSD)。

步骤概述

本小节概述了流程,而不详细说明了使用的方法。

1. 部署 API 服务

placement提供了一个 WSGI 脚本,用于使用 Apache、nginx 或其他支持 WSGI 的 Web 服务器运行服务。根据部署 OpenStack 的打包解决方案,WSGI 脚本可能位于 或 中。placement-api /usr/bin /usr/local/bin

placement-api,作为标准的 WSGI 脚本,提供了大多数 WSGI 服务器希望找到的模块级属性。这意味着可以用许多不同的服务器运行它,从而在面对不同的部署方案时提供灵活性。常见方案包括:application

在所有这些方案中,应用程序的主机、端口和安装路径(或前缀)控制在 Web 服务器的配置中,而不是在placement应用程序的配置 () 中。placement.conf

首次将placement添加到 DevStack 时,它使用了样式。后来,它被更新为mod_proxy_uwsgi。查看这些更改有助于了解相关选项。mod_wsgi

DevStack 配置为在 http 的默认端口或 https ( 或 ) 的默认端口上托管位置,具体取决于是否正在使用 TLS。使用默认端口是可取的。/placement 80 443

默认情况下,placement应用程序将获取其设置(如 来自 的数据库连接 URL)的配置。可以通过在启动应用程序的进程环境中设置来更改配置文件中的目录。随着 的 最近版本,配置选项也可以在环境中设置/etc/placement/placement.conf OS_PLACEMENT_CONFIG_DIR oslo.config

注意

当使用 uwsgi 与前端 (例如, apache2 或 nginx) 时, 需要确保 uwsgi 进程正在运行。在DevStack中,这是用系统完成的。这是管理 uwsgi 的许多不同的方法之一。

本文档不声明placement service 的一组安装说明。这是因为拥有 WSGI 应用程序的要点是使部署尽可能灵活。由于placement API 服务本身是无状态的(所有状态都在数据库中),因此可以根据需要在负载平衡解决方案后面部署尽可能多的服务器,以进行健壮和简单的扩展。如果您熟悉安装通用 WSGI 应用程序(使用上述常见方案列表中的链接),这些技术将在此适用。

2. 同步数据库

placement service 使用自己的数据库,在配置placement_database部分中必须定义placement_database_connection选项,否则服务将无法启动。命令行工具placement管理可用于将数据库表迁移到正确的窗体,包括创建它们。该选项描述的数据库必须已存在,并且具有适当的访问控制定义。connection

同步的另一个选项是将placement_database.sync_on_startup 设置为配置中。这将在placement Web 服务启动时执行任何丢失的数据库迁移。选择自动同步还是使用命令行工具取决于环境和部署工具的约束。True

警告

在 Stein 版本中,placement代码是从 nova 中提取的。如果要升级以使用提取的位置,则需要将placement数据从数据库迁移到数据库。您可以在placement存储库中找到可能对此有帮助的示例脚本:mysql-migrate-db.shpostgresql-migrate-db.sh。另请参阅升级说明nova_api placement

注意

升级到提取placement时,升级到提取的位置与其他 OpenStack 服务一起升级到 Stein 是一个选项,但不是必需的。nova 代码将继续在其 Stein 版本中具有placement service 的副本。但是,此副本将在"训练"中删除,在升级到"训练"之前切换到提取的版本(可能借助上述脚本)。

3. 创建帐户并更新服务目录

创建在Keystone中具有管理员角色的placement service 用户。

placement API 是一个单独的服务,因此应在服务目录中的 palcement service类型下注册。placement客户端(如 nova 计算节点中的资源跟踪器)将使用服务目录查找placement endpoint。

有关创建服务用户和目录条目的示例,请参阅配置用户和终结点。

Devstack 使用前缀(而不是使用独立端口)在默认 HTTP 端口 (80) 上设置 placement service 。/placement

安装包

本节提供有关从 Linux 分发包安装placement的说明。

警告

这些安装文档正在进行中。提到的一些分发包尚不可用,因此说明将不起作用

placement service 提供用于跟踪资源提供程序清单和使用情况的HTTP API。有关placement概述的更多详细信息

placement作为 Web 服务在数据模型上运行。安装涉及创建必要的数据库以及安装和配置 Web 服务。这是一个简单明了的过程,但有很多步骤可以与 OpenStack 云的其余部分集成 placement。

注意

某些其他 OpenStack 服务(尤其是 nova)需要placement,因此应在其他服务之前安装,但应在标识(基石)之后安装。

安装 Placement

先决条件

在安装和配置放置服务之前,必须创建数据库、服务凭据和 API 终结点。

创建数据库

  1. 若要创建数据库,请完成以下步骤:

    • 使用数据库访问客户端以用户方式连接到数据库服务器:root

      $ mysql -u root -p
    • 创建数据库:placement

      MariaDB [(none)]> CREATE DATABASE placement;
    • 授予对数据库的适当访问权限:

      MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'placement';
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'placement';
    • 退出数据库访问客户端。

配置用户和端点

  1. 源凭据以访问仅管理员 CLI 命令:admin

    $ . admin-openrc
  2. 使用您选择的 创建placement service 用户:PLACEMENT_PASS

    $ openstack user create --domain default --password-prompt placement
    User Password:
    Repeat User Password:
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | domain_id           | default                          |
    | enabled             | True                             |
    | id                  | 3eca210542864f9dbce5a82a831ccb89 |
    | name                | placement                        |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+
  3. 使用管理员角色将 placement 用户添加到服务项目:

    $ openstack role add --project service --user placement admin
  4. 在服务目录中创建放置 API 条目:

    $ openstack service create --name placement --description "Placement API" placement
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Placement API                    |
    | enabled     | True                             |
    | id          | 20dfe6b0f9274ede9577b75721945a36 |
    | name        | placement                        |
    | type        | placement                        |
    +-------------+----------------------------------+
  5. 创建放置 API 服务终结点:

    注意

    根据当前环境,endpoint 的 URL 将因端口(可能为 8780 而不是 8778 或没有任何端口)和主机名而异。您负责确定正确的 URL。

    [root@controller ~]# openstack endpoint create --region RegionOne placement public http://controller:8778
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 1b84ed42de6143c992e55b65859e9ef6 |
    | interface    | public                           |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 20dfe6b0f9274ede9577b75721945a36 |
    | 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           | bc2984e8b05b4b1fa94d01c2dee815a4 |
    | interface    | internal                         |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 20dfe6b0f9274ede9577b75721945a36 |
    | 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           | d23b49dcb02245df839db227f568e54e |
    | interface    | admin                            |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 20dfe6b0f9274ede9577b75721945a36 |
    | service_name | placement                        |
    | service_type | placement                        |
    | url          | http://controller:8778           |
    +--------------+----------------------------------+

安装和配置组件

注意

默认配置文件因分布而异。您可能需要添加这些节和选项,而不是修改现有节和选项。此外,配置代码段中的省略号 () 指示应保留的潜在默认配置选项。...

  1. 安装包:

    # yum install openstack-placement-api
  2. 编辑文件并完成以下操作:/etc/placement/placement.conf

    • 在 本节中,配置数据库访问:[placement_database]

      [placement_database]
      # ...
      connection = mysql+pymysql://placement:placement@controller/placement

      替换为为放置数据库选择的密码。PLACEMENT_DBPASS

    • 在 和 部分中,配置标识服务访问:[api] [keystone_authtoken]

      [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 = service
      username = placement
      password = PLACEMENT_PASS

      替换为"标识"服务中为用户选择的密码。PLACEMENT_PASS placement

      注意

      注释掉或删除部分中任何其他选项。[keystone_authtoken]

      的值,并且 需要与梯形配置同步。user_name password project_domain_name user_domain_name

  3. 填充数据库:placement

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

    注意

    忽略此输出中的任何弃用消息。

  4. 修改配置文件 /etc/httpd/conf.d/00-placement-api.conf

    $ vim /etc/httpd/conf.d/00-placement-api.conf
    ...
    <Directory /usr/bin>
    <IfVersion >= 2.4>
      Require all granted
    </IfVersion>
    <IfVersion < 2.4>
      Order allow,deny
      Allow from all
    </IfVersion>
    </Directory>

完成安装

  • 重新启动 httpd 服务:

    # systemctl restart httpd

验证安装

注意

在进行这些调用之前,您需要将标识服务作为 进行身份验证。有许多不同的方法可以做到这一点,具体取决于系统设置的方式。如果没有文件,您将有类似的东西。admin``admin-openrc

  1. 源凭据以访问仅管理员 CLI 命令:admin

    $ . admin-openrc
  2. 执行状态检查以确保一切有序:

    $ placement-status upgrade check
    +----------------------------------+
    | Upgrade Check Results            |
    +----------------------------------+
    | Check: Missing Root Provider IDs |
    | Result: Success                  |
    | Details: None                    |
    +----------------------------------+
    | Check: Incomplete Consumers      |
    | Result: Success                  |
    | Details: None                    |
    +----------------------------------+

    该命令的输出将因版本而异。有关详细信息,请参阅放置状态升级检查。

  3. 针对放置 API 运行一些命令:

    • 安装osc 放置插件:

      在命令行:

      $ pip install osc-placement
    • 列出可用的资源类别和特征:

      $ openstack --os-placement-api-version 1.2 resource class list --sort-column name
      +----------------------------+
      | name                       |
      +----------------------------+
      | DISK_GB                    |
      | IPV4_ADDRESS               |
      | ...                        |
      
      $ openstack --os-placement-api-version 1.6 trait list --sort-column name
      +---------------------------------------+
      | name                                  |
      +---------------------------------------+
      | COMPUTE_DEVICE_TAGGING                |
      | COMPUTE_NET_ATTACH_INTERFACE          |
      | ...                                   |
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!