You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: charts/keycloakx/README.md
+28-1Lines changed: 28 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -238,7 +238,15 @@ The following table lists the configurable parameters of the Keycloak-X chart an
238
238
|`test.image.pullPolicy`| The image pull policy for the test Pod image |`IfNotPresent`|
239
239
|`test.podSecurityContext`| SecurityContext for the entire test Pod |`{"fsGroup":1000}`|
240
240
|`test.securityContext`| SecurityContext for the test container |`{"runAsNonRoot":true,"runAsUser":1000}`|
241
-
|`test.deletionPolicy`|`helm.sh/hook-delete-policy` for the test Pod |`before-hook-creation`||`before-hook-creation`|
241
+
|`test.deletionPolicy`|`helm.sh/hook-delete-policy` for the test Pod |`before-hook-creation`|
242
+
|`updateHook.enabled`| If `true`, enables the update hook that runs before statefulset updates |`true`|
243
+
|`updateHook.image`| The image used for the update hook |`docker.io/curlimages/curl`|
244
+
|`updateHook.podSecurityContext`| SecurityContext for the update hook Pod | `{"fsGroup":1000,"runAsNonRoot":true,"seccompProfile":{"type":"RuntimeDefault"}} |
245
+
|`updateHook.securityContext`| SecurityContext for the update hook container | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsGroup":1000,"runAsUser":1000} |
246
+
|`updateHook.resources`| Resource requests and limits for the update hook container |`{"limits":{"cpu":"20m","memory":"32Mi"},"requests":{"cpu":"20m","memory":"32Mi"}}`|
247
+
|`updateHook.kubernetesApi.url`| Kubernetes API URL for the update hook (Required if updateHook is enabled) |`""`|
248
+
|`updateHook.kubernetesApi.port`| Kubernetes API port for the update hook (Required if updateHook is enabled) |`""`|
249
+
|`updateHook.kubernetesApi.cidr`| Kubernetes API CIDR for the update hook (Required if updateHook and networkpolicy are enabled) |`""`|
242
250
243
251
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example:
244
252
@@ -372,6 +380,25 @@ extraEnv: |
372
380
For high availability, Keycloak must be run with multiple replicas (`replicas > 1`).
373
381
The chart has a helper template (`keycloak.serviceDnsName`) that creates the DNS name based on the headless service.
374
382
383
+
#### Updating Minor and Major Versions in Cluster Mode
384
+
385
+
Keycloak does **not** support minor or major version upgrades while running in cluster mode. Only patch updates are supported.
386
+
(Refer to the official Keycloak documentation for more details.)
387
+
388
+
If you attempt such an upgrade in cluster mode, you may encounter errors due to JGroups version mismatches, for example:
389
+
390
+
> WARN [org.jgroups.protocols.TCP] (TcpServer.Acceptor[7800]-1,keycloakx-1-2180(v=16.0.8)) JGRP000006: 10.151.254.47:7800: failed accepting connection from peer SSLSocket[hostname=127.0.0.6, port=51749, Session(1776862509121|TLS_AES_256_GCM_SHA384)]: java.io.IOException: 10.151.254.47:7800: readPeerAddress(): packet from /127.0.0.6:51749 has different version (5.3.16) from ours (5.5.1); discarding it
391
+
392
+
Because of this limitation, **downtime is required** to perform minor or major version upgrades.
393
+
394
+
**Recommended upgrade procedure:**
395
+
396
+
1. Scale down the StatefulSet to a single replica to disable cluster mode.
397
+
2. Perform the version upgrade.
398
+
3. Once the upgrade is complete, scale the StatefulSet back to its original number of replicas.
399
+
400
+
To simplify this process, the chart includes an `updateHook` parameter that automates these steps.
401
+
375
402
### Default Cache Stack
376
403
377
404
The default cache stack is now using `jdbc-ping` which leverages a table called `jgroups_ping` in the keycloak database to store the cache and significantly reduces network complexity. Keycloak has set this [transport stack](https://www.keycloak.org/server/caching#_transport_stacks) as the default starting in 26.1.0 and it is backwards compatible with all 26.X releases.
0 commit comments