TYPO3 Kubernetes — TYPO3 that no longer clings to a single server.
TYPO3 on Kubernetes means: cluster operations with declarative configuration, horizontal scaling of frontend pods, separate worker pools for cron and indexer jobs, multi-AZ failover and mTLS between services. The CMS stays TYPO3 — the operations layer becomes a platform.
Why TYPO3 on Kubernetes — and when it pays off.
A single LAMP server, a rented managed-TYPO3 slot at a hoster, a Docker container behind NGINX — that carries many German Mittelstand projects. Until one of three limits is reached: the system has to survive a load spike (press release, campaign, migration wave), compliance demands provable separation of workloads and data, or the next TYPO3 major release makes an in-place upgrade risky.
Kubernetes solves these three problems — not by adding complexity, but through declarative repeatability. Every deployment is a Git commit. Every rollback is one line. Every scaling event happens without anyone opening SSH. Once you have set this up cleanly, you operate TYPO3 fundamentally differently: more safety, fewer weekend interventions, and no “one server, one human” bottleneck.
We have been running TYPO3 clusters on Kubernetes in production for more than five years — from single-tenant setups to multi-site platforms with separate worker pools. Our own open-source extensions grew out of the pain points we found along the way; they let TYPO3 run more cleanly and performantly in the cluster than is possible with the core alone.
Six core capabilities a TYPO3 cluster brings.
These six building blocks decide whether a TYPO3 cluster actually carries weight — or whether it is only a Kubernetes deployment on paper. Five address the classical operations pitfalls; the sixth, reproducible deployments with rollback, is the discipline that keeps the whole system standing through updates and major version changes.
Horizontal scaling
Multiple TYPO3 frontend pods serve requests in parallel. A Horizontal Pod Autoscaler reacts to CPU or custom metrics and spins up additional pods when a press release goes viral or a campaign takes off. No more manual server upscaling.
Persistent storage for fileadmin and uploads
TYPO3 writes uploads to fileadmin — in a cluster that does not work without shared storage. PersistentVolumeClaims with an S3-compatible backend, CSI driver or ReadWriteMany NFS are the three common paths. Anyone who ignores this ends up with an empty fileadmin on the first pod restart.
Job scheduling for cron and indexer
TYPO3 has background jobs: scheduler tasks, Solr indexing, sitemap generation, cache warming, cleanup jobs. On Kubernetes these run as CronJob or as separate worker pods, decoupled from the frontend pods. An indexer run no longer brings the frontend to its knees.
Observability for TYPO3 workloads
Prometheus metrics, structured logs in a central stack (Loki, ELK), traces via OpenTelemetry. Anyone who knows which pod produced which 502 error and when no longer debugs with SSH and tail — but with a query over the last 30 days.
Security defaults & mTLS mesh
NetworkPolicies separate workloads from each other, Pod Security Standards set Restricted as default, a service mesh (Linkerd or Istio) encrypts service-to-service connections with mTLS. In our setups, certificate management runs through cert-manager as the rotation layer, binding the appropriate issuer per platform (private CA on-prem, Vault, AWS Private CA, Azure Key Vault) — we extend the same line into database and cache connections (client certificates against MariaDB/Postgres and Redis/Valkey), not only to the pod sidecar. Secrets come from external stores (SOPS+age, Vault, KMS), never baked into the image.
Reproducible deployments & rollback
Reproducible deployments and clean rollbacks exist without Kubernetes too — classical DevOps pipelines with Ansible, Capistrano or Deployer do this as well. What a cluster specifically contributes: rolling updates and readiness probes as platform primitives, declarative Helm/Kustomize packages as the single source of truth, ephemeral pods that enforce stateless discipline, persistent-volume snapshots as restore anchors, dev/staging/prod parity through the same manifests. The discipline is not new — the cluster only makes it unavoidable.
Related architectures that TYPO3 Kubernetes is combined with.
Where TYPO3 clusters typically dock — or which architectures it pays to move toward Kubernetes from.
TYPO3 (classical)
Existing TYPO3 installations on LAMP or managed hosting are the typical starting point. The cluster path does not mean swapping the CMS — only the operating environment. TYPO3 itself stays one-to-one.
Docker / Compose
If you already work with Docker containers, the main work — a runnable TYPO3 image — is done. The step to Kubernetes is then mainly migrating the Compose file into manifests or a Helm chart.
OpenShift
Red Hat OpenShift is a Kubernetes distribution with more strongly built-in security defaults (SCC, SELinux) and integrated CI/CD. For Mittelstand customers who already have RHEL and a Red Hat subscription, often the more pragmatic cluster entry point.
Managed Kubernetes (EKS, AKS, GKE, IONOS)
If you do not want to operate the cluster yourself, control plane and workers run at a hyperscaler or European provider. For Mittelstand setups, a European provider (IONOS, OVHcloud, STACKIT) is often the right call for data location and contract jurisdiction.
Bare-metal Kubernetes
Own hardware in your own data center, Kubernetes cluster with kubeadm or Talos. For companies with particularly high sovereignty requirements or an existing data center — more operational effort, but full control down to the metal.
AI-Ready platforms
AI-Ready CMS and cluster operations address different axes — visibility in generative search and agent compatibility on one side, load, availability and tenant separation on the other. If all you want is AI-ready, you do not need a cluster; AI-Ready CMS runs fine on a single server. Where both requirements meet in the same customer, the AI layer benefits from the same discipline set as the cluster (deployments, restore tests, multi-site separation) — a natural bracket, not a technical prerequisite.
Related open-source packages for TYPO3 in the cluster.
These packages of ours address the typical cluster pitfalls — from shared storage to secret handling — and grew out of five years of TYPO3 cluster operations. They make cluster operations more performant and simpler than is possible with the TYPO3 core alone: fewer configuration workarounds, less custom-built glue code, fewer edge cases in patch management.
cluster-file-backend
Storage backend for TYPO3 fileadmin in the cluster — solves exactly the persistent-storage problem every Kubernetes deployment brings.
frankenphp
Modern PHP runtime with worker mode, excellent for container operations in the cluster — lower startup cost, better pod utilisation.
keyvalue-store
Redis/Valkey integration for TYPO3 — central cache and session storage in the cluster, instead of each pod building its own caching.
typo3-config
Fluent config API for caching, logging, secrets, TLS/mTLS — clean, reproducible TYPO3 configuration for multi-pod setups.
secret-resolver
Bind secrets from external stores — no secrets in the image, no secrets in Git, compatible with SOPS, Vault and Kubernetes Secrets.
Frequently asked questions about TYPO3 on Kubernetes.
The questions that always come up in technical first conversations — on scope, risks and where the boundary sits.
Do I really need Kubernetes for a small TYPO3 site?+
No. For a 50-page brochure site with one editor, good managed TYPO3 hosting is usually enough. Kubernetes becomes interesting at one of three points: regular load spikes, several editorial tenants in one setup, or compliance requirements that demand provable separation.
What makes TYPO3 cluster operations different from other web apps?+
Three idiosyncrasies: fileadmin needs shared storage, scheduler jobs must not run in parallel on the same pods (otherwise duplicate dispatch), and the install-tool endpoint must be cut off hard at the network level. Anyone who runs a TYPO3 cluster like any old PHP app is building in their own follow-up bugs.
How high is the initial effort?+
For a standard TYPO3 site on a clean cluster: typically four to eight weeks, including Helm chart, persistent storage, CI/CD pipeline, monitoring stack and rollback drills. Anyone who does this ad hoc is faster; anyone who does it sustainably — so that the second site goes up in a fraction of the time — invests more once.
Are the costs higher than classical hosting?+
For a single site, often yes. For three or more sites that share cluster, monitoring and CI/CD, the ratio tips the other way. Plus: fewer person-hours for routine updates, faster rollback on errors, lower outage risk — things that rarely show up in the classical hosting TCO.
Which TYPO3 versions can run on Kubernetes?+
Practically all from TYPO3 9 LTS upwards, reasonably from 11 LTS, recommended 12/13 LTS. Older versions make container builds and storage setup more involved because many setups still make direct filesystem assumptions. An upgrade path alongside the cluster migration is often the cleaner solution.
What does getting started with Moselwal look like?+
First conversation about current infrastructure, load profile and compliance requirements. From that, a concrete cluster sketch: which provider, which storage strategy, which CI/CD pipeline, which monitoring building blocks. Implementation iteratively — staging first, then production, with a rollback drill before go-live.
How does TYPO3 cluster operations relate to AI-Ready platforms?+
Not necessarily — the two topics address different axes. AI-Ready CMS means: structured content delivery, retrieval-/agent-compatible endpoints, a clean data model. That works on a single server too. Cluster operations means: load, availability, tenant separation, reproducible deployments. They meet only where the same customer has to be visible in generative search and also absorb load spikes or availability requirements. In that case the cluster discipline feeds into the AI use cases — but it is not the reason to become AI-ready and not a prerequisite for it.
Which open-source building blocks do you actually use in the cluster?+
From our own stack: cluster-file-backend for shared storage of fileadmin (S3-compatible or object storage), frankenphp as PHP runtime in worker mode (lower startup cost per pod), keyvalue-store for Redis/Valkey cache and session sharing, typo3-config as fluent config API for caching, logging and TLS/mTLS, secret-resolver for SOPS/Vault/KMS integration. All open under MIT, all in production on our own platform — no black-box delivery. Details in the “Related open-source packages” section above.
What stays stateful in TYPO3, what can run stateless?+
Stateless: frontend pods, scheduler workers, indexer pods, FrankenPHP workers — you can scale them up, roll them and throw them away at will. Stateful: the database (MariaDB/MySQL/Postgres in a StatefulSet or as managed service), the file storage (S3/object store or ReadWriteMany), the session/cache store (Redis/Valkey), the Solr or OpenSearch index. Rule of thumb: anything that persists data sits outside the application deployment — then the pod pool can actually run stateless.
How do you connect object storage (S3, MinIO) to TYPO3 fileadmin so that renditions are not regenerated on every pod restart?+
Two paths. First: an FAL driver with an S3-compatible backend (via our cluster-file-backend extension or an S3 FAL driver) that holds fileadmin and processed files in the bucket — renditions land there too and persist across pod restarts. Second, for legacy setups that are not migrated: a ReadWriteMany volume (NFS or CephFS) with a shared processed-file path. Important in both paths: a CDN in front (CloudFront, Fastly or a European alternative) so the bucket does not become the render machine, and identical ProcessedFileRepository configuration in every pod so the same cache keys are formed.
Where does session handling run in a multi-pod TYPO3 — cookies, sticky sessions or central Redis?+
In the frontend, TYPO3 session handling via cookies and FE user hash stays stateless enough for every pod to resolve them. As soon as carts, multi-step forms or authenticated sessions enter the picture, the session store belongs in a central backend — Redis or Valkey via the keyvalue-store extension, with AUTH and TLS between pod and store. Sticky sessions at the ingress are a crutch that tips on the first pod reschedule; we don’t recommend them. Backend session handling runs through the separate worker pool and should share the same store.
When is Redis or Valkey in the cluster mandatory, when is the local TYPO3 cache enough?+
We deploy Redis or Valkey practically always once TYPO3 is under real load — regardless of whether one or several pods are running. The primary reason is database relief and cache speed: the typo3_cache_* tables quickly become noticeable load in MySQL or Postgres because every cache read runs as an SQL query instead of coming from RAM. An in-memory store takes that pressure off and speeds up the cache paths significantly. In a multi-pod setup, a second reason joins: a central cache store is cleaner than a file cache on a ReadWriteMany volume because invalidations are atomic rather than going through filesystem locks. Valkey is the default choice since the Redis license switch to SSPL — protocol-compatible, BSD-3-Clause-licensed, available as a managed service at European providers.
How does mTLS work concretely in a TYPO3 Kubernetes cluster — service mesh, database, cache, ingress?+
We wire mTLS on four layers, because any single one would otherwise be the weakest link:
- Pod-to-pod via a service mesh — Linkerd in most setups (lightweight sidecar, mTLS by default), Istio when the platform is already there. Identity comes from the ServiceAccount, not from the pod IP.
- Pod-to-database with client certificates against MariaDB or Postgres. No password over the wire, identity via the certificate — once the certificate workload is gone, so is the connection.
- Pod-to-cache with TLS plus client auth against Redis/Valkey.
AUTHalone is not enough; the certificate moves identity into the same layer as every other connection. - Ingress-to-origin on the reverse-proxy leg (e.g. Caddy to FrankenPHP). HTTPS at the edge is standard, but between ingress controller and pod many setups still run cleartext — we consistently close that.
Certificates come from an internal CA, orchestrated through cert-manager, which binds the appropriate issuer per platform — private CA on-prem, HashiCorp Vault, AWS Private CA, Azure Key Vault. Automatic rotation typically every 24 hours. The typo3-config extension takes the certificates from the pod volume and mounts them cleanly onto the TLS endpoints of database and cache connections, so TYPO3 itself sees nothing other than the path.
Upsides: no cleartext credentials in the image, no pod identity via IP addresses, NIS-2 and sector compliance arguments on the encryption axis nearly for free. The cost: observability gets more expensive (mesh sidecar adds latency and tracing overhead), debugging needs mTLS-aware tools (linkerd tap, istioctl proxy-config). Anyone who has once lived with cleartext pod traffic does not want to go back.
How do you actually test TYPO3 cluster backups — restore drill, RPO and RTO?+
A backup without a documented restore drill is hope. Practice: daily database dumps plus persistent-volume snapshots (Velero covers both Kubernetes-natively), weekly object-storage versioning, a quarterly restore drill in an isolated namespace with smoke test. Documented RPO (typically 1 hour for standard setups, 15 minutes for e-commerce) and RTO (4 hours standard, 1 hour for critical). Anyone who does not rehearse the restore once per quarter does not know in the moment of truth whether it works — and that is the moment of truth.
What does a multi-region TYPO3 setup look like when the database write path must stay in one region?+
Standard pattern: one primary region with the write database and editorial backend, one or more read regions with read replicas or geographically distributed frontend pods that only read. CDN in front (CloudFlare, Fastly or European providers like OVHcloud) so cache hits terminate regionally. File storage either centralised with CDN pull-through or via cross-region replication of the object store. Editorial write operations emit cache-tag invalidations that are pushed to all regions through the CDN API. Failover to another region means promoting a replica to primary, not multi-master — that avoids conflict fields in the TYPO3 data model.
How do you migrate a cluster between two providers (e.g. IONOS to STACKIT) without downtime?+
Four phases. First: build the cluster at the target provider, deploy the same Helm charts, attach a test domain, run smoke tests. Second: set up database replication (old primary → new replica, asynchronous or semi-synchronous), mirror file storage (object-store replication or rsync sync phase). Third: a short maintenance window, switch the database to the new primary, point DNS to the new ingress — often a 5- to 15-minute hard cutover. Fourth: the old cluster stays as a rollback anchor for two weeks, then teardown. With container-based charts and an orderly provider reset this is a two- to four-week project, not a quarter.
What does GitOps mean concretely for TYPO3 clusters — ArgoCD or Flux, Helm charts, secret workflows?+
GitOps means: the cluster state lives in the Git repository, a controller (ArgoCD or Flux) continuously reconciles it against the live cluster. For TYPO3 this means: a Helm chart repository plus values files per stage (dev/staging/prod) in the repo, secrets encrypted via SOPS+age or pulled via External Secrets from Vault/KMS — never in cleartext, never in the image. Every change runs through a pull request with code review, every rollback is a Git revert. We use ArgoCD in most setups, Flux where the operator is already established; the choice is usually team preference rather than technically forced.
How do you handle AI crawlers (GPTBot, ClaudeBot, PerplexityBot) so they don’t disrupt the cluster?+
Three levers. First, llms.txt and robots.txt with clear crawl budgets and path whitelists — that addresses the bots that follow the rules. Second, ingress-side rate limiting per user agent (NGINX limit_req with user-agent key, Traefik middleware or Caddy rate-limit) so a runaway crawler does not drain the frontend pool. Third, a separate worker pool for identified AI-crawler traffic via header-based routing — the frontend pool for human users stays untouched, the crawler pool can be scaled or cut off separately. For sensitive paths (install tool, admin endpoints, internal routes) return 404/403 regardless of user agent anyway.
Does your TYPO3 operation carry the next load spike?
First conversation about the current setup, load profile and risks — no sales deck.
Initial assessment within two business days.

![[Translate to English:] Zwei papierdünne Rahmen überlappen sich leicht auf Beton, darunter ein kleiner Wasserspiegel; aus der Nahtstelle zieht ein roter Faden ins Wasser; eine Messinglupe und drei Stempel rahmen die Szene im kühlen Nordlicht.](/fileadmin/_processed_/8/e/csm_27c658d989a988383286ef9d323c2ac3369f683ef7673fb1e23102b8bdb73c90_62476dd972.jpg)