The Deckhouse Code chart is built on the GitLab Helm chart. Values that this page does not list keep the names and the meaning of the upstream chart. The tables below list the values the chart adds under global.codeHelm, the additions under global.psql and global.appConfig, and the upstream defaults the chart changes. The Default column shows the value the chart ships with; — means the value is empty until you set it.
Components the cluster provides
The chart deploys the application and, when registry.enabled is true, the container registry. The cluster provides the components below before the release is installed; the chart does not deploy them:
- an ingress controller, addressed by
global.ingress.classand, when the load balancer is enabled, byglobal.codeHelm.loadbalancer.ingressService; - cert-manager with a ClusterIssuer, used by
global.codeHelm.ingress.tlsandglobal.codeHelm.tls.internal; - PostgreSQL, Redis and an S3-compatible object storage, addressed by
global.psql,global.redisandglobal.appConfig.object_store; - Prometheus Operator and Grafana, when the objects from Monitoring are used;
- GitLab Runner.
The upstream subcharts gitlab-runner, prometheus, certmanager, nginx-ingress, nginx-ingress-geo, haproxy, traefik, kubernetes-ingress, gitlab-zoekt and redis-ha are not part of the chart. Setting their install or enabled key to true, or installCertmanager to true, fails the install.
Secrets created from values
global.codeHelm.externalSecrets creates the Secrets with the credentials of the external services from the values file, in place of Secrets created by hand before the install. Each Secret is named after the release, so several releases can share a namespace.
When registry.enabled is true, the container registry needs a storage Secret from either the registry.storage.s3 block below or registry.storage.secret; when both are absent, the install fails.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.externalSecrets.enabled | boolean | false | Whether the chart creates the Secrets described in this table. When true, registryDockerConfig is required, and either the backup credentials or gitlab.toolbox.backups.objectStorage.config.secret must be set; otherwise the install fails. |
global.codeHelm.externalSecrets.psqlPassword | string | — | Password of the PostgreSQL role from global.psql.username. Creates the Secret <release>-postgres with the key from global.psql.password.key; the release uses this Secret when global.psql.password.secret is not set. |
global.codeHelm.externalSecrets.redisPassword | string | — | Password of the Redis server. Creates the Secret named by global.redis.auth.secret (<release>-redis-secret by default) with the key from global.redis.auth.key. |
global.codeHelm.externalSecrets.redisSentinelPassword | string | — | Password of the Sentinel servers from global.redis.sentinels. Requires global.redis.sentinelAuth.enabled: true; without it the install fails. Creates the Secret <release>-redis-sentinel-secret with the key secret, the name the release reads when global.redis.sentinelAuth.secret is not set; setting both fails the install. |
global.codeHelm.externalSecrets.praefectPassword | string | — | Password of the Praefect PostgreSQL user from global.praefect.psql.user. Requires global.praefect.psql.host; without it the install fails. Creates the Secret named by global.praefect.psql.dbSecret.secret (<release>-praefect-dbsecret by default). |
global.codeHelm.externalSecrets.s3.provider | string | AWS | Name of the storage backend in the object storage connection. Stays AWS for every S3-compatible storage. |
global.codeHelm.externalSecrets.s3.region | string | us-east-1 | Region of the object storage. Required when the s3 block is used. |
global.codeHelm.externalSecrets.s3.aws_access_key_id | string | — | Access key ID of the object storage. Setting it or the secret key activates the s3 block, which creates the Secret <release>-s3-connection with the key connection; global.appConfig.object_store.connection then points to this Secret unless you set it yourself. |
global.codeHelm.externalSecrets.s3.aws_secret_access_key | string | — | Secret access key of the object storage. Required when the s3 block is used. |
global.codeHelm.externalSecrets.s3.endpoint | string | — | URL of the S3 endpoint with the scheme, for example https://storage.example.com. Required when the s3 block is used. |
global.codeHelm.externalSecrets.s3.host | string | — | Host of the S3 endpoint without the scheme, for path-style storages. |
global.codeHelm.externalSecrets.s3.path_style | boolean | false | Whether the bucket name goes into the URL path instead of the host name. |
global.codeHelm.externalSecrets.s3.aws_signature_version | integer | 4 | Version of the request signature the storage accepts. |
global.codeHelm.externalSecrets.backup.aws_access_key_id | string | — | Access key ID of the storage that receives backup archives. Together with the secret key creates the Secret <release>-s3cfg with the key config, which the backup utility reads. The storage may differ from the one in the s3 block. |
global.codeHelm.externalSecrets.backup.aws_secret_access_key | string | — | Secret access key of the backup storage. |
global.codeHelm.externalSecrets.registry.storage.s3.bucket | string | — | Bucket that stores container image layers. Setting it or accesskey activates the block, which creates the Secret <release>-registry-storage-config; the registry reads it without further settings, and registry.storage.secret is then ignored. |
global.codeHelm.externalSecrets.registry.storage.s3.accesskey | string | — | Access key of the registry storage. Required when the block is used. |
global.codeHelm.externalSecrets.registry.storage.s3.secretkey | string | — | Secret key of the registry storage. Required when the block is used. |
global.codeHelm.externalSecrets.registry.storage.s3.region | string | us-east-1 | Region of the registry storage. Required when the block is used. |
global.codeHelm.externalSecrets.registry.storage.s3.regionendpoint | string | — | URL of the registry storage endpoint, for example https://storage.example.com. Required when the block is used. |
global.codeHelm.externalSecrets.registry.storage.s3.v4auth | boolean | true | Whether the registry signs requests with AWS Signature Version 4. |
global.codeHelm.externalSecrets.registry.storage.s3.secure | boolean | true | Whether the registry connects to the storage over HTTPS. |
global.codeHelm.externalSecrets.registry.storage.s3.rootdirectory | string | / | Prefix inside the bucket under which the registry stores its data. |
global.codeHelm.externalSecrets.registry.storage.s3.checksumDisabled | boolean | false | Whether the registry omits checksums from multipart copy requests. Set true for storages that reject checksummed UploadPartCopy requests. |
global.codeHelm.externalSecrets.registry.storage.database.password | string | — | Password of the PostgreSQL user of the registry metadata database. Creates the Secret <release>-registry-database-password with the key password. |
global.codeHelm.externalSecrets.registryDockerConfig | string | — | Base64-encoded .dockerconfigjson with the credentials of the image registry the chart pulls from. Creates the Secret <release>-image-pull-secret of type kubernetes.io/dockerconfigjson. Required when enabled is true. |
Backup storage
global.codeHelm.backup holds the address of the storage that receives backup archives. It is used together with the credentials from global.codeHelm.externalSecrets.backup to build the Secret <release>-s3cfg.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.backup.region | string | us-east-1 | Region of the backup storage. |
global.codeHelm.backup.endpoint | string | http://minio:9000 | URL of the backup storage endpoint. The scheme selects the transport: http:// connects without TLS, https:// with TLS. |
Ingress TLS
global.codeHelm.ingress.tls selects where the certificates of the Ingress objects come from.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.ingress.tls.mode | string | certManager | Source of the Ingress certificates. certManager: the chart creates a cert-manager Certificate for every enabled host, stored in the Secrets <release>-tls (web interface), <release>-registry-tls, <release>-pages-tls and <release>-kas-tls; the install fails when cert-manager is absent or when an ingress.tls.secretName override names another Secret. manual: the chart issues no Ingress certificates. The Ingress of each component uses the Secret named in its ingress.tls.secretName (gitlab.webservice, registry, gitlab.gitlab-pages, gitlab.kas); a component without one uses the Secret in global.ingress.tls.secretName, whose certificate then covers every enabled host. The install fails when neither global.ingress.tls.secretName nor gitlab.webservice.ingress.tls.secretName is set. |
global.codeHelm.ingress.tls.clusterIssuer | string | letsencrypt | Name of the cert-manager ClusterIssuer that signs the Ingress certificates in the certManager mode. |
In the manual mode, create the Secrets yourself, or add cert-manager.io/cluster-issuer: <ISSUER> to global.ingress.annotations, where <ISSUER> is the name of a cert-manager ClusterIssuer. Every Ingress of the chart carries these annotations, and cert-manager issues each certificate into the Secret its Ingress names.
Load balancer
global.codeHelm.loadbalancer deploys an HAProxy Deployment with a Service of type LoadBalancer, named <release>-code-loadbalancer. The Service accepts ports 80, 443 and 22: HTTP and HTTPS are forwarded to the ingress controller, SSH to the Git shell Service inside the cluster. This gives the instance one external address for Git over HTTPS and SSH.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.loadbalancer.enabled | boolean | true | Whether the chart deploys the load balancer. When true, gitlab.gitlab-shell.service.type must stay ClusterIP; otherwise the install fails. When false, expose SSH yourself by setting gitlab.gitlab-shell.service.type to LoadBalancer or NodePort. |
global.codeHelm.loadbalancer.proxyProtocol | boolean | false | Whether HAProxy sends the backends a PROXY protocol v2 header with the client IP address. Requires an ingress controller with use-proxy-protocol: "true" and a Git shell with gitlab.gitlab-shell.sshDaemon: gitlab-sshd and gitlab.gitlab-shell.config.proxyProtocol: true; the Git shell side is checked at install, and without a controller that accepts the header all web traffic stops. See Preserving the client IP address for the rollout order. |
global.codeHelm.loadbalancer.frontendProxyProtocol | boolean | false | Whether HAProxy requires the PROXY protocol header on incoming connections to the ports 80, 443 and 22. Enable only with a PROXY protocol proxy in front of the load balancer, together with proxyProtocol. |
global.codeHelm.loadbalancer.ingressService | string | ingress-nginx-controller.ingress-nginx.svc | DNS name of the ingress controller Service that receives HTTP and HTTPS traffic when httpBackends and ingressClass are empty. |
global.codeHelm.loadbalancer.ingressClass | string | — | Name of the ingress class whose controller receives HTTP and HTTPS traffic. The backend becomes <ingressClass>-load-balancer; used when httpBackends is empty. |
global.codeHelm.loadbalancer.httpBackends | array of strings | [] | Names of the HTTP and HTTPS backends. Each name N becomes the backend N-load-balancer with the ports 80 and 443. Takes precedence over ingressClass and ingressService. |
global.codeHelm.loadbalancer.replicas | integer | 1 | Number of HAProxy pods when the autoscaler is disabled. |
global.codeHelm.loadbalancer.resources | object | requests 100m CPU and 128Mi memory, limits 500m CPU and 256Mi memory | Resource requests and limits of the HAProxy container. |
global.codeHelm.loadbalancer.hpa.enabled | boolean | false | Whether a HorizontalPodAutoscaler scales the HAProxy Deployment. |
global.codeHelm.loadbalancer.hpa.minReplicas | integer | 1 | Lower bound of the autoscaler. |
global.codeHelm.loadbalancer.hpa.maxReplicas | integer | 2 | Upper bound of the autoscaler. |
global.codeHelm.loadbalancer.hpa.cpuUtilization | integer | 80 | Target average CPU utilization, in percent of the request. |
global.codeHelm.loadbalancer.hpa.memoryUtilization | integer | 80 | Target average memory utilization, in percent of the request. |
global.codeHelm.loadbalancer.pdb.enabled | boolean | false | Whether a PodDisruptionBudget keeps at least one HAProxy pod available during voluntary disruptions. |
global.codeHelm.loadbalancer.annotations | object | {} | Annotations of the LoadBalancer Service, for example the address annotation of the cloud or MetalLB load balancer. |
global.codeHelm.loadbalancer.loadBalancerClass | string | — | Value of the service.kubernetes.io/load-balancer-class annotation of the Service, when the cluster runs several load balancer implementations. |
Internal TLS
global.codeHelm.tls.internal encrypts the traffic between the components of the release with certificates from cert-manager: the chart creates a self-signed Issuer, an internal CA and a Certificate for the web service, Workhorse, Praefect and each Gitaly virtual storage. The Secrets are named <release>-webservice-tls, <release>-workhorse-tls, <release>-praefect-tls and the Gitaly Secret of each virtual storage.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.tls.internal.enabled | boolean | true | Whether the chart creates the internal CA and the component certificates. Requires cert-manager in the cluster and the upstream flags gitlab.webservice.tls.enabled, global.workhorse.tls.enabled, global.gitaly.tls.enabled and global.praefect.tls.enabled set to true (the chart default); the install fails when one of them is false. Has no effect when global.codeHelm.istio.enabled is true. |
Istio
global.codeHelm.istio puts the release into an Istio service mesh: the pods receive the sidecar injection label, and a PeerAuthentication object sets the mTLS mode of the namespace. The mesh replaces the internal TLS, so global.codeHelm.tls.internal.enabled, global.gitaly.tls.enabled, global.praefect.tls.enabled, global.workhorse.tls.enabled, gitlab.webservice.tls.enabled and, when the registry is enabled, registry.tls.enabled must be false; otherwise the install fails.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.istio.enabled | boolean | false | Whether the pods join the mesh. Requires Istio with the security.istio.io/v1beta1 API and sidecar injection enabled for the namespace. The migration, backup and database reindex Jobs run the proxy as a native sidecar, which needs Kubernetes 1.29 or later; a classic sidecar would keep a finished Job pod running. |
global.codeHelm.istio.strict | boolean | false | mTLS mode of the PeerAuthentication object: false is PERMISSIVE, true is STRICT. In the strict mode the Workhorse and SSH ports stay permissive, because the ingress controller and Git clients are outside the mesh. |
Metrics through kube-rbac-proxy
global.codeHelm.kubeRbacProxy adds a kube-rbac-proxy sidecar to the web service, Sidekiq, Gitaly, Git shell, Pages, Praefect, exporter, registry and load balancer pods. The sidecar serves the metrics of its pod on the port https-metrics and lets a request through only after a TokenReview and a SubjectAccessReview of its bearer token. The chart creates a Service <release>-<component>-metrics and a ServiceMonitor <release>-<component> per component, the Secret <release>-prometheus-token the ServiceMonitors take the token from, and the RBAC objects the sidecars need for the reviews.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.kubeRbacProxy.enabled | boolean | false | Whether the sidecars, Services, ServiceMonitors and RBAC objects are created. When true, disable the upstream ServiceMonitors so that Prometheus scrapes through the proxy: gitlab.webservice.serviceMonitor.enabled, gitlab.sidekiq.serviceMonitor.enabled, gitlab.gitaly.serviceMonitor.enabled, gitlab.gitlab-shell.serviceMonitor.enabled, gitlab.gitlab-pages.serviceMonitor.enabled, gitlab.praefect.serviceMonitor.enabled and gitlab.gitlab-exporter.serviceMonitor.enabled. |
global.codeHelm.kubeRbacProxy.serviceAccountToken | string | — | Bearer token Prometheus presents to the sidecars. Required when enabled is true; otherwise the install fails. The ServiceAccount the token belongs to needs the verb get on the deployments/prometheus-metrics and statefulsets/prometheus-metrics subresources in the release namespace. |
global.codeHelm.kubeRbacProxy.caSecret | string | — | Name of an existing Secret with the CA certificate under the key ca.crt, which the sidecars use to verify client certificates. When empty, the CA comes from clusterIssuer. |
global.codeHelm.kubeRbacProxy.clusterIssuer | string | selfsigned | Name of the cert-manager ClusterIssuer that signs the CA Certificate <release>-kube-rbac-proxy-ca when caSecret is empty. When both are empty and enabled is true, the install fails. |
global.codeHelm.kubeRbacProxy.resources | object | requests 10m CPU, 25Mi memory and 50Mi ephemeral storage | Resource requests and limits of the sidecar. |
global.codeHelm.kubeRbacProxy.securityContext | object | no privilege escalation, read-only root filesystem, all capabilities dropped, RuntimeDefault seccomp profile | Security context of the sidecar. |
Audit events
global.codeHelm.audit adds an audit sidecar to the web service and Sidekiq pods. The sidecar reads the audit log of its pod and writes each event to its standard output in the CEF format, so the logging stack of the cluster collects the events from the container logs. To read them directly:
d8 k -n code logs <POD_NAME> -c auditAudit events describes the events themselves.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.audit.enabled | boolean | true | Whether the sidecar is added to the web service and Sidekiq pods. |
global.codeHelm.audit.resources | object | requests and limits of 100m CPU and 128Mi memory | Resource requests and limits of the sidecar. |
global.codeHelm.audit.securityContext | object | no privilege escalation, all capabilities dropped, RuntimeDefault seccomp profile | Security context of the sidecar. |
Monitoring
global.codeHelm.monitoring creates the objects that Prometheus Operator and Grafana pick up.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.monitoring.prometheusRules | boolean | false | Whether the chart creates the PrometheusRule <release>-code-helm with the label prometheus: d8-monitoring. The rules alert on unavailable web service and Sidekiq, failed or stale LDAP synchronization and failing pull mirrors. Created only when the monitoring.coreos.com/v1 API exists in the cluster. |
global.codeHelm.monitoring.dashboards | boolean | true | Whether the chart creates the ConfigMap <release>-grafana-dashboard with the label grafana_dashboard: "1" and the Grafana dashboard of the instance. The Grafana dashboard sidecar picks it up from the release namespace; for another namespace, extend the sidecar’s search namespaces. |
Advanced search
global.codeHelm.search connects the instance to an OpenSearch cluster for code and content search. Advanced search describes indexing and the search itself.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.search.enabled | boolean | false | Whether advanced search is enabled in the application configuration. |
global.codeHelm.search.opensearch.url | string | http://opensearch:9200/ | URL of the OpenSearch endpoint. |
global.codeHelm.search.opensearch.credentials.username | string | — | User name of the OpenSearch account. Together with the password creates the Secret <release>-code-helm-opensearch-creds, which the web service and Sidekiq pods mount; without both values the connection is anonymous. |
global.codeHelm.search.opensearch.credentials.password | string | — | Password of the OpenSearch account. |
global.codeHelm.search.opensearch.maxBulkSizeBytes | integer | 10485760 | Upper size of one bulk indexing request, in bytes. |
global.codeHelm.search.opensearch.maxBulkConcurrency | integer | 10 | Number of bulk indexing requests in flight at the same time. |
global.codeHelm.search.opensearch.repositoryIndexerMaxConcurrency | integer | 30 | Number of repository indexer processes that run at the same time. |
global.codeHelm.search.opensearch.indexedFileSizeLimitKb | integer | 1024 | Upper size of a file whose content is indexed, in kilobytes. Larger files are indexed by name only. |
global.codeHelm.search.opensearch.readTimeout | integer | 10 | Time limit of one search query, in seconds. A query that exceeds it is not repeated, and the search returns an error. |
global.codeHelm.search.opensearch.adminRequestTimeout | integer | 60 | Time limit of the index status and index recreation requests, in seconds. These requests are not repeated. |
global.codeHelm.search.opensearch.indexingRequestTimeout | integer | 1800 | Time limit of one indexing request, in seconds. A failed indexing request is repeated, so an indexing job can wait longer than this value. |
global.codeHelm.search.sidekiq.routingRules | array | [["feature_category=fe_global_search", "global-search-indexing"], ["*", "default"]] | Sidekiq routing rules: each item is a pair of a job selector and the queue it goes to. The default sends indexing jobs to the queue global-search-indexing and everything else to default. |
To run the indexing jobs in pods of their own, add a Sidekiq pod for the queue:
gitlab:
sidekiq:
pods:
- name: all-in-1
- name: global-search
queues: global-search-indexingContainer images
Every workload image is pinned in the chart at build time. global.codeHelm.images replaces the pinned image of a component, for example when the images are mirrored to a registry inside the network.
| Key | Type | Default | Description |
|---|---|---|---|
global.codeHelm.images.<component> | string | — | Full image reference of the component, registry/repository:tag or registry/repository@sha256:...; it replaces the pinned reference entirely. Component names: webservice-default, workhorse, sidekiq-all-in-1-v2, sidekiq-global-search-v2, gitaly-default, gitaly-init-cgroups, praefect, registry, shell, toolbox, rails, exporter, mailroom, pages, base, certificates, kube-rbac-proxy, haproxy, vector, kubectl, cfssl-self-sign, kas. A Sidekiq pod from gitlab.sidekiq.pods resolves its image from the key sidekiq-<pod name>-v2 and falls back to sidekiq-all-in-1-v2. |
global.codeHelm.nameOverride | string | <release>-code-helm | Name prefix of the objects the chart adds to the upstream chart: the audit ConfigMap, the OpenSearch Secret, the PrometheusRule and the internal TLS Issuers and CA. |
PostgreSQL connection encryption
global.psql.sslMode and global.psql.ssl set how the application connects to PostgreSQL. global.praefect.psql.sslMode does the same for the Praefect database and also defaults to prefer.
| Key | Type | Default | Description |
|---|---|---|---|
global.psql.sslMode | string | prefer | libpq SSL mode of the application connections: disable, allow, prefer, require, verify-ca or verify-full. When empty and global.psql.ssl is set, the mode is verify-ca. |
global.psql.ssl.secret | string | — | Name of the Secret with the certificates for a mutual TLS connection. When the ssl block is used, every key of the block is required. |
global.psql.ssl.serverCA | string | — | Key inside that Secret that holds the CA certificate of the server. |
global.psql.ssl.clientCertificate | string | — | Key inside that Secret that holds the client certificate. |
global.psql.ssl.clientKey | string | — | Key inside that Secret that holds the client private key. |
Authentication providers
The chart accepts the upstream fields of an entry in global.appConfig.omniauth.providers (name, label, icon, secret, key, args) and the group fields below. When an entry names a secret, the provider is read from that Secret and the group fields go into its YAML. SAML shows the complete provider entries.
| Key | Type | Default | Description |
|---|---|---|---|
global.appConfig.omniauth.providers[].allowed_groups | array of strings | — | Groups of the identity provider whose members may sign in. When unset, every authenticated user may sign in. |
global.appConfig.omniauth.providers[].admin_groups | array of strings | [] | Groups whose members receive administrator rights on the instance. |
global.appConfig.omniauth.providers[].auditor_groups | array of strings | [] | Groups whose members receive auditor rights on the instance. |
global.appConfig.omniauth.providers[].groups_attribute | string | Groups | Name of the SAML attribute that carries the group membership. |
global.appConfig.omniauth.providers[].external_groups | array of strings | — | Groups whose members are marked as external users. |
An LDAP server in global.appConfig.ldap.servers.<name> accepts the upstream fields (host, port, uid, base, bind_dn, password, active_directory and the others) and a group_sync block that maps LDAP groups to groups of the instance. LDAP describes the synchronization.
| Key | Type | Default | Description |
|---|---|---|---|
global.appConfig.ldap.servers.<name>.group_sync.create_groups | boolean | false | Whether groups that exist in LDAP and not on the instance are created during synchronization. |
global.appConfig.ldap.servers.<name>.group_sync.base | string | — | Base DN of the LDAP group search. |
global.appConfig.ldap.servers.<name>.group_sync.filter | string | — | LDAP filter that selects the groups to synchronize. |
global.appConfig.ldap.servers.<name>.group_sync.scope | string or integer | — | Scope of the LDAP group search: 0 is the base object, 1 one level below it, 2 the whole subtree. |
global.appConfig.ldap.servers.<name>.group_sync.top_level_group | string | — | Path of the group on the instance under which the synchronized groups are created. |
global.appConfig.ldap.servers.<name>.group_sync.name_mask | string | — | Regular expression applied to the cn of an LDAP group to extract the group name on the instance. |
global.appConfig.ldap.servers.<name>.group_sync.owner | string | root | User name that owns the groups the synchronization creates. |
global.appConfig.ldap.servers.<name>.group_sync.role_mapping[].by_name | string | — | Regular expression matched against the LDAP group name. |
global.appConfig.ldap.servers.<name>.group_sync.role_mapping[].gitlab_role | string | — | Role the matched group’s members receive: guest, reporter, developer, maintainer or owner. |
global.appConfig.ldap.servers.<name>.group_sync.prefix.attribute | string | — | LDAP attribute whose value is prepended to the group name. |
global.appConfig.ldap.servers.<name>.group_sync.prefix.default | string | — | Prefix used when the attribute is absent. |
global.appConfig.ldap.servers.<name>.group_sync.prefix.name_mask | string | — | Regular expression that extracts the prefix from the attribute value. |
Changed upstream defaults
The chart ships the upstream values below with other defaults. Each row names what the change requires from the cluster or the values file.
| Key | Upstream default | Chart default | Consequence |
|---|---|---|---|
global.registry.enabled, registry.enabled | true | false | The container registry is not deployed and the application shows no registry; to enable it, set both to true and configure the storage, see Container registry. |
global.ingress.class | unset | nginx | The Ingress objects target the nginx ingress class; set another class when the cluster uses a different controller. |
global.appConfig.object_store.enabled | false | true | Uploads, artifacts, LFS objects, packages and the other stores live in object storage; a connection through global.codeHelm.externalSecrets.s3 or global.appConfig.object_store.connection and a bucket per store are required. |
global.appConfig.externalDiffs.enabled, global.appConfig.terraformState.enabled, global.appConfig.dependencyProxy.enabled | false | true | Merge request diffs, Terraform state and the dependency proxy each need a bucket in global.appConfig.<store>.bucket. |
global.praefect.enabled | false | true | Gitaly runs behind Praefect with one virtual storage named default and one Gitaly replica (global.praefect.virtualStorages[0].gitalyReplicas, upstream 3) and one Praefect pod (gitlab.praefect.replicas, upstream 2). Praefect needs its own PostgreSQL database in global.praefect.psql.host, user and dbName. |
global.praefect.psql.sslMode | disable | prefer | The Praefect connection uses TLS when the server offers it. |
global.gitaly.tls.enabled, global.praefect.tls.enabled, global.workhorse.tls.enabled, gitlab.webservice.tls.enabled | false | true | The components expect the certificates from Internal TLS; keep them true while global.codeHelm.tls.internal.enabled is true, and set them false for Istio. |
global.kas.enabled | true | false | The agent server for Kubernetes is not deployed, and no <release>-kas-tls certificate is created. |
global.gatewayApi.enabled, global.gatewayApi.installEnvoy | true | false | The chart exposes the instance through Ingress objects; no Gateway API objects or Envoy Gateway are created. |
gitlab.gitlab-shell.service.type | LoadBalancer | ClusterIP | SSH is exposed through Load balancer; change the type only when the load balancer is disabled. |
gitlab.gitlab-shell.sshDaemon | openssh | gitlab-sshd | SSH is served by the gitlab-sshd daemon; it decodes the PROXY protocol header of the load balancer and accepts connections without the header. |
gitlab.gitlab-shell.config.proxyProtocol | false | true | gitlab-sshd expects the PROXY protocol header of the load balancer; with sshDaemon it forms the Git shell side of preserving the client IP address. The install fails when the values are overridden to the upstream variants while global.codeHelm.loadbalancer.proxyProtocol is enabled. |
gitlab.gitaly.cgroups.enabled | false | true | Gitaly runs Git processes in cgroups: 2 GiB and 150000 CPU quota units for the parent, 100 repository cgroups of 1 GiB and 75000 CPU quota units each. The Gitaly pod runs an init container that needs write access to the cgroup filesystem of the node. |
gitlab.toolbox.backups.cron.extraArgs | unset | --repositories-server-side | Gitaly uploads repository backups to the backup bucket directly, so the bucket must be reachable from the Gitaly pods. |