Keycloak on Kubernetes or virtual machines: which route fits your team
If your platform or IT team already runs Kubernetes in production and has people who operate it well, the Keycloak Operator route fits. If you do not have those skills, the server distribution on virtual machines fits better. The Operator gives you declarative Keycloak, KeycloakRealmImport, KeycloakOIDCClient and KeycloakSAMLClient resources and installs through Operator Lifecycle Manager, which Keycloak recommends. That advantage matters when your cluster already has GitOps, admission policy and monitoring in place, because Keycloak then inherits those controls. On virtual machines, you own the process supervision, the TLS setup and the rolling restarts, but you also avoid learning a second control plane. Both routes need an external production database. The Operator does not manage the database, and its ephemeral PostgreSQL pod is for development only, so provisioning, backup and failover of PostgreSQL or another supported database stay with your team either way.
Cluster discovery is the next point to check. By default Keycloak's distributed caches use the jdbc-ping stack, which finds nodes through the database and needs only the --cache-stack option, so the same discovery method works on both routes. The DNS_PING based kubernetes stack is deprecated, so do not design around it. Also review the upgrade limits. The Operator documentation warns that there is no supported downgrade to the previous Keycloak version because of database migration changes, and it strongly recommends manual approval mode for operator updates. A VM deployment has the same schema limit, so plan a database backup before each upgrade and confirm the migration mode you want, whether automatic at startup or manual SQL that a large deployment may prefer. Ask your Keycloak support provider or the Keycloak operator installation guide to confirm the current status of the Helm chart, which is marked experimental.
How the Kubernetes and virtual machine routes compare
This table sets the Keycloak Operator on Kubernetes beside the server distribution on virtual machines, row by row on install method, database ownership, cluster discovery, upgrade control and the skills each route needs. Read each row as a question to answer for your own environment, and treat the Helm chart row as a reason to wait rather than a production choice.
| Factor | Kubernetes with the Keycloak Operator | Virtual machines with the server distribution |
|---|---|---|
| Install method | Operator Lifecycle Manager is the recommended route, with a kubectl kustomization as an alternative. The Operator Helm chart is marked experimental. | Unpack the server distribution and manage startup yourself. The getting started guide treats start-dev as development only. |
| Database responsibility | The Operator does not manage the database. You provision PostgreSQL or another supported database; the ephemeral pod in the basic deployment guide is for development only. | You provision and operate the production database and point Keycloak at it, with the same supported engines. |
| Cluster discovery | Distributed caches default to jdbc-ping, which discovers nodes through the database. The DNS_PING kubernetes stack is deprecated. | The same jdbc-ping default applies, selected with the --cache-stack option. Confirm the stack name for your release in the caching guide. |
| Upgrade control | The Operator documentation strongly recommends manual approval mode for operator updates to avoid unintended automatic upgrades. | You decide when to replace binaries and restart nodes, so upgrade timing is entirely in your change process. |
| Downgrade limits | The Operator offers no option to downgrade to the previous Keycloak version because of database migration changes. | Downgrade is also unsafe once the schema has migrated. Confirm the rollback steps in the upgrading guide before any change. |
| Schema migration | Automatic migration at startup is the default. Manual migration, where you apply the SQL yourself, is suggested for large deployments. | The same two options apply. Choose manual migration early if you expect large schemas or strict change control. |
| Reference architecture | Keycloak's tested configuration and blueprints use Red Hat OpenShift Service on AWS with the Keycloak Operator. | Keycloak can run on virtual machines or bare metal, but the tested blueprints are the OpenShift route. Ask for any VM test evidence you need from your vendor or partner. |
| Platform skills needed | Kubernetes operations, OLM or kubectl, certificate and secret handling, and database operations. Kubernetes itself adds control plane and etcd care. | Linux service management, a supported JDK for the server, load balancing, TLS and database operations. No Kubernetes control plane to run. |
What the Keycloak Operator installs and what it leaves to you
The Keycloak Operator manages Keycloak itself and four custom resources: Keycloak, KeycloakRealmImport, KeycloakOIDCClient and KeycloakSAMLClient. Those resources cover the server, realm imports and client registrations. The Operator is installed through Operator Lifecycle Manager, which the Keycloak documentation recommends, or with a kubectl kustomization. The Operator Helm chart, published as an OCI artifact on Quay, is marked experimental, so a platform team that wants a supported install path should plan around OLM or kubectl and treat the chart as something to test, not to standardize on. Confirm the chart's status in the current Keycloak Operator installation guide before you write it into a runbook.
The Operator does not manage the database. You provision, back up, patch and size PostgreSQL, MariaDB, SQL Server, Oracle or another supported database yourself, and you point Keycloak at it. The ephemeral PostgreSQL pod in the Operator basic deployment guide exists for development only, so any production design needs a managed or separately operated database with its own backup, restore and failover plan. Database high availability is also a precondition for the clustered designs Keycloak documents, which assume synchronous replication. Ask your database team who owns that database, its recovery objectives and its patching window before the Keycloak chart or manifest is approved.
The Operator also does not reconcile multiple Keycloak versions in one cluster, and its upgrade notes state there is no option to downgrade to the previous Keycloak version because of database migration changes. Treat each Keycloak upgrade as one-way: take a verified database backup, test the new minor release in a non-production realm copy, and keep manual approval mode for Operator updates, which the documentation strongly recommends. A virtual machine deployment of the server distribution, which requires OpenJDK 25, gives you the same database constraint but lets you control the Java runtime and the rollout order directly, so the cluster route carries more of the upgrade risk to plan for.
How each route is built and how nodes find each other
Both routes run the same Keycloak server, so the differences sit in what you install, how nodes discover each other and which high availability design you build. Read the four components below together, because the database and the replication behavior it needs apply to every route.
Operator-managed pods on Kubernetes
The Keycloak Operator manages Keycloak, KeycloakRealmImport, KeycloakOIDCClient and KeycloakSAMLClient custom resources, so the pods, their configuration and realm objects are declared in the cluster. The Operator does not manage the database, which you must provision yourself, and the ephemeral PostgreSQL pod in the basic deployment guide is for development only. Check who owns the database, its backups and its failover before you treat the cluster as production-ready.
Server distribution on virtual machines
Running from the server distribution requires OpenJDK 25, and you manage the service unit, TLS certificates, the admin password and the load balancer yourself. The getting started guide treats start-dev as development mode and lists a production database, TLS certificates and a secure admin password as steps before production. Your team owns patching the operating system and the Java runtime alongside every Keycloak upgrade.
jdbc-ping discovery as the shared default
By default, Keycloak's distributed caches use the jdbc-ping stack, which finds cluster nodes through the database and needs no setting beyond the cache stack option. The DNS_PING based kubernetes stack is deprecated, so do not design new clusters around it. Both routes therefore depend on the same database for membership, which makes database reachability and its failover behavior a shared risk to test in each route.
Single-cluster high availability across zones
A single cluster can be spread across availability zones, which keeps one Keycloak deployment and one database. This design needs a synchronously replicated database, and latency between zones affects both the database and the cache. Keycloak documents this for virtual machines and bare metal, but its tested configuration and blueprints use Red Hat OpenShift Service on AWS with the Operator, so confirm which sizing your own environment has been proven against.
Multi-cluster v2 and deprecated v1
Multi-cluster v2 links independent sites without an external Infinispan cluster, while the deprecated v1 design used a separate Infinispan cluster per site and should be migrated away from. Both supported designs need a synchronously replicated database, so a second site raises the database requirement as well as the operating effort. Ask your team whether two sites justify this design or whether a single cluster across zones meets the recovery goal.
Upgrades, downgrades and why manual approval matters
The first decision is who controls when Keycloak changes. The Keycloak Operator documentation strongly recommends manual approval mode for operator updates, because an automatic upgrade can move your identity provider to a new version without a change window, a rehearsal or a rollback plan. On Kubernetes, keep the Operator subscription in manual approval so each Keycloak version is a deliberate change that someone reviews against the release notes and the upgrading guide before it reaches production.
Keycloak migrates its database schema automatically at startup by default. That is convenient in development but risky for production, because the schema change happens as the new pod starts. For large deployments, the upgrading guide suggests manual migration, where your DBA or platform team applies the SQL themselves and reviews it first. Be aware that the Operator's OLM upgrade notes warn there is no option to downgrade to the previous Keycloak version because of database migration changes. Your only rollback is a restore of the database taken before the upgrade, so confirm that backups are tested and that the restore path is documented before you begin. The same caution applies on virtual machines running the server distribution, since the database is shared by both routes.
Keycloak plans four minor releases a year and a major release every two to three years, and since Keycloak 26.0 breaking changes in a minor release are opt-in. Plan a recurring upgrade cadence with a test environment that mirrors production. Keep in mind that the Kubernetes cluster adds its own upgrade cycle: Kubernetes ships about three minor releases per year, the project maintains the three most recent minor versions, and kube-apiserver must be upgraded one minor version at a time before the other control plane components and kubelets. Schedule Keycloak and cluster upgrades separately, and confirm with your platform team which Keycloak release your target Kubernetes minor version supports before you move either one.
Which route fits which team situation
A team that already runs Kubernetes, manages manifests through GitOps and has operated custom resources gets the most from the Keycloak Operator. The Operator manages Keycloak, KeycloakRealmImport, KeycloakOIDCClient and KeycloakSAMLClient resources, so realm clients can sit in the same pipeline as application configuration. This matters when the platform team already owns cluster lifecycle, admission control and monitoring. The gaps stay with you: the Operator does not manage the database, and the ephemeral PostgreSQL pod in the basic deployment guide is for development only.
- Operator lifecycle: Install through Operator Lifecycle Manager with manual approval mode, which the Operator documentation strongly recommends, so each upgrade passes through your change process.
- Database: Provision a production database outside the pod lifecycle, with its own backups, and with synchronous replication if you plan a multi-site high availability design.
- TLS and secrets: Issue certificates through your certificate manager and keep the admin password out of Git. Kubernetes Secrets are stored unencrypted in etcd by default, so enable encryption at rest.
- Cache discovery: The default jdbc-ping stack needs no extra configuration beyond
--cache-stack. The DNS_PING based kubernetes stack is deprecated, so avoid building new automation around it. - No version mixing or downgrade: The Operator cannot reconcile multiple Keycloak versions in one cluster and documents no downgrade path after database migration, so plan restores from backup for failed releases.
Check that your GitOps tooling can hold these custom resources and that your Kubernetes version sits inside the current support window.
A team that runs virtual machines for other services but has no Kubernetes control plane to operate can run Keycloak from the server distribution. The main advantage is that no cluster layer is added. The team manages a Java service, a load balancer and a database with tools it already uses. This matters when Kubernetes would be a new skill set rather than a capability the team already has. The trade-off is that every operational task the Operator would automate becomes a runbook you write and maintain.
- Runtime: Install OpenJDK 25 and run the server from the zip distribution. The getting started guide treats
start-devas a development mode and lists a production database, TLS certificates and a secure admin password as steps before production. - Clustering: Nodes discover each other through the database by default (jdbc-ping), so nodes on separate VMs need the
--cache-stacksetting and a shared database, not a separate discovery service. - Database: Provision a supported engine such as PostgreSQL 14 to 18. You own backups and failover, and both supported multi-site designs need a synchronously replicated database.
- TLS and admin access: Create and rotate TLS certificates and the admin credential through your configuration management, since no operator handles those tasks for you.
- Patch process: Schedule minor and patch upgrades yourself. Keycloak migrates the schema at startup by default, so rehearse upgrades on a copy, and consider manual migration for large deployments.
Confirm that your existing OS patching, configuration management and backup routines cover both the Keycloak nodes and the database before you commit to this route.
A team already standardized on OpenShift can run the Operator on a platform it supports, and Keycloak's tested configuration and blueprints use Red Hat OpenShift Service on AWS with the Operator. The advantage is a documented starting point that matches the platform. This matters when the team already has OpenShift skills and support contracts. Before choosing, confirm which build your subscription covers, because Red Hat build of Keycloak is a separate supported distribution based on the open source project.
- Tested blueprint: Starting from the documented OpenShift Service on AWS configuration reduces guesswork on sizing and networking, but your own environment still needs its own load and failover tests.
- Build choice: Decide between upstream Keycloak and Red Hat build of Keycloak. Red Hat's product page showed version 26.6 as its latest, so check version alignment before moving an existing deployment.
- Database: Do not assume the platform provides a production database. The Operator does not manage one, so provision and back up a supported engine and agree on ownership with your database team.
- Certificates and routing: Confirm how TLS terminates at the route and whether traffic is re-encrypted to Keycloak, and who renews the certificates.
- Upgrade gates: Keep OLM on manual approval. The Operator documents no downgrade path, so treat each Keycloak minor release as a change that needs a tested restore plan.
Ask your Red Hat account team which Keycloak build and version your subscription covers before the design is fixed.
What each route asks your team to operate
Who is responsible for Keycloak database backups on Kubernetes?
Your team is responsible for the database, not the Operator. The Keycloak Operator does not manage the database, so you must provision it yourself, and the ephemeral PostgreSQL pod in the basic deployment guide is for development only. Backups, point-in-time recovery and restore drills belong to whoever runs your production database service, whether that is a managed PostgreSQL offering or a database team in your data center. On virtual machines the same duty exists, but it sits next to the Keycloak host instead of inside a cluster. Ask who owns the database backup schedule, the restore test cadence and the recovery time target before you pick a route. Those answers usually cost more to get right than the Keycloak install itself.
What does etcd quorum mean for a Keycloak Kubernetes cluster?
etcd quorum means the control plane keeps working only while a majority of its members agree. Kubernetes documentation says etcd should run with an odd number of members and recommends a five-member cluster in production, so a failed member can be lost without losing the majority. Keycloak does not run inside etcd, but every Keycloak pod depends on the API server, and the API server depends on etcd. An unhealthy control plane can stop scheduling, rolling upgrades and Operator reconciliation even when Keycloak pods are still serving logins. Your platform team must own etcd health checks, member replacement and the kubeadm topology you choose, either stacked control plane nodes or an external etcd cluster. kubeadm's high availability guide describes both topologies and asks for at least three control plane nodes behind a TCP load balancer on port 6443.
Are Kubernetes Secrets encrypted by default for Keycloak credentials?
No. Kubernetes stores Secrets unencrypted in etcd by default, according to its Secrets good practices page. Keycloak admin passwords, database credentials and client secrets that you place in Kubernetes Secrets are therefore readable by anyone who can read the etcd data or the Secret objects. Your team should enable encryption at rest for etcd, restrict list and watch access with least-privilege RBAC, and consider an external store through the Secrets Store CSI Driver. Keycloak's own production guidance also expects a secure admin password and TLS certificates before go-live. Confirm with your cluster provider how encryption keys are stored and rotated, because a managed control plane may handle part of this for you while a self-managed cluster does not.
Which Pod Security Standards level should a Keycloak namespace use?
Start with the restricted level for the Keycloak namespace if your cluster enforces Pod Security Standards, then document any exception you need. Kubernetes defines three profiles, privileged, baseline and restricted, and the restricted profile is the strictest. A Keycloak pod normally runs as a non-root user, drops unneeded capabilities and avoids host networking, so it can usually meet the restricted profile after you test it in staging. Check the Keycloak image and any sidecars your team adds, such as metrics exporters or service mesh proxies, because each one can need an exception. Ask your security team which level applies to production and whether admission control is enforced or only audited.
What does the virtual machine route require for OS patching?
On virtual machines, your team patches the operating system, the Java runtime and the Keycloak distribution itself. Running Keycloak from the server distribution requires OpenJDK 25, so someone must track JDK security updates and test them before rollout. Keycloak's distribution is a zip you unpack and manage, which means your configuration management or change process must replace the binaries, run the database migration and restart nodes in a controlled order. Patch windows also affect load balancer draining and cache state across nodes. Ask whether your standard VM patch cadence can include a Keycloak restart and a rollback plan, because Keycloak's Operator guidance warns against automatic upgrades and the same caution applies to scripted VM updates.
How do you manage the Java runtime for Keycloak on virtual machines?
You manage the JDK lifecycle yourself on virtual machines. The zip distribution requires OpenJDK 25, so you must install that runtime, pin it, and plan its replacement when a newer release is needed. Keep the JVM version, Keycloak version and operating system patch level recorded together in your change records so a rollback can restore a known pair. Monitor JVM memory and garbage collection through the metrics Keycloak exposes, and size heap settings against the database and cache behavior you observe. Ask your team who owns JDK updates, whether a vendor or internal image supplies the runtime, and how long a runtime upgrade takes in your change window.
Which load balancer settings matter for Keycloak clustering on virtual machines?
The load balancer must send users to healthy Keycloak nodes, handle TLS termination according to your design and keep sessions consistent with the cluster. On virtual machines, the front door is usually a load balancer you configure yourself, while on Kubernetes it is often an ingress or service that the platform manages. Keycloak's single-cluster high availability guide notes that it can run on virtual machines or bare metal, but its tested configuration uses OpenShift with the Operator, so you carry more of the design. Confirm health check paths, timeouts, sticky session behavior and the external hostname that Keycloak advertises. Use your own test plan to prove failover, because the vendor's blueprints describe a different platform.
Where should monitoring for Keycloak start on either route?
Start with Keycloak's metrics documentation, which describes how to expose metrics for observability tools. Whichever route you choose, collect the Keycloak metrics, the database health and the Kubernetes or VM host signals in one dashboard, then set alerts on login failures, database connection errors and node restarts. On Kubernetes, add control plane and etcd signals as well, because a degraded cluster can hide Keycloak problems. On virtual machines, add disk, memory and JVM signals per host. Ask your monitoring team which tool will ingest the metrics and who receives the alerts at night.
How does Keycloak upgrade on Kubernetes compared with virtual machines?
On both routes, the upgrade path matters more than the platform. The Keycloak Operator documentation strongly recommends manual approval mode for operator updates, and its OLM notes warn there is no option to downgrade to the previous Keycloak version because of database migration changes. Keycloak migrates its schema automatically at startup by default, but it also supports manual migration, which the upgrading guide suggests for large deployments. On virtual machines you control the same decision directly. In both cases, take a database backup before each upgrade, rehearse in a non-production environment and confirm the Keycloak release notes for breaking changes before you approve the update.
What drives the cost of each route
The Kubernetes route moves cost into components that are easy to undercount. Your infrastructure bill covers the worker nodes that run Keycloak pods, the production database that the Keycloak Operator does not provision for you, and the control plane. Kubernetes runs etcd with an odd number of members, and the kubeadm high availability guide describes stacked and external etcd topologies with at least three control plane nodes, so the control plane alone is a material line item if you build it yourself. On top of infrastructure, you pay for skills: someone must operate the cluster, the Operator, the database and the ingress path. On the virtual machine route, the bill is smaller in platform components but heavier in host work: VM capacity, the operating system, patching, and Java maintenance, since the server distribution requires OpenJDK 25. Managed Kubernetes or a managed database can shift some of these costs to a cloud provider, and you should confirm what that provider covers.
Most cost is recurring rather than one-time. One-time work includes architecture and design, the first database and TLS setup, hardening, and any migration from an existing identity system. Recurring work includes Keycloak upgrades, which follow a release cadence of four minor releases a year according to the project, Kubernetes minor upgrades that you must perform one minor version at a time, operating system and Java patching, database operations such as backups and capacity, and on-call coverage for the login path. Because the Operator documentation strongly recommends manual approval mode for operator updates, someone must review each change, and the upgrading guide's option to run schema migration manually for large deployments adds a planned step to every upgrade. Note also that the Operator does not support downgrading to the previous Keycloak version, so a failed upgrade is costly to reverse. Budget for test environments that match production well enough to rehearse these steps.
When you request a quote, DeployOpen does not publish a price list. A quote follows from a written, fixed scope agreed before work starts. Ask for the scope to state the route chosen, the Kubernetes distribution and whether the control plane is yours or managed, the database engine and who provisions and backs it up, the number of realms and environments, the high availability design, and whether the Keycloak Operator or the server distribution is used. Ask which items are one-time deliverables and which are retainer work for upgrades, patching and continuous testing, what each deliverable produces, and which costs stay with your own infrastructure team. Confirm with your cloud or data center provider the node, storage and load balancer charges, and with your database vendor the licensing terms for your chosen engine.
Common questions about running Keycloak on Kubernetes or VMs
Can a team with no Kubernetes skills run Keycloak on Kubernetes?
Not safely without someone who can operate a cluster. The Keycloak Operator adds Keycloak, realm import and client custom resources on top of a cluster you already run, so the cluster itself, its upgrades, its ingress, its storage and its backup of etcd all remain your responsibility. The Kubernetes project maintains only the three most recent minor releases, so a cluster needs regular upgrades in its own right. If the team has no cluster staff, the more direct route is usually the server distribution on virtual machines, where the skills are general Linux administration, a JDK, a load balancer and a production database. Confirm which skills your platform team already has before choosing.
Is the experimental Keycloak Operator Helm chart safe for production?
The Keycloak Operator documentation marks its Helm chart as experimental, so treat it as a non-production option unless you accept that status in writing and test it against your own change process. The documented installation paths are Operator Lifecycle Manager, which Keycloak recommends, and a kubectl kustomization install. Whichever path you choose, the Operator documentation strongly recommends manual approval mode for operator updates so that upgrades do not happen unintentionally. Ask any implementation partner to state which install method they will support and how that support is documented.
Does the Keycloak Operator manage the database for me?
No. The Keycloak Operator does not manage the database, so you provision a supported production database yourself, such as PostgreSQL 14 to 18 or another database on the Keycloak list. The ephemeral PostgreSQL pod shown in the Keycloak Operator basic deployment guide is for development only. Your team owns backups, point-in-time recovery, patching, failover and sizing for that database. Keycloak's high availability designs also require a synchronously replicated database, so the database architecture shapes the whole deployment. Ask for the database design and recovery procedure as a separate deliverable in any scope.
How long does a Keycloak upgrade take, and what does it need?
The time depends on your realm size, your database, the number of nodes and how many versions you cross, and no fixed duration is supplied here. Keycloak migrates its database schema automatically at startup by default, and it also supports manual migration, which the upgrading guide suggests for large deployments. Keycloak plans four minor releases a year, so an upgrade calendar is a recurring cost. Ask for a timed rehearsal in a non-production copy of your database, a rollback plan that accounts for the no-downgrade limit, and the change window your business requires.
Can I downgrade Keycloak after an upgrade?
Plan on no. The Keycloak Operator's OLM upgrade notes warn that there is no option to downgrade to the previous Keycloak version because of database migration changes. The same logic applies to any deployment where the schema has been migrated, so your rollback plan should rely on restoring a database backup taken before the upgrade and redeploying the matching older image or package. Because automatic migration runs at startup by default, decide before the upgrade whether you will use manual migration so that the SQL can be reviewed and rehearsed first.
What skills does the team need for each deployment route?
Both routes need identity administration, TLS, a production database and an upgrade process. The Kubernetes route adds cluster operations: installing and upgrading the cluster, the Operator and its custom resources, persistent storage, ingress, network policy, pod security settings and etcd backup, which Kubernetes documents as requiring a backup plan. The virtual machine route adds a supported Java runtime, which the zip distribution guide says is OpenJDK 25, service management, and a load balancer with node discovery through the database. Cluster discovery differs too: the default jdbc-ping stack needs only the --cache-stack option, while the DNS_PING based kubernetes stack is deprecated. Confirm each skill against your current staff.
What should I ask a consultant to scope for a Keycloak deployment?
DeployOpen plans, implements, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms in your own infrastructure, and most engagements are fixed-scope with scope and deliverables agreed in writing before work starts. For this decision, ask the consultant to scope the route choice, the database design and recovery, cluster discovery and the upgrade and rollback procedure, plus hardening and documentation. Ask whether ongoing upgrades and testing are covered by a retainer. DeployOpen does not publish a price list, so ask for a quote that follows from the written scope.
How DeployOpen scopes and delivers a Keycloak deployment
DeployOpen is a Chainscore Labs company that plans, implements, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure. For Keycloak, we start by agreeing which route fits your environment, then deliver the database, cluster or host setup, realm configuration, upgrade process and handover material in a fixed, written scope.
How we scope
- We confirm whether your team will run the Keycloak Operator on Kubernetes or the server distribution on virtual machines.
- The written scope lists the external database, TLS, cluster discovery settings and the upgrade method agreed for your environment.
- We record which platform skills your team already has and which must come from the engagement or a retainer.
How we build
- We provision the production database yourself or in your cloud account, since the Operator does not manage it.
- We configure cluster discovery and cache settings for your chosen route, then test failover between nodes.
- We set up realm configuration, identity brokering or user federation and the upgrade path, including manual approval for operator updates.
How we hand over
- You receive runbooks covering install, upgrade, backup and restore steps for the route you chose.
- Documentation records the database migration approach, the no-downgrade limits and the rollback plan agreed in scope.
- We walk your operators through the running system so your team can operate it without us.
How we support
- Ongoing support, upgrades and continuous testing are available as a retainer after handover.
- Retainers can cover reviewing Keycloak minor release notes and planning upgrades against your change calendar.
- Independent auditors and certification bodies, not DeployOpen, issue any compliance attestations for the environment.

