检查是否可以滚动更新

执行更新兼容性命令以检查 Keycloak 是否支持对您的部署进行滚动更新。

当启用或禁用功能或更改 Keycloak 版本、配置或提供程序和主题时,使用更新兼容性命令来确定您是否可以使用滚动更新策略来更新您的部署。结果显示是否可以进行滚动更新,或者是否需要重新创建更新。

在其当前版本中,它表明当旧版本和新版本的 Keycloak 版本相同时,可以进行滚动更新。未来版本的 Keycloak 可能会更改该行为,以使用来自配置、镜像和版本的其他信息来确定是否可以进行滚动更新。

这是完全可脚本化的,因此您的更新程序可以使用该信息来执行滚动或重新创建策略,具体取决于所执行的更改。它也对 GitOps 友好,因为它允许将先前配置的元数据存储在文件中。在 CI/CD 管道中将此文件与新配置一起使用,以确定是否可以进行滚动更新,或者是否需要重新创建更新。

如果您正在使用 Keycloak Operator,请继续阅读使用滚动更新避免停机指南和 Auto 策略以获取更多信息。

支持的更新策略

滚动更新

在本指南中,滚动更新是指可以对您的部署(至少包含两个节点)执行零停机时间的更新。逐个更新您的 Keycloak;关闭您的旧部署节点之一,然后启动一个新的部署节点。等待新节点的启动探测返回成功,然后再继续下一个 Keycloak 节点。有关如何启用和使用启动探测的详细信息,请参阅指南使用健康检查跟踪实例状态

重新创建更新

重新创建更新与零停机时间不兼容,并且需要停机时间才能应用。在启动新版本的节点之前,关闭集群中运行旧版本的所有节点。

确定更新配置的更新策略

要确定是否可以进行滚动更新,请运行更新兼容性命令

  1. 使用旧配置生成所需的元数据。

  2. 使用新配置检查元数据以确定更新策略。

此命令目前仅提供有限的功能。目前,它仅考虑 Keycloak 和嵌入式 Infinispan 的版本来确定是否可以进行滚动更新。如果这些版本未更改,则它会报告可以进行滚动更新。

当前版本尚未验证配置更改,并假定所有配置更改都适用于滚动更新。这同样适用于自定义扩展和主题的更改。

一个很好的用例是,例如,当您想要在更改 Keycloak 主题或自定义扩展时进行滚动更新,并且只想在 Keycloak 版本更改时运行重新创建更新,而这还不允许滚动更新。

虽然这些命令的使用者应该知道今天存在的局限性,但他们不应依赖内部行为或元数据文件的结构。相反,他们应该仅依赖 check 命令的退出代码,以受益于内部逻辑的未来增强,从而确定何时可以进行滚动更新。

生成元数据

要生成元数据,请使用相同的 Keycloak 版本和配置选项执行以下命令

从当前部署生成并保存元数据。
bin/kc.[sh|bat] update-compatibility metadata --file=/path/to/file.json

此命令接受 start 命令使用的所有选项。该命令以 JSON 格式在控制台中显示元数据,以进行调试。 --file 参数允许您将元数据保存到文件。将此文件与后续的 check 命令一起使用。

确保在运行上述命令时包含所有配置选项,无论是通过环境变量还是 CLI 参数设置的。

省略任何配置选项都会导致元数据不完整,并可能导致下一步报告错误的结果。

检查元数据

此命令检查先前命令生成的元数据,并将其与当前配置和 Keycloak 版本进行比较。如果您要升级到新的 Keycloak 版本,则必须使用新版本执行此命令。

检查来自先前部署的元数据。
bin/kc.[sh|bat] update-compatibility check --file=/path/to/file.json
  • 确保在运行此命令时包含所有配置选项,无论是通过环境变量还是 CLI 参数设置的。

  • 验证使用了正确的 Keycloak 版本。

未能满足这些要求将导致不正确的结果。

该命令将结果打印到控制台。例如,如果可以进行滚动更新,它将显示

滚动更新可能消息
[OK] Rolling Update is available.

如果无法进行滚动更新,该命令将提供有关不兼容性的详细信息

滚动更新不可能消息
[keycloak] Rolling Update is not available. 'keycloak.version' is incompatible: 26.2.0 -> 26.2.1 (1)
1 在此示例中,Keycloak 版本 26.2.0 与版本 26.2.1 不兼容,并且无法进行滚动更新。

命令退出代码

在您的自动化管道中使用命令的退出代码来确定更新类型

退出代码 描述

0

滚动更新是可能的。

1

发生意外错误(例如元数据文件丢失或损坏)。

2

无效的 CLI 选项。

3

滚动更新是不可能的。部署必须在应用新配置之前关闭。

4

滚动更新是不可能的。功能 rolling-updates 已禁用。

进一步阅读

Keycloak Operator 使用上述功能来确定是否可以进行滚动更新。有关更多信息,请参阅使用滚动更新避免停机指南和 Auto 策略。

在此页面上