Skip to content

Operational settings for production environments

The package defaults are sized for development, demos, and CI. The Big Bang-tested production topology must be sized for its workload and use independently managed PostgreSQL, Redis or Valkey, and object storage. The package does not deploy these services. Also review the upstream installation requirements.

Existing users of the old bundled services must complete the GitLab 19 migration before upgrading.

External services

PostgreSQL

GitLab 19/chart 10 supports PostgreSQL 17.x only. Configure the main database and a Secret containing the application user’s password:

global:
  psql:
    host: postgresql.example.svc.cluster.local
    port: 5432
    username: gitlab
    database: gitlabhq_production
    password:
      secret: gitlab-database
      key: password

The database must include the GitLab-required extensions documented in the PostgreSQL requirements.

Redis or Valkey

Use a supported standalone Redis or Valkey deployment. Redis Cluster and serverless offerings are not supported.

global:
  redis:
    host: redis.example.svc.cluster.local
    port: 6379
    auth:
      enabled: true
      secret: gitlab-redis
      key: password

Object storage

Use consolidated object storage for Rails features, plus the separate formats required by Registry and Toolbox backup/restore:

global:
  appConfig:
    object_store:
      enabled: true
      proxy_download: true
      connection:
        secret: gitlab-object-storage
        key: rails

upstream:
  registry:
    storage:
      secret: gitlab-registry-storage
      key: config
      redirect:
        disable: true
  gitlab:
    toolbox:
      backups:
        objectStorage:
          backend: s3
          config:
            secret: gitlab-object-storage-s3cmd
            key: config

Each enabled GitLab object type needs a distinct bucket. Registry S3-compatible configuration must use a full endpoint URI and Signature V4 with GitLab 19.

Flux settings

Large installations should increase addons.gitlab.flux.timeout to roughly 30-45 minutes and tune install/upgrade retries for the environment. External service operators and workloads must be Ready before GitLab reconciles.

Resource sizing

Increase webservice, Sidekiq, Gitaly, Registry, database, and object-storage resources based on measured load. The examples in k8s-resources.md show the relevant value paths, but are not production recommendations.

Protect the Rails Secret

If the Rails Secret changes, GitLab can no longer decrypt protected database fields and logs can contain OpenSSL::Cipher::CipherError. Store the Secret in a protected external system and configure a stable name:

global:
  railsSecrets:
    secret: my-gitlab-rails-secret

Back it up separately from the cluster and include restoration of this Secret in disaster-recovery tests.