OpenStack Placement元件

語言: CN / TW / HK

安裝

在 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。

    [[email protected] ~]# 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           |
    +--------------+----------------------------------+
    
    [[email protected] ~]# 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           |
    +--------------+----------------------------------+
    
    [[email protected] ~]# 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:[email protected]/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          |
      | ...                                   |