共享后端配置段

https://blueprints.launchpad.net/cinder/+spec/shared-backend-config

添加一个新的配置段,用于共享后端配置选项。

问题描述

目前在多后端 cinder.conf 中共享后端配置选项的方式并不理想。你可以将内容放在 DEFAULT 中,但如果驱动程序在自己的段中定义了这些选项,它们的 self.configuration 将无法看到它们。你也可以直接查看 DEFAULT 段,但如果你确实想在驱动程序后端段中拥有一些特殊设置,就无法轻松地覆盖它。例如,考虑以下 cinder.conf

[DEFAULT]
enabled_backends = backend1, backend2, backend3
...
my_driver_param = foo
...

[backend1]
...
my_driver_param = bar

[backend2]
..
# not specifying the param

[backend3]
...
(also not specifying, maybe even a different volume driver, doesn't matter)

最终的结果是 backend1 获得 ‘bar’,而 backend2/3 获得 ‘my_driver_param’ 的默认值。要让它们都使用 ‘foo’,我们需要类似这样的配置:

[DEFAULT]
enabled_backends = backend1, backend2, backend3
...

[backend1]
...
my_driver_param = bar

[backend2]
..
my_driver_param = foo

[backend3]
...
my_driver_param = foo

困惑的一部分在于,如果你不使用多后端格式,你实际上希望 DEFAULT 中的选项被设置。

用例

这里的主要用例是 cinder.conf 中与多个后端相关的共享配置。同时也有助于减少对 DEFAULT 中共享配置选项的一些困惑。

提议的变更

新的配置段称为 ‘backend_defaults’,它将包含每个后端都可以访问的配置选项。如果任何选项也在后端段中,则该后端特定的值将优先。可以安全地假设共享配置中的选项将被共享,并且可供所有后端使用。无需猜测 DEFAULT 中的设置。

一个新的配置可能如下所示:

[DEFAULT]
enabled_backends = backend1, backend2, backend3
...

[backend_defaults]
my_driver_param = foo

[backend1]
...
my_driver_param = bar

[backend2]
..
# not defining the value, but it gets picked up

[backend3]
...
# same here..

这与上面的示例相同,其中所有后端都定义了该值。这个简单的示例并没有真正展示很多好处,所以一个稍微更现实的示例可能是:

[DEFAULT]
enabled_backends = pure1, pure2, pure3
...

[backend_defaults]
volume_driver = cinder.volume.drivers.pure.PureISCSIDriver
driver_ssl_verify = true
driver_ssl_cert = /etc/blah/my_cert
use_multipath_for_image_xfer = true
use_chap_auth = true
image_volume_cache_enabled = true
image_volume_cache_max_count = 15
image_volume_cache_max_size_gb = 200
max_over_subscription_ratio = 10
pure_eradicate_on_delete = false

[pure1]
san_ip = 1.2.3.4
pure_api_token = abcdef123456
max_over_subscription_ratio = 50

[pure2]
san_ip = 1.2.3.5
pure_api_token = abcdef1234567
image_volume_cache_max_count = 25

[pure3]
san_ip = 1.2.3.6
pure_api_token = abcdef12345678

所以这里我们有很多共享配置选项,只留下一些特定于每个后端的选项。

除了共享配置段之外,我们将弃用通过 DEFAULT 段设置后端的方式。我们将只允许使用 “enabled_backends” 配置选项使用多后端风格的配置。

备选方案

我们可以更改行为,使 DEFAULT 中的内容这样做,但它将与旧的 cinder.conf 不兼容。升级时部署者的行为可能不是他们所期望的。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

将需要学习一种新的配置机制,但旧的配置风格仍然可以正常工作。最终他们需要迁移到使用 “enabled_backends” 配置选项,这个过程将遵循标准的弃用流程。

开发人员影响

除了需要了解驱动程序如何获取其配置值之外,没有其他任何内容。

实现

负责人

主要负责人

patrick-east

工作项

  • 在没有 “enabled_backends” 的情况下初始化 c-vol 时添加警告

  • 修改驱动程序配置实用程序,首先查找此段,如果已定义,则使用后端特定的值覆盖值。

  • 添加一些单元测试

  • 将配置合并到多后端 tempest 测试中

依赖项

测试

  • 单元测试

  • 使用 devstack 的 Tempest 测试配置(达到目标,取决于时间安排)

文档影响

  • 更新的驱动程序配置参考

  • 驱动程序开发文档,解释其工作原理

参考资料