Kubernetes Keycloak high availability cluster

5/6/2020

I'm trying to deploy Keycloak in Kubernetes with multiple replicas. I am using Helm 3.0 charts with the latest Kubernetes. It deploys fine when I have one replica in my stateful set—but I need high availability and, thus, at least two replicas. So far, it only works with one replica. With two replicas, I can't login as either an admin or as a regular user.

Can someone provide me with a working version of Keycloak deployment (preferably Helm) that supports multiple replicas?

  jgroups:
    discoveryProtocol: dns.DNS_PING
  jgroups:
    discoveryProtocol: Kubernetes.KUBE_PING
  jgroups:
    discoveryProtocol: JDBC_PING

Stateful set snippet

  apiVersion: v1
  items:
    - apiVersion: apps/v1
      kind: StatefulSet
      metadata:
       ...
        labels:
          app.kubernetes.io/managed-by: Helm
          app.kubernetes.io/name: keycloak
          helm.sh/chart: keycloak-7.5.0
        name: ...
        namespace: default

      spec:
        podManagementPolicy: Parallel
        replicas: 2
        revisionHistoryLimit: 10
        ...
            containers:
              - command:
                  - /scripts/keycloak.sh
                env:
                  ...
                livenessProbe:
                  failureThreshold: 3
                  httpGet:
                    path: /auth/
                    port: http
                    scheme: HTTP
                  initialDelaySeconds: 300
                  periodSeconds: 10
                  successThreshold: 1
                  timeoutSeconds: 5
                name: keycloak
                ports:
                 ...
                readinessProbe:
                  failureThreshold: 3
                  httpGet:
                    path: /auth/realms/master
                    port: http
                    scheme: HTTP
                  initialDelaySeconds: 30
                  periodSeconds: 10
                  successThreshold: 1
                  timeoutSeconds: 1

                  - name: POSTGRES_DB
                    value: keycloak
                  - name: POSTGRESQL_ENABLE_LDAP
                    value: "no"
                image: docker.io/bitnami/postgresql:12.2.0-debian-10-r91
                imagePullPolicy: IfNotPresent
                livenessProbe:
                  exec:
                    command:
                      - /bin/sh
                      - -c
                      - exec pg_isready -U "keycloak" -d "keycloak" -h 127.0.0.1 -p 5432
                  failureThreshold: 6
                  initialDelaySeconds: 30
                  periodSeconds: 10
                  successThreshold: 1
                  timeoutSeconds: 5
                name: bizmall-postgresql
                ports:
                  - containerPort: 5432
                    name: tcp-postgresql
                    protocol: TCP
                readinessProbe:
                  exec:
                    command:
                      - /bin/sh
                      - -c
                      - -e
                      - |
                        exec pg_isready -U "keycloak" -d "keycloak" -h 127.0.0.1 -p 5432
                        [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ]
                  failureThreshold: 6
                  initialDelaySeconds: 5
                  periodSeconds: 10
                  successThreshold: 1
                  timeoutSeconds: 5
                resources:
                  requests:
                    cpu: 250m
                    memory: 256Mi
                securityContext:
                  runAsUser: 1001
                terminationMessagePath: /dev/termination-log
                terminationMessagePolicy: File
                volumeMounts:
                  - mountPath: /dev/shm
                    name: dshm
                  - mountPath: /bitnami/postgresql
                    name: data
            dnsPolicy: ClusterFirst
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext:
              fsGroup: 1001
            terminationGracePeriodSeconds: 30
-- getITdone
keycloak
kubernetes-helm

1 Answer

5/22/2020

Here’s helm chart for keycloak - https://github.com/codecentric/helm-charts/tree/master/charts/keycloak we are using it do deploy HA mode keycloak with 3 replicas.

-- siddhesh bhasme
Source: StackOverflow