Keystone Charm 目标状态支持

Charm 在模型中的单元上安装和配置软件。软件应该如何设置由一组信息源决定。

  • 单元运行环境

  • 应用程序级别的配置选项

    • 在模型中设置,并在早期阶段可供 charm 使用

  • 与安装在同一单元上的 charm 的从属关系

  • 与同一模型中相同应用程序的其他单元的对等/集群关系

  • 与同一模型中其他应用程序的单元的关系

  • 跨模型关系

最简单的情况下,charm 的唯一目标是尽快安装软件、写入配置并启动它,使用户能够使用该软件。

问题描述

随着部署的进行,charm 会随着其 relation-joinedrelation-changed 钩子被触发,了解其更广泛的环境。其中一些关系可能会从根本上改变软件应该如何设置或行为。软件在投入运行状态之前需要满足的依赖项和要求也很大程度上取决于 charm 具有哪些关系。

目前,您可能会发现,在部署完成时,charm 已经重新配置并重启了它的服务多次,每次它也可能通知它的对等体和关系执行相同的操作。这些活动会延长部署时间,并导致依赖服务上的竞争条件和瞬态错误。

提议的变更

为了解决这些问题,Juju 引入了一个 goal-state 命令到钩子环境中。Charm 可以使用它来获得对 Juju 将要部署的内容的预先了解。

范围

  • 在 Keystone charm 中引入 goal-state 支持

  • 在可用时,利用对部署的早期视图来简化 charm 操作

限制

  • 此功能依赖于 Juju 的支持。 截至本文撰写时,此功能仅受 Juju 2.4 支持。

    • 当 charm 使用不支持目标状态的 Juju 版本部署时,它将回退到从配置选项和关系出现时推断有关部署的信息。

  • 目标状态让我们一窥未来,但如果对模型进行修改,在部署完成之前,该未来的现实可能会在我们脚下发生变化。

    • 如果目标状态在部署过程中发生变化,目标状态优化的好处可能会被最小化,或者在最坏的情况下,部署时间会更长。

备选方案

可以通过引入提供预期规模提示的配置选项来缓解这些问题。但这种方法是静态的,并且与 Juju 的动态使用和易于扩展特性相矛盾。

实现

负责人

主要负责人

fnordahl

Gerrit Topic

对于与此规范相关的所有补丁,请使用 Gerrit 主题“goal-state”。

git-review -t goal-state

工作项

  • 编写测试 charm 和相关的测试规范,以练习和监控 identity-* 关系如何在复杂的部署场景中被 keystone charm 运用。

  • 延迟初始运行 identity-adminidentity-serviceidentity-credentials 关系,直到

    • 所有 keystone 单元都已加入并完成了 charm 的对等/集群关系

    • shared-db 关系已准备就绪并稳定

    • 如果使用 HA,请确保它真正启动并准备就绪

  • 限制在初始运行后触发 identity-adminidentity-serviceidentity-credentials 关系的次数

  • 限制将凭据添加到/更新到数据库的次数

仓库

不需要新的仓库。

文档

这主要是一个幕后更改,文档将在代码中作为文档字符串添加。

安全性

没有影响安全性的更改。

测试

将与任何代码更改一起编写单元测试。

将根据需要扩展或编写功能测试。

将编写一个测试 charm 和相关的测试规范,以练习和监控 identity-* 关系如何在复杂的部署场景中被 keystone charm 运用。

将记录在提议更改之前和之后的部署时间的比较,作为审查过程的一部分。

依赖项

  • 需要 Juju 2.4 才能支持目标状态,当不可用时,charm 将回退到当前行为。