启用 Ceilometer 的 LBaaS V2¶
https://blueprints.launchpad.net/ceilometer/+spec/lbaas-v2-enablement
此蓝图的目标是在 Ceilometer 中支持 LBaaS v2,以轮询负载均衡器数据。
问题描述¶
根据 Neutron API 文档[4],LBaaS v1 已在 Mitaka 版本中弃用。
基于 neutron LBaaS v2 文档[1]和 LBaaS v2 蓝图,LBaaS v2 API 受到支持。LBaaS v1 和 LBaaS v2 不能同时运行。用户只能选择在其环境中运行一个版本的 LBaaS。
根据 Ceilometer 管理员指南[3],Ceilometer 从 Juno 版本开始支持收集 LBaaS 的数据。
当用户选择在其环境中采用 LBaaS v2 时,他们会遇到一个问题,即使用 Ceilometer 收集 LBaaS 指标,因为 LBaaS v2 API 与 LBaaS v1 不同。
由于 LBaaS v1 已在 Mitaka 版本中弃用,如果 Ceilometer 不支持 LBaaS v2,Ceilometer 将失去收集 LBaaS 指标的功能。
LBaaS v1 和 LBaaS v2 的设计不同。LBaaS v2 引入了指标 ‘loadbalancer’,其中包含 ‘vip’,因此指标 ‘vip’ 对 LBaaS v2 用户来说并不重要。而且 LBaaS v2 没有提供 API 来直接获取 vip 的数据。
LBaaS v1 支持这些指标,而 LBaaS v2 不支持。
名称 类型 单位 network.services.lb.vip Gauge vip network.services.lb.vip.create Delta vip network.services.lb.vip.update Delta vip
所有 LBaaS API 在版本 2 中都已更改。我们需要使用新的 API 来收集数据。
LBaaS v1 和 LBaaS v2 之间的 API 差异。
指标名称 v1 API network.services.lb.pool /v2.0/lb/pools network.services.lb.member /v2.0/lb/members network.services.lb.health_monitor /v2.0/lb/health_monitors network.services.lb.total.connections /v2.0/lb/pools/%s/stats network.services.lb.active.connections /v2.0/lb/pools/%s/stats network.services.lb.incoming.bytes /v2.0/lb/pools/%s/stats network.services.lb.outgoing.bytes /v2.0/lb/pools/%s/stats
指标名称 v2 API network.services.lb.pool /v2.0/lbaas/pools network.services.lb.member /v2.0/lbaas/pool/%s/members network.services.lb.health_monitor /v2.0/lbaas/pools network.services.lb.total.connections /v2.0/lbaas/loadbalancers/%s/stats network.services.lb.active.connections /v2.0/lbaas/loadbalancers/%s/stats network.services.lb.incoming.bytes /v2.0/lbaas/loadbalancers/%s/stats network.services.lb.outgoing.bytes /v2.0/lbaas/loadbalancers/%s/stats
我们用于收集 LBaaS 之间 LBaaS v1 和 LBaaS v2 的 neutron 客户端方法的差异。
指标名称 v1 方法 network.services.lb.pool list_pools network.services.lb.member list_members network.services.lb.health_monitor list_health_monitors network.services.lb.total.connections retrieve_pool_stats network.services.lb.active.connections retrieve_pool_stats network.services.lb.incoming.bytes retrieve_pool_stats network.services.lb.outgoing.bytes retrieve_pool_stats
指标名称 v2 方法 network.services.lb.pool list_lbaas_pools network.services.lb.member list_lbaas_members network.services.lb.health_monitor list_lbaas_healthmonitors network.services.lb.total.connections retrieve_loadbalancer_stats network.services.lb.active.connections retrieve_loadbalancer_stats network.services.lb.incoming.bytes retrieve_loadbalancer_stats network.services.lb.outgoing.bytes retrieve_loadbalancer_stats
提议的变更¶
为了让用户在当前情况下可以切换 LBaaS API 版本,将在配置文件中添加一个新条目来指定 LBaaS 的 API 版本。
当用户选择使用 LBaaS API v1 时,将收集 LBaaS v1 支持的指标。但是 LBaaS API v1 已在 Mitaka 版本中弃用,我们应该建议用户不要选择使用 LBaaS API v1。
当用户选择使用 LBaaS API v2 时,将收集 LBaaS v2 支持的指标。但是某些指标将不受 LBaaS v2 支持,包括 ‘network.services.lb.vip’、‘network.services.lb.vip.create’、‘network.services.lb.vip.update’。 我们将在日志文件中添加一些错误消息来识别这些指标不受 LbaaS v2 支持。 并且 LBaaS v1 和 LBaaS v2 都支持的指标,我们将切换到使用新的 neutron 客户端方法来获取它们的数据。 在 neutorn 客户端[5]中,新的 LBaaS v2 API 具有字符 ‘lbaas’。
这些更改不会更改数据模型。 它只是切换到在客户端使用 LBaaS v2 API。
引入了新的指标并由 LBaaS v2 支持。
指标定义
名称 类型 单位 起源 network.services.lb.loadbalancer g loadbalancer p network.services.lb.listener g listener p network.services.lb.loadbalancer.create d loadbalancer n network.services.lb.loadbalancer.update d loadbalancer n network.services.lb.listener.create d listener n network.services.lb.listener.update d listener n
注意:loadbalancer:负载均衡器的存在 listener:监听器的存在 g:gauge d:delta p:pollster n:notification
元数据
我们从调用 neutron 客户端的响应中提取数据来构成 sample 的元数据。 我们使用的元数据字段在代码中是固定的。 在检查 LBaaS v2 API 的响应后,大多数字段仍然在响应中。 只有字段 ‘status_description’ 不在响应中。 但是字段 ‘status’ 和 ‘status_description’ 之间的关系在文档[5]中列出,我们可以使用字段 ‘status’ 的值来设置字段 ‘status_description’ 的值。
基于以上原因,元数据的结构没有改变。 我们不会遇到问题,当 LBaaS v1 和 LBaaS v2 收集的数据都在同一个数据库中时。
替代方案¶
选项一:在管理员指南[3]中添加限制,让用户知道 Ceilometer 不支持 LBaaS v2。 但是 LBaaS v2 比 v1 更强大、更安全,未来会有越来越多的用户选择使用 LBaaS v2。 而且 LBaaS v1 已在 Mitaka 版本中弃用。 因此,此限制不令人满意。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
Pipeline 影响¶
无
其他最终用户影响¶
无
性能/可扩展性影响¶
无
其他部署影响¶
无
开发者影响¶
无
实现¶
负责人¶
jizilian
主要负责人:jizilian
其他贡献者
持续维护者
工作项¶
a. 在配置文件中添加新条目以指定 LBaaS 的版本 b. 当用户决定使用 LBaaS v2 时,在 Ceilometer neutron 客户端中使用 LBaaS v2 API c. 添加新的 UT 测试用例
未来生命周期¶
持续维护将由 Ceilometer 团队处理,包括我自己。
依赖项¶
无
测试¶
将添加单元和集成测试,以涵盖必要的指标并验证生成的样本。
文档影响¶
需要更新有关 LBaaS v2 支持的文档。
参考资料¶
[1]https://specs.openstack.org/openstack/neutron-specs/specs/kilo/lbaas-api-and-objmodel-improvement.html [2]https://blueprints.launchpad.net/neutron/+spec/lbaas-api-and-objmodel-improvement [3]https://docs.openstack.org/admin-guide-cloud/telemetry-measurements.html [4]https://developer.openstack.org/api-ref-networking-v2-ext.html [5]https://github.com/openstack/python-neutronclient/blob/master/neutronclient/v2_0/client.py