OpenStack Placement组件

安装

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

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

例如

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

在计算节点上创建的实例可能是来自计算节点资源提供程序的 RAM 和 CPU、来自外部共享存储池资源提供程序的磁盘和来自外部 IP 池资源提供程序的 IP 地址等资C Q 2 y A f j ! 0源的使用a X K % _ F t者。

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

每个资源提供程序也可3 V T ( r n + W能具有一组描述资源提供程序质量方面的( U p ) m ` k特征。Traits 描述资源提供程序的一个方面,该方面本身无法使用,但工作负荷p } ) G S 3 -可能希望指定。例如,可用磁盘可能是固态驱动器 (SSD)。

步骤概述

本小节概m B E w r 5 F ] y述了流程,而不详细说明了b z q 9使用的方法。

1. 部署 API 服务

placement提供了一个 WSGI 脚本,W v D用于使用 Apache、ngM 8 t F @ U yinx 或其他支持 WSGI 的 Web 服务器运行服务( f 7。根据部署 Of $ : cpenStack 的打包解决方案,WSGI 脚本可j i e z v V w _ x能位于 或 中。placement-api /uH } } ! } &sr/bin /usr/local/bin

placement-api,作为标准的 WSGI 脚本,提供了大多数 WSGI 服务器希望找到的模块级属性。这c 7 y 6 u意味着可以用许多不同的服务器运行它,从而在面对不同的部署方案时提供灵活性。常见方案包括:application
  • apache2 与 mod_wsgX X T I k | ~ si
  • 带 mod_proxy_uwsgi 的apC M / I 8 ~ache2
  • nginx与uwsgi
  • nginx与gunicorn

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

首次@ i 2 = I L =将placement添加到 Dev9 q w . ; U : H uSe : q 1 itack 时,它使用了样式。后来,它被更新为mod_proxy_uwsgi。查看这些更改有助于了解相关选项。mod_wsgi

DevStack 配置为在 http 的默认端口或j U ` - L ~ y d httpsv . P - ( 或 ) 的默认端口上托管位置,具体取决于是否正在使用 TLS。使用默认端口是可取的。/placement 80 443

默认情况下F [ m,placement应用程序将获取其设置(如 来自 的数据库连接 URL)的配置N R A %。可以通过在启动应用程序的进程环境中设置来更改配置文件中的目录。H ` Z ? g ; 4 ~ 4随着 的 最近版本,配置选项也可以在环境中设置。/etc/placement/placement.conf OS_PLACEF A B | s A 5 pMENT_CONFIG_DIR oslo.config

注意6 s K b % 3 s r

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

本文档不声明placement service 的一组安装说明w c u c q H _ ]。这是因为拥有 WSGI 应用程序的要点是使部署尽可能灵活。由于placement A~ x { } D s 1 $PI 服务本身是无状态的(所有状态都在数据库中),因此可以根据需要在负载平衡解决方案后面部署尽可能多的服务器,以进行健壮和简单的扩展。如果f C _ b o a D u您熟悉安装通用 WSGo + aI 应Z 7 m用程序(使用上述常见方案列表中的链接),这些技术将在此适用。

2. 同步数据库

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

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

警告

在 Stein 版本7 ] 0 D I c E p中,placement代码是从 nova 中提取的。如果要升级以使用提取的位置,则需要将placement数据从数据库迁N c F移到数据库。您可以在placement存储库中找到可能对此有帮助的示例脚本:mysql-migrate-db@ O u 4 2 A 9 _.sh和poh K [stgresql-migrO : | # / ^ m hate-db.sh。另请参阅升级说明。nova_ap! k u Zi placement

注意

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

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

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

placement API 是一个单独的服务,因此应在服务O U 5 M目录中的 palcement service类型下注册。placem: ~ o = ^ d fent客户端(如 nova 计算节点中的资x B w源跟踪器)将使用服务目录查找placement endpoint。

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

Devr { W 1 P ss_ t *tack 使用前缀(而不是使用独立端口)在默认 HTTP 端口 (80) 上设置 placement service 。/placement

安装包

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

警告

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

placement service/ [ D 9 o u t z 提供用于跟踪资源提供程序清单和使用情况的HTTP Ap . { [ * ` X , cPI。有关placement概述的更多详细信息。

placement作4 R 9 D 0 K为 Web 服务在数据模型上运行。安装涉及创建必1 0 8 $ z要的数据库以y 2 Q Y 6及安装和配置 Web 服务。这是一个简单明了的过程,但有很多步骤可以与 OpenStack 云的其余部分集成 p5 L 9 ! s D 2 e Slacement。

注意

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

安装 Placement

先决条件

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

创建数据库

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

    • 使用数据库访问客户端以用户方式连接到数据库6 P a @ J i服务器:root

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

      MariaDB1 l , ! L / P [(none)]&g+ F b [ 1 u C Et; CREATE DATABASE pla! $ ) 2cement;
    • 授予对数据库的适当访问权限:

      MariaDB [(none)]> GRANT ALw d X k O 0 ; hL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'placement';
      MariaDB [(none)]> GRANT ALL PRIVILEGES} i R J x S J p 3 ON pla3 K ,cement.* TO 'placeme+ 9 : $ c 8 3 & knt'@'%' IDENTIFIED BY 'placement';
    • 退出数据库访问客户端。

配置用户和端点

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

    $ . admin-openrc
  2. 使用您选择的 创建p4 5 ! l [ Nlacement service 用户:PLACEMENT_PASS

    $ openstack user createG U 0 o = { . 0 9 --domain default --password-prompt placement
    User Password:
    Repeat UsE { g - -er Password:
    +---------------------+----------------------------------+
    | Fieldt A [ B               | Value                            |
    +-----------B j T {----------+----------------------------------+
    | domain_id           | default                          |
    | enabled             | TrM  mue                             |
    | id                  | 3eca210542864f9dbce5a82a831cZ U [ l A 0 ~cb89 |
    | name                | placement                        |l V f Q
    | options             | {}                               |
    | password_expires_aX = pt | None                             |
    +---------4 S m R O ~ z 9------------+----------------------------------+
  3. 使用管理员角色将 placement 用户添加到服务项目:

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

    $ openstack service create --n} N v  J c ] ]ame placement --description "PlaM = G q ~ 5 - .cement API" placement
    +-------------+----------| N B--------------------! N I q----+
    | Field       | Value                            |
    +----------@ c  H R Q 8 ]---+----M W . h 0--------------------_ S Z w c m----& ; d ? : ------+
    | description | Placement API                    |
    |~ Y % enabled     | Tw t 6 b p . A irue                             |
    | id          | 20dfe6b0f9274ede9577b75721945av , j 336 |
    | n- @ 0ame        | placement                        |
    | type        | plG ~ C :  Jacement                        |
    +-------------+----------------------------------+
  5. 创建放置 API 服务终结点:

    注意

    根据当前J & ]环境3 f w - ) R e T h,endpoint 的 URL 将因端口(可能为 8780 而不是 8778 或没有任何端口)和主机名O _ ^ ) g ] v + $而异。您负f 3 a O q $ 4责确定正确的 URL。

    [) o 1 Mroot@con` v = . ~ s ptroller ~]# openstack endpoint creatP [ S ee --region RegionOne placement public http://controlley L % Kr:8778
    +----D d ) U = 1 & Q .----------z . P f o I n+------( 4 ] / F / R----------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+E ` H X Z x o 3
    | enabled      | True                             |
    | id           | 1b84ed42de61432 ! & Wc9928 * ie55b65859e9ef6 |
    | interface    | public                           |
    | r! S k = 6 S E c Begion       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 20dfe6~ 5 : K c H }b0f9274ede9577b75721945a36 |
    | servic3 ! r Y ] m & U ]e_name | placement                        |
    | service_type | placement                        |
    | uA $ u , V O Trl          | ht5 A o ~ , n rtp://controller:8778           |
    +--------------+----------------------------------+
    [root@controller ~]# openstack endpoint create --regiont U + O RegionOne placement internal http://controller:8778
    +--------------+------------------------------K T G : r e / K----+
    | Field        | VaS  e U h y k 0 xlue                            |
    +--7 ) Z p w------------+----------------------------------+
    | enabled      | True                             |
    | id           | bc2984e8b05b4b1fa94d01c2d4 K v N 4 % I `ee815a4 |
    | interface    | internal                         |i P 2
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 20dfe6b0f9274e. g n O | Gdey / j % {9577b75721945a6 ; B [ O : D s V36 |
    | service_name | placement                        |
    | service_type | placement                        |
    | url          | http://controller:x I i 4 R8778           |
    +--------------+----------------------------------+
    [root@controller ~]# open/ Z ) )stacL { f ) L 7k endpoint create --region RegionOne placement admin http://controller:8778
    +---------R m  m I p 8 u s----A Q T K : :-+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | d23b49dcb02245df839db227f568e54e |
    | interface    | admin                            |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | sev D t F ;rvice_id   | 20dfe6b0fP f ,9274ede9577b75721945a36 |
    | service_na= c ` l R  I eme | placement                        |
    | service_type |5 u G c K ) * } placement                        |
    | url          | http://controller:8778           |
    +--r X ] g l V T { 1------ p 8 l 3 A------+----------------------------------+

安装和配2 n x $ M _组件

注意

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

  1. 安装包:

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

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

      [placement_database]
      # ...
      cow t . - O i E p 6nneS ? y _ [ 5 = Dction = mysql+pymysql://placement:placement@controller/plac! b _ @ Y a g _ement

      替换为为放置数据库选择的密码。P# t t ULAn O X 3 ` ) c . cCEMENT_DBPASS

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

      [api]
      # ...
      auth_strategy = k, : P R S Oeystone
      [keystone_authtR D 8 ? x . ioken]
      # ...
      auth_url = http://controlle6 i G k X F F 0 Lr:5000/v3
      memcached_servers = controller:11211
      auth_typU r !e = password
      project_` ` r U - Ndomain_name = Default
      user_domain_name = Def6 Y R j O Eault
      project_name = service
      username = placement
      password = PLACEMENT_PASS

      替换为"标识"服务中为用户选择的密s , b Z ]j Z y ` h 8 ]PLACEM= X E F XENT_PASS placement

      注意

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

      的值,并且 需要与梯形配置同0 U #步。user_name password project_domain_name user_do| R i ; = r # ! ;main_name

  3. 填充数据库:| q i p ( _placement

    # su -s /bin/sh -c "placement-manage db sync" place4 O B 7 c W I Y ement

    注意

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

  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>
    OY z d { E )rder allow,deny
    Allod u @ T . { t uw from all
    </IfVersion&_ ) = s 1gt;
    </Z , W J 9 D .Directory>

完成安装

  • 重新启动 httpd 服务:

    # system O J & s / 9 3ctl restart httpd

验证安装

注意

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

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

    $ . adx * G x 2min-openrc
  2. 执行状态检查以确保一切有序:

    $ placement-status upgradeS 9 a a check
    +----------------------------------C l R ( D D  t K+
    | Upgradp 6 1e Check Results            |
    +----------------------------------+
    | Check:4 + A ~ H Missing Root Provider IDs |
    | Result: Success                  |
    | Details: None                    |
    +----------------------------------+
    | Check: IR w Wncomplete Consumers      |
    | Result: Success                  |
    | Details: Nm ] r D 4 i M {one                    |
    +----------------------------------^ W % U k .+

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

  3. 针对& g ( ; E 2 l {放置 API 运行一些命令:

    • 安装osc 放置插件:

      在命% d (令行:

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

      $ o$ R C X ~ ( Jpenstack --os-placement-api-version 1.2 resource class list --sort-column name
      +----------------------------+
      | name                       |
      +----------------? | , 5 ` 7 J { +------------+
      | DISK_GB                    |
      |* 4 : % % ^ u ( B IPV4_ADDRESS               |
      | ...                        |
      $ openstack --os-placement-api-version 1.6 trait list --sort  o w s / { : it-co+ c d : i 7 8 rlumn name
      +-----I C s-----------------------------M x U O 2 6 D m-----+
      | name                                  |
      +----------------2 F  k j :------------U h ` b K v +-----! + 3------+
      | COMPUTE_DEVICE_TAGGINGE M m _ z ,                |
      | COMPUTE_NET_ATTACH_INTERFACE          |
      | ...                                   |