Centos7安裝 OpenStack watcher服務(wù)(Pike版本)

在 centos7 上安裝 OpenStack 的 watcher服務(wù),前排提醒,在使用 watcherclient 的時(shí)候有坑,已經(jīng)踩坑了! 另外介紹背景,環(huán)境里有兩臺(tái)控制節(jié)點(diǎn),hostname為 controller(ubuntu16.04) 和 controller1(centos7)

下面是安裝步驟

Step 1 創(chuàng)建數(shù)據(jù)庫(kù)

登錄數(shù)據(jù)庫(kù)

mysql -u root -p

創(chuàng)建watcher數(shù)據(jù)庫(kù)

CREATE DATABASE senlin DEFAULT CHARACTER SET utf8;

授權(quán)(替換 WATCHER_DBPASS 為合適的密碼)

GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'localhost' \
  IDENTIFIED BY 'WATCHER_DBPASS';
GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'%' \
  IDENTIFIED BY 'WATCHER_DBPASS';

退出

exit;

Step 2 創(chuàng)建 watcher 用戶

導(dǎo)入環(huán)境變量

. admin-openrc

創(chuàng)建用戶,需輸入兩次密碼

openstack user create --domain default --password-prompt watcher

Step 3 設(shè)置管理員角色

openstack role add --project service --user watcher admin

Step 4 創(chuàng)建 watcher 服務(wù)

openstack service create --name watcher --description "Infrastructure Optimization" infra-optim

Step 5 創(chuàng)建 API 終端

替換 controller 為你控制節(jié)點(diǎn) hostname 或 ip

openstack endpoint create --region RegionOne \
  infra-optim public http://controller:9322
openstack endpoint create --region RegionOne \
  infra-optim internal http://controller:9322
openstack endpoint create --region RegionOne \
  infra-optim admin http://controller:9322

Step 6 安裝 watcher 軟件包

yum install openstack-watcher-api openstack-watcher-applier \
  openstack-watcher-decision-engine

Step 7 修改配置文件

注意,這個(gè)版本的centos包下,watcher.conf文件是空,只有開(kāi)頭一個(gè)[DEFAULT],不要慌,按照配置走下去

vim /etc/watcher/watcher.conf
[DEFAULT]
control_exchange = watcher
transport_url = rabbit://openstack:RABBIT_PASS@controller

[database]
connection = mysql+pymysql://watcher:WATCHER_DBPASS@controller/watcher?charset=utf8

[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = watcher
password = WATCHER_PASS

[watcher_clients_auth]
auth_type = password
auth_url = http://controller:5000
username = watcher
password = WATCHER_PASS
project_domain_name = default
user_domain_name = default
project_name = service

[api]
host = controller

[oslo_messaging_notifications]
driver = messagingv2

Step 8 同步數(shù)據(jù)庫(kù)

su -s /bin/sh -c "watcher-db-manage --config-file /etc/watcher/watcher.conf upgrade"

Step 10 開(kāi)啟 watcher 服務(wù)

systemctl enable openstack-watcher-api.service \
  openstack-watcher-decision-engine.service \
  openstack-watcher-applier.service
systemctl start openstack-watcher-api.service \
  openstack-watcher-decision-engine.service \
  openstack-watcher-applier.service

Step 10 驗(yàn)證安裝

. admin-openrc

注意這里的 admin-openrc 文件

需要有以下項(xiàng)

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_AUTH_TYPE=password

重點(diǎn)來(lái)了

運(yùn)行以下語(yǔ)句,并沒(méi)有預(yù)期的輸出,而是

[root@controller1 ~]# openstack optimize service list
openstack: 'optimize service list' is not an openstack command. See 'openstack --help'.
Did you mean one of these?
  container create
  container delete
  container list
  container save
  container set
  container show
  container unset

而在另一臺(tái) ubuntu 的控制節(jié)點(diǎn)上安裝 watcher,是有預(yù)期輸出的,這是怎么回事?

對(duì)比官網(wǎng)安裝文檔,發(fā)現(xiàn) ubuntu 的安裝文檔上,在安裝 watcher 軟件包的時(shí)候,多了這么一句

yum install openstack-watcher-api openstack-watcher-applier \
  openstack-watcher-decision-engine
apt install watcher-api watcher-decision-engine \
  watcher-applier

apt install python-watcherclient

對(duì),yum 命令下的軟件包沒(méi)有安裝 python-watcherclient , 而這個(gè) python-watcherclient 正是本文的關(guān)鍵!

先說(shuō)一下這個(gè) client 是什么,clientOpenStack 提供的用來(lái)在命令行操作 OpenStack 服務(wù)的客戶端,我們之前安裝的 python-openstackclient 中就包含了 novaclient、neutronclient 等核心組件的客戶端,而有些新組件的客戶端是需要獨(dú)立安裝的,比如這個(gè) python-watcherclient。

回顧一下 centos 中 watcher 的軟件包安裝,發(fā)現(xiàn)其中安裝了很多別的 client,唯獨(dú)少了這個(gè) python-watcherclient

yum install openstack-watcher-api openstack-watcher-applier \
    openstack-watcher-decision-engine

......(省略一段)

Dependencies Resolved

===============================================================================================================================
 Package                                      Arch              Version                 Repository                        Size
===============================================================================================================================
Installing:
 openstack-watcher-api                        noarch            1.4.1-1.el7             centos-openstack-pike            8.1 k
 openstack-watcher-applier                    noarch            1.4.1-1.el7             centos-openstack-pike            8.2 k
 openstack-watcher-decision-engine            noarch            1.4.1-1.el7             centos-openstack-pike            8.3 k
Installing for dependencies:
 openstack-watcher-common                     noarch            1.4.1-1.el7             centos-openstack-pike            9.1 k
 python-watcher                               noarch            1.4.1-1.el7             centos-openstack-pike            465 k
 python2-ceilometerclient                     noarch            2.9.0-1.el7             centos-openstack-pike            102 k
 python2-gnocchiclient                        noarch            3.3.1-1.el7             centos-openstack-pike             67 k
 python2-ironicclient                         noarch            1.17.0-1.el7            centos-openstack-pike            381 k
 python2-monascaclient                        noarch            1.7.1-1.el7             centos-openstack-pike             56 k

Transaction Summary
===============================================================================================================================
Install  3 Packages (+6 Dependent packages)

前面說(shuō)到,在我的另一臺(tái) ubuntu 的控制節(jié)點(diǎn)上,執(zhí)行諸如 openstack optimize service list 的指令,是有預(yù)期輸出的,是因?yàn)樵?ubuntu 上安裝了 python-watcherclient。那么要在 centos 上讓 watcher 的命令行起作用,就需要在 centos 上安裝 python-watcherclient 。

可是,centos 的 yum 的軟件包里并沒(méi)有 python-watcherclient

[root@controller1 ~]# yum search python-watcherclient
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.nwsuaf.edu.cn
 * centos-qemu-ev: mirrors.163.com
 * epel: ftp.jaist.ac.jp
 * extras: mirrors.nwsuaf.edu.cn
 * updates: mirrors.nwsuaf.edu.cn
Warning: No matches found for: python-watcherclient
No matches found

只剩一個(gè)辦法,用 pip 安裝。

Step 11 安裝 python-watcherclient

像打游戲一樣,我們來(lái)到了 boss 關(guān),成功安裝 python-watcherclient 就通關(guān)了。

可是 boss 不會(huì)讓我們輕易通關(guān)的,而且一不小心,我們就死在這關(guān)了(來(lái)自一個(gè)死過(guò)的闖關(guān)者的經(jīng)驗(yàn))

首先我們要明白,如果使用 pip install xxx ,不指定版本的話,會(huì)安裝最新版本的 xxx 軟件,而當(dāng) xxx 軟件有某些依賴包不滿足版本條件的話,pip 為了成功安裝 xxx,會(huì)把系統(tǒng)里低版本的依賴包刪除掉,自動(dòng)為你安裝最新版本的依賴包。

OpenStack 中,若直接執(zhí)行 pip install python-watcherclient,會(huì)安裝最新版本的 python-wacherclient,這時(shí) pip 會(huì)把 python-wacherclient 的依賴包升級(jí),若升級(jí)的依賴包和當(dāng)前 OpenStack 中的包有很多代碼改動(dòng),可能會(huì)導(dǎo)致你的 OpenStack 環(huán)境運(yùn)行不起來(lái),這時(shí)候再去對(duì)應(yīng)各種包版本就麻煩大了!

所以,我們要找到對(duì)應(yīng) Pike 版本的 python-watcherclient。

但是,我們?nèi)绾沃?Pike 版本的 python-watcherclientpypi 中是什么版本呢?

我靈機(jī)一動(dòng),ubuntu的控制節(jié)點(diǎn)中不是安裝了 python-watcherclient 嗎,看一看不就行了?

于是到 ubuntu 的控制節(jié)點(diǎn)中,執(zhí)行如下語(yǔ)句

root@controller:~# pip list | grep watcher
python-watcher (1.4.1)
python-watcherclient (1.3.0)

清楚了,是 1.3.0 版本,于是在 centos 的控制節(jié)點(diǎn)中愉快地運(yùn)行

pip install python-watcherclient==1.3.0

安裝過(guò)程一切順利,但過(guò)程中一些提示讓我隱隱不安:

Requirement already satisfied: keystoneauth1>=3.0.1 in /usr/lib/python2.7/site-packages (from python-watcherclient==1.3.0) (3.1.0)

......(省略部分)

Collecting openstacksdk>=0.15.0 (from osc-lib>=1.7.0->python-watcherclient==1.3.0)
  Using cached https://files.pythonhosted.org/packages/f4/e9/a6c5edd61a4a0b6c3bf99126f6a8e4f04c7d62a7166c3d715ac02a74c2b3/openstacksdk-0.26.0-py2.py3-none-any.whl

......(省略部分)

openstacksdk 0.26.0 has requirement keystoneauth1>=3.11.0, but you'll have keystoneauth1 3.1.0 which is incompatible.
osc-lib 1.12.1 has requirement keystoneauth1>=3.7.0, but you'll have keystoneauth1 3.1.0 which is incompatible.

Installing collected packages: python-watcherclient, openstacksdk
  Found existing installation: openstacksdk 0.9.17
    Uninstalling openstacksdk-0.9.17:
      Successfully uninstalled openstacksdk-0.9.17
Successfully installed openstacksdk-0.26.0 python-watcherclient-1.3.0

解釋一下,當(dāng)提示 Requirement already satisfied 時(shí),是萬(wàn)事大吉的,不會(huì)改動(dòng)原來(lái)的包版本,但提示 Collecting 的時(shí)候,就要注意了,pip 告訴我們?cè)瓉?lái)版本的包不滿足條件,要為我們下載最新的包了!

就比如這個(gè) openstacksdk ,它需要的版本是 >=0.15.0 ,原來(lái)的版本是 0.9.17,pip 直接給我們更新到了 0.26.0 了!更新后,OpenStack 環(huán)境可能就有危險(xiǎn)了!

我隨便試了一個(gè)命令,果然 gg 了:

[root@controller1 ~]# . admin-openrc
[root@controller1 ~]# openstack compute service list
Traceback (most recent call last):
  File "/usr/bin/openstack", line 6, in <module>
    from openstackclient.shell import main
  File "/usr/lib/python2.7/site-packages/openstackclient/shell.py", line 29, in <module>
    from openstackclient.common import clientmanager
  File "/usr/lib/python2.7/site-packages/openstackclient/common/clientmanager.py", line 166, in <module>
    'openstack.cli.base',
  File "/usr/lib/python2.7/site-packages/openstackclient/common/clientmanager.py", line 137, in get_plugin_modules
    __import__(ep.module_name)
  File "/usr/lib/python2.7/site-packages/openstackclient/network/client.py", line 17, in <module>
    from openstack import profile
ImportError: cannot import name profile

看樣子,就是因?yàn)檫@個(gè) openstacksdk 版本更到最新導(dǎo)致的問(wèn)題。

這時(shí)候,不要慌,去看一下隔壁節(jié)點(diǎn)的 openstacksdk 是什么版本的,來(lái)到 ubuntu 的控制節(jié)點(diǎn),看一下版本

root@controller:~# pip list | grep openstacksdk
openstacksdk (0.17.0)

好的,那么我們?cè)?centos 的控制節(jié)點(diǎn)利用 pip 改變 openstacksdk 的版本

pip install openstacksdk==0.17.0

完成后,再次試驗(yàn)一下普通的指令

[root@controller1 ~]# . admin-openrc
[root@controller1 ~]# openstack compute service list
+----+------------------+-----------------------+----------+----------+-------+----------------------------+
| ID | Binary           | Host                  | Zone     | Status   | State | Updated At                 |
+----+------------------+-----------------------+----------+----------+-------+----------------------------+
|  3 | nova-consoleauth | controller            | internal | enabled  | up    | 2019-03-20T05:19:40.000000 |
|  4 | nova-scheduler   | controller            | internal | enabled  | up    | 2019-03-20T05:19:41.000000 |
|  5 | nova-conductor   | controller            | internal | enabled  | up    | 2019-03-20T05:19:44.000000 |
|  9 | nova-compute     | compute1              | nova     | enabled  | up    | 2019-03-20T05:19:44.000000 |

沒(méi)有問(wèn)題!

用一下 watcher 的指令

[root@controller1 ~]# openstack optimize service list
+----+-------------------------+-------------+--------+
| ID | Name                    | Host        | Status |
+----+-------------------------+-------------+--------+
|  1 | watcher-applier         | controller  | ACTIVE |
|  2 | watcher-decision-engine | controller  | ACTIVE |
|  3 | watcher-applier         | controller1 | ACTIVE |
|  4 | watcher-decision-engine | controller1 | ACTIVE |
+----+-------------------------+-------------+--------+

通關(guān)了!可以舒口氣了

參考鏈接:

https://docs.openstack.org/watcher/pike/install/install-rdo.html
https://docs.openstack.org/watcher/pike/install/install-ubuntu.html
https://pypi.org/project/python-watcherclient/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容