配置 Watcher¶
本文档会持续更新,并反映 Watcher 服务的最新可用代码。
服务概述¶
Watcher 系统是一系列服务集合,旨在优化您的 IaaS 平台。根据配置的不同,Watcher 服务可能会与多个其他 OpenStack 服务进行交互。这包括
OpenStack Identity 服务 (keystone),用于请求身份验证和定位其他 OpenStack 服务。
OpenStack Telemetry 服务 (ceilometer),用于收集资源指标。
时序数据库 (gnocchi),用于消费资源指标。
OpenStack Compute 服务 (nova) 与 Watcher 服务协同工作,并作为实例迁移的用户界面 API。
OpenStack Bare Metal 服务 (ironic) 与 Watcher 服务协同工作,并允许管理节点的电源状态。
OpenStack Block Storage 服务 (cinder) 与 Watcher 服务协同工作,并作为卷节点迁移的 API。
Watcher 服务包括以下组件
watcher-decision-engine:在您的 IaaS 的一部分上运行审计,并返回一个行动计划,以优化资源放置。watcher-api:一个 RESTful API,通过 RPC 将应用程序请求发送到 watcher-decision-engine 进行处理。watcher-applier:应用行动计划。python-watcherclient:一个用于与 Watcher 服务交互的命令行界面 (CLI)。
watcher-dashboard:一个 Horizon 插件,用于与 Watcher 服务交互。
此外,Watcher 服务具有某些外部依赖项,这些依赖项与其他 OpenStack 服务非常相似
一个用于存储审计和行动计划信息和状态的数据库。您可以设置数据库后端类型和位置。
一个队列。用于传递消息的中央枢纽,例如 RabbitMQ。
可选地,您可能希望使用以下相关项目以获得其他功能
watcher metering:一种替代方案,用于收集并将指标推送到 Telemetry 服务。
安装和配置先决条件¶
您可以配置 Watcher 服务在单独的节点或同一节点上运行。在本指南中,组件在一个节点上运行,通常是 Controller 节点。
本节介绍如何安装和配置这些服务。
它假定 Identity、Image、Compute 和 Networking 服务已经设置完毕。
为 Watcher 服务配置 Identity 服务¶
创建 Watcher 服务用户(例如
watcher)。该服务使用它与 Identity 服务进行身份验证。使用KEYSTONE_SERVICE_PROJECT_NAME项目(默认情况下在 devstack 中命名为service),并授予用户admin角色$ keystone user-create --name=watcher --pass=WATCHER_PASSWORD \ --email=watcher@example.com \ --tenant=KEYSTONE_SERVICE_PROJECT_NAME $ keystone user-role-add --user=watcher \ --tenant=KEYSTONE_SERVICE_PROJECT_NAME --role=admin
或者(使用 python-openstackclient 1.8.0+)
$ openstack user create --password WATCHER_PASSWORD --enable \ --email watcher@example.com watcher \ --project=KEYSTONE_SERVICE_PROJECT_NAME $ openstack role add --project KEYSTONE_SERVICE_PROJECT_NAME \ --user watcher admin
您必须在 Identity 服务中注册 Watcher 服务,以便其他 OpenStack 服务可以找到它。要注册该服务
$ keystone service-create --name=watcher --type=infra-optim \ --description="Infrastructure Optimization service"
或者(使用 python-openstackclient 1.8.0+)
$ openstack service create --name watcher infra-optim \ --description="Infrastructure Optimization service"
通过将 YOUR_REGION 和
WATCHER_API_[PUBLIC|ADMIN|INTERNAL]_IP替换为您的区域和 Watcher 服务的 API 节点 IP 地址(或 FQDN)来创建端点$ keystone endpoint-create \ --service-id=the_service_id_above \ --publicurl=http://WATCHER_API_PUBLIC_IP:9322 \ --internalurl=http://WATCHER_API_INTERNAL_IP:9322 \ --adminurl=http://WATCHER_API_ADMIN_IP:9322
或者(使用 python-openstackclient 1.8.0+)
$ openstack endpoint create --region YOUR_REGION watcher public http://WATCHER_API_PUBLIC_IP:9322 $ openstack endpoint create --region YOUR_REGION watcher internal http://WATCHER_API_INTERNAL_IP:9322 $ openstack endpoint create --region YOUR_REGION watcher admin http://WATCHER_API_ADMIN_IP:9322
为 Watcher 设置数据库¶
Watcher 服务将信息存储在数据库中。本指南使用其他 OpenStack 服务使用的 MySQL 数据库。
在 MySQL 中,创建一个可供
watcher用户访问的watcher数据库。将 WATCHER_DBPASSWORD 替换为实际密码# mysql mysql> CREATE DATABASE watcher CHARACTER SET utf8; mysql> GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'localhost' \ IDENTIFIED BY 'WATCHER_DBPASSWORD'; mysql> GRANT ALL PRIVILEGES ON watcher.* TO 'watcher'@'%' \ IDENTIFIED BY 'WATCHER_DBPASSWORD';
配置 Watcher 服务¶
Watcher 服务通过其配置文件进行配置。该文件通常位于 /etc/watcher/watcher.conf。
您可以使用以下命令轻松生成和更新名为 watcher.conf.sample 的示例配置文件
$ git clone https://opendev.org/openstack/watcher.git
$ cd watcher/
$ tox -e genconfig
$ vi etc/watcher/watcher.conf.sample
配置文件组织为以下部分
[DEFAULT]- 通用配置[api]- API 服务器配置[database]- SQL 驱动程序配置[keystone_authtoken]- Keystone 身份验证插件配置[watcher_clients_auth]- 客户端的 Keystone 身份验证配置[watcher_applier]- Watcher Applier 模块配置[watcher_decision_engine]- Watcher Decision Engine 模块配置[oslo_messaging_rabbit]- Oslo Messaging RabbitMQ 驱动程序配置[cinder_client]- Cinder 客户端配置[glance_client]- Glance 客户端配置[gnocchi_client]- Gnocchi 客户端配置[ironic_client]- Ironic 客户端配置[keystone_client]- Keystone 客户端配置[nova_client]- Nova 客户端配置[neutron_client]- Neutron 客户端配置[placement_client]- Placement 客户端配置
Watcher 配置文件应命名为 watcher.conf。启动 Watcher 时,您可以使用 --config-file 指定要使用的其他配置文件。如果您不指定配置文件,Watcher 将按以下顺序在以下目录中查找配置文件
~/.watcher/~//etc/watcher//etc/
虽然此处提到了一些配置选项,但建议您查看所有 可用选项,以便根据您的需求配置 watcher 服务。
Watcher 服务将信息存储在数据库中。本指南使用其他 OpenStack 服务使用的 MySQL 数据库。
通过
connection选项配置数据库的位置。在以下示例中,将 WATCHER_DBPASSWORD 替换为您的watcher用户的密码,并将 DB_IP 替换为 DB 服务器的 IP 地址[database] ... # The SQLAlchemy connection string used to connect to the # database (string value) #connection=<None> connection = mysql+pymysql://watcher:WATCHER_DBPASSWORD@DB_IP/watcher?charset=utf8
通过设置这些选项之一来配置 Watcher 服务以使用 RabbitMQ 消息代理。将 RABBIT_HOST 替换为 RabbitMQ 服务器的 IP 地址,将 RABBITMQ_USER 和 RABBITMQ_PASSWORD 替换为 RabbitMQ 服务器的登录凭据
[DEFAULT] # The default exchange under which topics are scoped. May be # overridden by an exchange name specified in the transport_url # option. (string value) control_exchange = watcher # ... transport_url = rabbit://RABBITMQ_USER:RABBITMQ_PASSWORD@RABBIT_HOST
Watcher API 将通过 keystonemiddleware 验证每个传入请求提供的令牌,这需要使用正确的 Identity 服务凭据配置 Watcher 服务。
在下面的配置部分
将 IDENTITY_IP 替换为 Identity 服务器的 IP
将 WATCHER_PASSWORD 替换为您为
watcher用户选择的密码将 KEYSTONE_SERVICE_PROJECT_NAME 替换为为 OpenStack 服务创建的项目名称(例如
service)[keystone_authtoken] # Authentication type to load (unknown value) # Deprecated group/name - [DEFAULT]/auth_plugin #auth_type = <None> auth_type = password # Authentication URL (unknown value) #auth_url = <None> auth_url = http://IDENTITY_IP:5000 # Username (unknown value) # Deprecated group/name - [DEFAULT]/username #username = <None> username=watcher # User's password (unknown value) #password = <None> password = WATCHER_PASSWORD # Domain ID containing project (unknown value) #project_domain_id = <None> project_domain_id = default # User's domain id (unknown value) #user_domain_id = <None> user_domain_id = default # Project name to scope to (unknown value) # Deprecated group/name - [DEFAULT]/tenant-name #project_name = <None> project_name = KEYSTONE_SERVICE_PROJECT_NAME
Watcher 的决策引擎和 applier 通过这些项目的客户端与其他的 OpenStack 项目交互。为了实例化这些客户端,Watcher 需要使用正确的凭据从 Identity 服务请求新的会话。
在下面的配置部分
将 IDENTITY_IP 替换为 Identity 服务器的 IP
将 WATCHER_PASSWORD 替换为您为
watcher用户选择的密码将 KEYSTONE_SERVICE_PROJECT_NAME 替换为为 OpenStack 服务创建的项目名称(例如
service)[watcher_clients_auth] # Authentication type to load (unknown value) # Deprecated group/name - [DEFAULT]/auth_plugin #auth_type = <None> auth_type = password # Authentication URL (unknown value) #auth_url = <None> auth_url = http://IDENTITY_IP:5000 # Username (unknown value) # Deprecated group/name - [DEFAULT]/username #username = <None> username=watcher # User's password (unknown value) #password = <None> password = WATCHER_PASSWORD # Domain ID containing project (unknown value) #project_domain_id = <None> project_domain_id = default # User's domain id (unknown value) #user_domain_id = <None> user_domain_id = default # Project name to scope to (unknown value) # Deprecated group/name - [DEFAULT]/tenant-name #project_name = <None> project_name = KEYSTONE_SERVICE_PROJECT_NAME
如果需要,可以配置客户端使用特定版本。例如,要配置 Watcher 使用版本为 2.1 的 Nova 客户端,请使用
[nova_client] # Version of Nova API to use in novaclient. (string value) #api_version = 2.56 api_version = 2.1
创建 Watcher 服务数据库表
$ watcher-db-manage --config-file /etc/watcher/watcher.conf create_schema
启动 Watcher 服务
$ watcher-api && watcher-decision-engine && watcher-applier
配置 Nova compute¶
请检查您的 hypervisor 配置,以正确处理 实例迁移。
配置 Measurements¶
您可以按照以下文档配置和安装 Ceilometer
Watcher 提供的内置策略 ‘basic_consolidation’ 需要 Ceilometer 收集 “compute.node.cpu.percent” 和 “cpu” 指标。可用的指标取决于 OpenStack 管理的 hypervisor 和 OpenStack 版本。您可以在 OpenStack 网站上找到每个 hypervisor 和 OpenStack 版本的可用指标。您可以使用 ‘ceilometer meter-list’ 列出可用的计量器。
更多信息:https://docs.openstack.org/ceilometer/2025.2/admin/telemetry-measurements.html
Ceilometer 旨在从 OpenStack 服务和其他外部组件收集指标。如果您想添加新的计量器到当前存在的计量器中,您需要遵循以下文档
Ceilometer collector 使用可插拔的存储系统,这意味着您可以选择任何您喜欢的数据库系统。最初的实现基于 MongoDB,但您可以使用任何您想要的技术创建自己的存储驱动程序。更多信息:https://wiki.openstack.org/wiki/Gnocchi
配置 Nova Notifications¶
Watcher 可以消费 Nova 服务生成的通知,以便实时构建或更新其与计算资源相关的集群数据模型。
Nova 发出未版本化(legacy)和版本化的通知到不同的主题。由于 legacy 通知将被弃用,Watcher 消费 Nova 版本化的通知。
在文件
/etc/nova/nova.conf中,[oslo_messaging_notifications]部分中的 driver 值不能为 noop,并且[notifications]部分中的 notification_format 值应为 both 或 versioned[oslo_messaging_notifications] driver = messagingv2 ... [notifications] notification_format = both
配置 Cinder Notifications¶
Watcher 还可以消费 Cinder 服务生成的通知,以便实时构建或更新其与存储资源相关的集群数据模型。
Cinder 在 notifications 主题上发出通知,在 openstack control exchange 中(如 Cinder conf 中所示)。
在文件
/etc/cinder/cinder.conf中,[oslo_messaging_notifications]部分中的 driver 值不能为 noop。[oslo_messaging_notifications] driver = messagingv2
配置 Watcher 监听 Notifications¶
为了消费 Cinder 或 Nova 通知(或两者),Watcher 必须配置为监听 Cinder 和 Nova 发出的通知主题。
使用 notification_topics 配置选项来指示 Watcher 应该监听正确的主题。默认情况下,Cinder 在 openstack.notifications 上发出通知,而 Nova 在 nova.versioned_notifications 上发出通知。Watcher 配置文件应具有所需通知的主题,以下是 Cinder 和 Nova 的示例
[watcher_decision_engine]
...
notification_topics = nova.versioned_notifications,openstack.notifications
Workers¶
您可以为决策引擎和 Applier 定义工作者数量。
如果您想同时创建和运行更多的审计,您必须提高决策引擎使用的工作者数量
[watcher_decision_engine]
...
# The maximum number of threads that can be used to execute strategies
# (integer value)
#max_workers = 2
如果您想同时执行更多的推荐行动计划,您必须提高 Applier 使用的工作者数量
[watcher_applier]
...
# Number of workers for applier, default value is 1. (integer value)
# Minimum value: 1
#workers = 1