服务发现

许多可选服务现在可以作为 OpenStack 云的一部分部署,每个服务都有不同的可选功能,这些功能可能在部署过程中启用或禁用。

Charms 需要一种发现这些信息的方式,以便可以根据 charm 用户选择的选项正确配置服务。

问题描述

Charms 需要能够确定 OpenStack 云中部署了哪些其他服务,以便可以根据需要启用/禁用功能。

例如:

  • ceilometer 的通知(当 ceilometer 未部署时,真的不希望启用通知)。

  • openstack dashboard 中的各种面板(neutron 的 fwaas、lbaas、l3ha、dvr 等)。

  • designate 的通知(当 designate 未部署时禁用)。

服务和服务的特性由注册到 keystone charm 的服务目录中的 API 端点 charms 确定。

提议的变更

keystone charm 将暴露一个新的 provides 接口 ‘cloud-services’,它对已部署的服务及其注册的端点进行较为丰富的描述。

identity-service 关系也会宣传与 cloud-services 关系相同的数据,以便已经与 keystone 关联的 charms 无需重复关联(identity-service 是 cloud-services 的超集)。

默认情况下,类型为 ‘A’ 的注册端点将导致服务类型 ‘A’ 作为此接口上部署云的一部分列出。

服务还可以通过在端点注册时提供 ‘features’(可选)来丰富此数据 - 这些将在 cloud-service 和 identity-service 关系上暴露。

数据看起来像这样(填充了真实示例 - 键和建议值):

services: ['object-store', 'network', 'volumev2', 'compute',
           'metering', 'image', 'orchestration', 'dns']

示例 - 宣传网络服务支持的功能,允许在仪表板中自动启用功能

network: ['dvr', 'fwaas', 'lbaasv2', 'l3ha']

示例 - 允许 ceilometer 知道部署的对象存储是 radosgw 而不是 swift

object-store: ['radosgw']

值可以解析为 json/yaml 格式的列表。

通过使用基本标签原语,我们获得了类型/功能易于表达的灵活性。

在集群部署中,接口将最终保持一致 - 所有 keystone 单元都将呈现相同的数据。

备选方案

每个 charm 都可以查询 keystone 服务目录;但是,这非常依赖于某个时间点检查,并且服务目录可能在查询之后发生更改。 此外,keystone 服务目录没有关于每个服务类型可能启用了哪些可选功能的详细信息,并且 keystone 服务将在集群构建期间部署期间重新启动等。

实现

负责人

主要负责人

james-page

Gerrit Topic

使用 Gerrit 主题 “service-discovery” 用于与此规范相关的所有补丁。

git-review -t service-discovery

工作项

核心 (keystone charm)

  • 将 cloud-services 关系添加到 keystone charm

  • 将服务和功能发现处理程序添加到 keystone charm

  • 更新 keystone 接口以在 keystone charm 中宣传服务和功能。

  • 创建 cloud-services 反应式接口

启用

  • 更新 ceilometer charm 以进行 radosgw 发现。

  • 更新 openstack-dashboard charm 以自动为已部署的服务和功能启用面板。

  • 更新 neutron-api charm 以进行 designate 发现。

  • 更新 cinder charm 以进行 ceilometer 发现。

  • 更新 glance charm 以进行 ceilometer 发现。

  • 更新 neutron-api charm 以进行 ceilometer 发现。

  • 更新 radosgw charm 以宣传 ‘radosgw’ 功能。

  • 更新 neutron-api charm 以宣传网络功能。

仓库

不需要新的 git 仓库。

文档

此更改是 OpenStack charms 内部使用的,不需要为最终用户更新文档。

安全性

此变更没有安全影响。

测试

实施将包括所有新编写代码的单元测试; amulet 功能测试将更新,以确保在 charm 集中正确实施该功能。

依赖项

没有外部依赖项