Architecture

We plan to support three tiers of components:

  1. Docker Containers
  2. Scheduler (Kubernetes)
  3. Higher level configuration tool (Helm)

The main method customers would use to install would be the Helm Chart in this repository. At some point in the future, we may also offer other deployment methods like Amazon CloudFormation or Docker Swarm.

Docker Container Images

As a foundation, we will be creating a Docker container for each service. This will allow easier horizontal scaling with reduced image size and complexity. Configuration should be passed in a standard way for Docker, perhaps environment variables or a mounted file. This provides a clean common interface with the scheduler software.

We plan to offer a container for the following services:

  • Sidekiq
  • Unicorn
  • Gitaly
  • Workhorse
  • Postgres (perhaps upstream Postgres), along with Postgres Exporter
  • Redis
  • GitLab Monitor

We likely plan to leverage the following existing official containers for underlying services:

The GitLab Chart

This is the top level gitlab chart, which configures all necessary resources for a complete configuration of GitLab. This includes GitLab, PostgreSQL, Redis, Ingress, and certificate management charts.

At this high level, a customer can make decisions like:

  • Whether they want to use the embedded Postgres chart, or to use an external database like Amazon RDS for Postgres.
  • To bring their own SSL certificates, or leverage Let’s Encrypt.
  • To use a load balancer, or a dedicated ingress.

Customers who would like to get started quickly and easily should begin with this chart.

Subcharts

The gitlab chart is made of multiple subcharts. These charts provide individual components of the GitLab software.

Subcharts included are :

Components list

A list of which components are deployed when using the chart, and configuration instructions if needed, is available on the architecture components list page.

Design Decisions

Documentation of the decisions made regarding the architecture of these charts can be found in Design Decisions documentation