apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
name: example-kc
spec:
update:
strategy: RecreateOnImageChange|Auto|Explicit (1)
revision: "abc" (2)
默认情况下,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 策略的修订值。其他策略忽略此值。 |
值 | 停机? | 描述 |
---|---|---|
|
当镜像名称或标签更改时 |
模仿 Keycloak 26.1 或更早版本的行为。当镜像字段更改时,Operator 会在应用新镜像之前缩减 StatefulSet。 |
|
当发生不兼容的更改时 |
Keycloak Operator 检测是否可以进行滚动更新或重建更新。 在当前版本中,如果旧镜像和新镜像的 Keycloak 版本相同,则 Keycloak 执行滚动更新。未来版本的 Keycloak 将更改此行为,并使用来自配置、镜像和版本的其他信息来确定是否可以进行滚动更新以减少停机时间。 |
|
仅 |
Keycloak Operator 检查 |
Auto
和 Explicit
更新策略当使用 Auto
更新策略时,Keycloak Operator 会自动启动一个 Job 来评估滚动更新的可行性。请阅读 检查是否可以进行滚动更新 指南,了解有关此过程的更多信息。此过程在检查期间会消耗集群资源,并在 StatefulSet 更新开始之前引入轻微延迟。
Explicit
更新策略将更新决策委托给用户。revision
字段充当用户控制的触发器。虽然 Keycloak Operator 本身不解释 revision
值,但在 revision
保持不变的情况下对自定义资源 (CR) 的任何更改都将提示滚动更新。
在使用自动 Operator 升级时请谨慎使用此策略。Operator Lifecycle Manager (OLM) 可能会升级 Keycloak Operator,并且如果正在使用 Explicit
更新策略,则可能导致意外行为或部署失败,因为 Operator 会尝试滚动更新,而实际上并不支持滚动更新。如果您正在使用 Explicit
更新策略,强烈建议在升级之前在非生产环境中进行彻底的测试。