With GitLab 18.11, Gitaly on Kubernetes is now generally available. Teams that previously had to run Gitaly on separate virtual machines while keeping other GitLab components in Kubernetes can now consolidate everything into a single Kubernetes-managed environment.
Overview
Gitaly is the Git repository storage backend for GitLab. Until now, running GitLab on Kubernetes meant maintaining a hybrid architecture: most components lived in the cluster, but Gitaly required its own VM fleet. This added operational complexity — separate monitoring, separate upgrades, separate scaling.
The GA release eliminates that split. Gitaly can now be deployed as a Kubernetes-native component via the GitLab Helm chart, either as part of a full GitLab installation or as an external service.
Key technical challenges and solutions
Git operations are memory-intensive and their usage patterns are hard to predict. To prevent a single runaway Git process from crashing the entire Gitaly service, Gitaly can be configured to run each Git process inside a dedicated cgroup. If a Git process exceeds its cgroup memory limit and gets terminated, the main Gitaly process remains unaffected.
Making this work in Kubernetes required additional steps. Most Kubernetes clusters use containerd as their container runtime, which until recently only allowed containers to write to cgroupfs in privileged mode. The solution is to mount /sys/fs/cgroup via an init container and make the path writable.
Pod restarts also needed attention. On a VM, Omnibus can upgrade the Gitaly binary in place and reload gracefully by keeping the socket open while swapping out the process. On Kubernetes, when a StatefulSet pod is replaced — due to a Helm upgrade, node drain, or configuration change — the Gitaly pod is stopped and restarted with a hard stop, not a graceful reload. For Gitaly sharded deployments without high-availability, this means downtime.
The fix: making client retries configurable. By configuring Gitaly clients — such as Rails — to retry requests long enough for Gitaly to restart and become available again, users may see slightly higher latency during that window, but requests will ultimately succeed.
Performance benchmarks
GitLab ran benchmarks comparing Gitaly on VMs versus Gitaly on Kubernetes during upgrades. The results:
git clone: 100% success rate on both VM and Kubernetesgit pull: 100% on VM, 99.16% on Kubernetesgit push: 99.66% on VM, 100% on Kubernetes
These numbers are nearly identical. Full 100% success across all operations would require Gitaly Cluster (Praefect), which provides high-availability but does not yet support Kubernetes — that is actively being worked on.
What this means for you
If you're running GitLab in hybrid mode, you can now consolidate your infrastructure by moving Gitaly into the cluster. This eliminates maintaining and monitoring a separate VM fleet alongside your Kubernetes nodes.
If you're adopting GitLab for the first time and already operate software on Kubernetes, you now get a fully Kubernetes-native GitLab deployment via the Helm chart.
Installation
The recommended way to deploy Gitaly on Kubernetes is through the GitLab Helm chart. Before starting, read the Gitaly on Kubernetes documentation, which covers key configuration guidance and helps avoid common pitfalls. Gitaly can be deployed either as part of a full GitLab installation or as an external component.
Bottom line
Gitaly on Kubernetes GA removes a major operational headache for GitLab-on-Kubernetes users. The hybrid VM-plus-cluster era is over, though teams needing high-availability should wait for Gitaly Cluster support, which is still in development.