滚动升级

Barbican 用户希望以最少的停机时间升级其现有环境。本规范概述了断言各种升级标签所需的更改。Pike 的目标是断言 assert:supports-rolling-upgrade 标签。

问题描述:

目前有六个升级标签
  • assert:follows-standard-deprecation

  • assert:supports-upgrade

  • assert:supports-accessible-upgrade

  • assert:supports-rolling-upgrade

  • assert:supports-zero-downtime-upgrade

  • assert:supports-zero-impact-upgrade

Barbican 项目中的状态标签

  • assert:follows-standard-deprecation: 完成 [1]

  • assert:supports-upgrade: 完成 [2]

  • assert:supports-accessible-upgrade: 尚未完成 [3]

  • assert:supports-rolling-upgrade: 尚未完成 [4]

  • assert:supports-zero-downtime-upgrade: 尚未完成 [5]

  • assert:supports-zero-impact-upgrade: 尚未完成 [6]

提议的变更:

为了支持 Barbican 的滚动升级,我们需要比较升级和滚动升级的功能列表支持,如下所示

  1. 维护模式

  2. 实时迁移

  3. 升级编排

  4. 多版本互操作性

  5. 在线模式迁移

  6. 优雅关闭

  7. 升级编排 - 移除

  8. 升级编排 - 工具

  9. 升级门控

  10. 项目标记

对于 Barbican,从版本 N-1 升级到版本 N,然后再到 N+1,我们遵循支持状态并执行以下详细项目:https://github.com/openstack/development-proposals/blob/master/development-proposals/proposed/rolling-upgrades.rst

  1. 维护模式:无需实现

  • 由于插件机制以及没有调度器/放置服务,因此无需实现它

  1. 实时迁移:无需实现

  • 因为 Barbican 没有数据平面。所有信息都将存储在其数据库和密钥存储插件中。

  1. 升级编排:尚未实现

  2. 多版本互操作性

  • API 微版本:尚未实现 - Barbican 不需要微版本来进行滚动升级。

  • RPC 版本控制:尚未实现。

  • RPC 对象版本 (Oslo.VersionedObjects):尚未实现。

  1. 在线模式迁移:尚未实现

  2. 优雅关闭:已实现

  • Barbican-api 使用 Pecan 暴露 API,Pecan 已经支持优雅关闭,这意味着 barbican-api 也支持此功能

  • Barbican 中的其他服务使用 oslo.service 启动服务,oslo.service 已经实现了优雅关闭,因此它们也支持此功能。

  1. 升级编排:尚未实现

  2. 升级编排:工具已实现

  3. 升级门控:已实现

  4. 项目标记:尚未实现

  • 断言标签并通知 OpenStack 技术委员会

数据模型影响

  • 受影响,因为 O.VO 代码库将改变 Barbican 服务与数据库通信的方式以及 Barbican 内部服务之间的数据流。

REST API 影响

安全影响

通知影响

其他最终用户影响

最终用户在升级 barbican 服务时将停机时间降至最低。

性能影响

其他部署者影响

预计滚动升级需要操作员干预。

开发人员影响

开发人员需要了解 Barbican 支持滚动升级的功能,并确保它们不会被删除(开发人员还需要在滚动升级的数据库策略约束范围内工作,但开发人员的影响包含在另一个规范中)。

实现

负责人

主要负责人

namnh

其他贡献者

daidv

hieulq

工作项目:

  • 在滚动升级之前将 O.VO 应用于 Barbican

    • 将 oslo.versionedobjects 添加到需求文档。

    • 实现 barbican O.VO 基本对象。

    • 将当前数据库对象迁移到 OVO 对象。

    • 在 objects/fields.py 中实现额外的字段。

    • 实现 RPC 对象注册表并注册所有对象。

    • 实现并附加对象序列化器。

    • 在 objects/base.py 中实现间接 API (VersionedObjectIndirectionAPI)

    • 实现 Barbican O.VO 模块的单元测试。

  • 为 O.VO 执行滚动升级。

    • 提供序列化版本。

    • 实现一种新的方法来检查版本。

    • 实现 RPC 固定版本。

    • 实现与 DB 通信的方法,例如查询、保存和创建。

  • 在完成之前,为 OSM 执行滚动升级以及 O.VO。

    • 为 Barbican 实现 DB 升级机制,以通过 CLI 执行 barbican-db-manage 命令,包括三个分支

      • ‘–expand’ 分支:用于在 barbican 数据库中添加列、表或触发器。

      • ‘–contract’ 分支:用于在分支中的所有服务升级到新版本后删除列、表或触发器。

    • 通过多版本互操作性(包括 O.VO 和 RPC 固定)逐步迁移数据到新模式。

    • 通过 online_data_migrations 命令行确保所有数据都已迁移到新模式。

  • 编写滚动升级文档(操作员文档)。

  • 断言标签并通知 OpenStack 技术委员会。

参考资料

[1] https://governance.openstack.org/tc/reference/tags/assert_follows-standard-deprecation.html#tag-assert-follows-standard-deprecation

[2] https://governance.openstack.org/tc/reference/tags/assert_supports-upgrade.html#application-to-current-projects

[3] https://governance.openstack.org/tc/reference/tags/assert_supports-accessible-upgrade.html

[4] https://governance.openstack.org/tc/reference/tags/assert_supports-rolling-upgrade.html

[5] https://governance.openstack.org/tc/reference/tags/assert_supports-zero-downtime-upgrade.html

[6] https://governance.openstack.org/tc/reference/tags/assert_supports-zero-impact-upgrade.html