How to persist user session at keycloak running on kubernetes?

Viewed 1487

After pod restart, all user session data are missing.

But all other data are present after pod restart (ex:- realm, user, realm settings)

keycloak is running with Postgres as persistence storage in a single pod.

enter image description here

below is the deployment file config:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: idms
  namespace: default
  labels:
    app: idms
spec:
  replicas: 1
  selector:
    matchLabels:
      app: idms
  template:
    metadata:
      labels:
        app: idms
    spec:
      containers:
       - name: postgres
         image: registry.prod.srv.da.nsn-rdnet.net/edge/postgres:12.3-alpine
         imagePullPolicy: "IfNotPresent"
         ports:
           - containerPort: 5432
         lifecycle:
            postStart:
              exec:
                command: ["/bin/bash","-c","sleep 5 && PGPASSWORD=$POSTGRES_PASSWORD psql $POSTGRES_DB -U $POSTGRES_USER -c \'CREATE SCHEMA IF NOT EXISTS keycloak;\'"]  
         envFrom:
           - configMapRef:
               name: postgres-config
       - name: keycloak
         image: quay.io/keycloak/keycloak:10.0.1
         env:
          - name: KEYCLOAK_USER
            value: "XXXXXXX"
          - name: KEYCLOAK_PASSWORD
            value: "XXXXXXX"
          - name: REALM
            value: "XXXXXXX"
          - name: PROXY_ADDRESS_FORWARDING
            value: "true"
          - name: DB_VENDOR
            value: "POSTGRES"
          - name: DB_ADDR
            value: "localhost"
          - name: DB_PORT
            value: "5432"
          - name: DB_DATABASE
            value: "postgresdb"
          - name: DB_USER
            value: "xxxxxxxxx"
          - name: DB_PASSWORD
            value: "xxxxxxxxx"
          - name: DB_SCHEMA
            value: "keycloak"    
          - name: KEYCLOAK_IMPORT
            value: "/opt/jboss/keycloak/startup/elements/realm.json"
         volumeMounts:
           - mountPath: /var/lib/postgresql/data
             name: postgredb 
           - mountPath: /opt/jboss/keycloak/startup/elements
             name: elements 
         ports:
          - name: http
            containerPort: 8080
          - name: https
            containerPort: 8443
         readinessProbe:
            httpGet:
              path: /auth/realms/master
              port: 8080
      volumes:
        - name: elements
          configMap:
            name: keycloak-elements
        - name: postgredb
          persistentVolumeClaim:
            claimName: postgres-pv-claim  

can you please let me know, any configuration required to persist user session?

1 Answers

Please take a look at the existing chart.

On High Availability and Clustering section, it shows you that you need to set: CACHE_OWNERS_COUNT to 2 or higher and CACHE_OWNERS_AUTH_SESSIONS_COUNT to 2 or higher.

It's also recommended to use a separate Infinispan cluster if you have a big (more than 1 million from my experience) sessions.

Related