Skip to content

Gitlab.com on Kubernetes

A collection of info about gitlab.com on K8S

Which workloads are actually running on k8s?

Section titled “Which workloads are actually running on k8s?”
  • Production:

    • Regional

      gitlab-kas
      gitlab-mailroom
      gitlab-sidekiq-catchall-v1
      gitlab-sidekiq-database-throttled-v1
      gitlab-sidekiq-elasticsearch-v1
      gitlab-sidekiq-gitaly-throttled-v1
      gitlab-sidekiq-low-urgency-cpu-bound-v1
      gitlab-sidekiq-memory-bound-v1
      gitlab-sidekiq-urgent-cpu-bound-v1
      gitlab-sidekiq-urgent-other-v1
    • Zonal

      gitlab-gitlab-shell
      gitlab-registry
      gitlab-webservice-git
      gitlab-webservice-websockets
  • Staging:

    • Regional:

      Production:Regional
      gitlab-nginx-ingress-controller
      gitlab-nginx-ingress-default-backend
    • Zonal:

      Production:Zonal
      gitlab-nginx-ingress-controller
      gitlab-nginx-ingress-default-backend
      gitlab-webservice-api
  1. This is a rabbit hole.
  2. There’s a full team maintaing (Delivery) this, thankfully.
  3. This must be where the charts are generated: https://gitlab.com/gitlab-org/charts/gitlab/-/tree/master/
  4. Auto Deploy for details on how the pipeline is triggered: https://gitlab.com/gitlab-com/gl-infra/k8s-workloads/gitlab-com#auto-deploy
  5. The Deployer, pipeline example: https://ops.gitlab.net/gitlab-com/gl-infra/deployer/-/pipelines/516853

Regional vs Zonal clusters, node pools, taints

Section titled “Regional vs Zonal clusters, node pools, taints”

Kubernetes limit and request values for each environment can be found under: https://gitlab.com/gitlab-com/gl-infra/k8s-workloads/gitlab-com/-/tree/master/releases/gitlab/values.

For example, GPRD values are in gprd.yaml.gotmpl.

Link to config in k8s-workloads.

Terminal window
gitlab-shell:
resources:
requests:
cpu: 2000m
hpa:
targetAverageValue: 1200m
minReplicas: 8
maxReplicas: 150

These values can be observed via the kubectl command as well:

Terminal window
console-01-sv-gprd.c.gitlab-production.internal:~$ kubectl get deployment/gitlab-gitlab-shell -n gitlab -o=jsonpath='{.spec.template.spec.containers[*].resources}'
map[limits:map[memory:1G] requests:map[cpu:2 memory:1G]]

Also see official kubernetes docs for assigning CPU limits and requests.

Low-level: How do resource limits translate to kernel concepts like cgroups and namespaces? (WIP)

Section titled “Low-level: How do resource limits translate to kernel concepts like cgroups and namespaces? (WIP)”