使用滚动更新避免停机

在优化的镜像中更改主题、提供程序或配置时,避免停机。

默认情况下,Keycloak Operator 将在配置更改时执行滚动更新,而不会停机;当镜像名称或标签更改时,将执行需要停机的重建更新。

本指南介绍了如何配置 Keycloak Operator 以尽可能自动执行 Keycloak 的滚动更新,从而最大限度地减少停机时间,以及如何覆盖滚动更新的自动检测。

例如,使用它来避免在自定义或优化镜像中推出主题、提供程序或构建时配置的更新时停机。

支持的更新策略

Operator 支持以下更新策略

滚动更新

以滚动方式更新 StatefulSet,当至少运行两个副本时,避免停机。

重建更新

在应用更新之前缩减 StatefulSet,导致临时停机。

配置更新策略

在 Keycloak CR YAML 定义的 spec 部分中指定更新策略

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  update:
    strategy: RecreateOnImageChange|Auto|Explicit (1)
    revision: "abc" (2)
1 在此处设置所需的更新策略。
2 Explicit 策略的修订值。其他策略忽略此值。
表 1. 可能的字段值
停机? 描述

RecreateOnImageChange (默认)

当镜像名称或标签更改时

模仿 Keycloak 26.1 或更早版本的行为。当镜像字段更改时,Operator 会在应用新镜像之前缩减 StatefulSet。

Auto

当发生不兼容的更改时

Keycloak Operator 检测是否可以进行滚动更新或重建更新。

在当前版本中,如果旧镜像和新镜像的 Keycloak 版本相同,则 Keycloak 执行滚动更新。未来版本的 Keycloak 将更改此行为,并使用来自配置、镜像和版本的其他信息来确定是否可以进行滚动更新以减少停机时间。

Explicit

revision 字段更改

Keycloak Operator 检查 spec.update.revision 值。如果它与之前的部署匹配,则执行滚动更新。

理解 AutoExplicit 更新策略

当使用 Auto 更新策略时,Keycloak Operator 会自动启动一个 Job 来评估滚动更新的可行性。请阅读 检查是否可以进行滚动更新 指南,了解有关此过程的更多信息。此过程在检查期间会消耗集群资源,并在 StatefulSet 更新开始之前引入轻微延迟。

Explicit 更新策略将更新决策委托给用户。revision 字段充当用户控制的触发器。虽然 Keycloak Operator 本身不解释 revision 值,但在 revision 保持不变的情况下对自定义资源 (CR) 的任何更改都将提示滚动更新。

在使用自动 Operator 升级时请谨慎使用此策略。Operator Lifecycle Manager (OLM) 可能会升级 Keycloak Operator,并且如果正在使用 Explicit 更新策略,则可能导致意外行为或部署失败,因为 Operator 会尝试滚动更新,而实际上并不支持滚动更新。如果您正在使用 Explicit 更新策略,强烈建议在升级之前在非生产环境中进行彻底的测试。

CR 状态

Keycloak CR 状态 RecreateUpdateUsed 指示上次更新操作期间使用的更新策略。lastTransitionTime 字段指示上次更新发生的时间。使用此信息来观察 Operator 采取的行动和决策。

表 2. 条件状态
状态 描述

Unknown

初始状态。这意味着尚未发生任何更新。

False

Operator 在上次更新中应用了滚动更新策略。

True

Operator 在上次更新中应用了重建更新策略。message 字段解释了为什么选择此策略。

在此页上