다중 외부 데이터베이스로 GitLab 차트 구성하기 (Alpha)

caution
이 기능은 프로덕션 환경에서 사용할 준비가 되지 않았습니다. 알려진 문제로 인해 GitLab을 다중 데이터베이스로 구성하는 것은 알파 상태입니다.

기본적으로 GitLab은 main 데이터베이스라고 불리는 단일 애플리케이션 데이터베이스를 사용합니다.

GitLab을 확장하기 위해 GitLab을 여러 외부 애플리케이션 데이터베이스를 사용하도록 구성할 수 있습니다. 구체적으로 mainci라는 이름의 데이터베이스를 사용합니다. 다음 다이어그램은 파드가 다중 데이터베이스와 통신하는 방법을 보여줍니다:

graph LR subgraph External Databases B[(Main Database)] C[(CI Database)] end subgraph Kubernetes Cluster A[GitLab Pod 1] --> B A --> C D[GitLab Pod 2] --> B D --> C end

전제 조건:

  • 외부 데이터베이스 문서에 나열된 모든 전제 조건.
  • gitlabhq_production_ci라는 추가적인 비어있는 데이터베이스가 필요합니다. 이는 gitlabhq_production 데이터베이스와 동일한 PostgreSQL 서버에서 실행될 수 있습니다.
  • kubectlhelm CLI 도구를 사용하여 Kubernetes 클러스터에 액세스합니다. 자세한 정보는 GitLab 차트 전제 조건을 참조하십시오.

다중 외부 데이터베이스 설정하기:

  1. 데이터베이스 사용자 gitlab의 PostgreSQL 비밀을 보유하는 Kubernetes 시크릿을 생성합니다. 이 비밀은 서로 다른 암호를 지원하기 위해 두 개의 서로 다른 물리적 서버에 다른 암호를 가질 수 있습니다.

    이 Kubernetes 시크릿에 gitlab-postgresql-password라는 이름을 선택합시다:

    kubectl create secret generic gitlab-postgresql-password \
        --from-literal=main-gitlab-password=<main-database-password> \
        --from-literal=ci-gitlab-password=<ci-database-password>
    
  2. 기존 YAML 파일에 다음을 추가하여 GitLab 차트를 배포하는데 사용하는 기존 YAML 파일(예: gitlab-values.yaml)에 다음을 추가하고 host 값을 자신의 값으로 대체합니다:

    global:
      psql:
        main:
          host: main.database.host # 외부 main 데이터베이스 호스트로 설정합니다
          database: gitlabhq_production
          password:
            secret: gitlab-postgresql-password
            key: main-gitlab-password
        ci:
          host: ci.database.host # 외부 ci 데이터베이스 호스트로 설정합니다. main 데이터베이스와 동일할 수 있습니다.
          database: gitlabhq_production_ci # CI 스키마를 포함하는 데이터베이스의 차이로, `database_tasks: true`가 결과로 나타남
          password:
            secret: gitlab-postgresql-password
            key: ci-gitlab-password
    postgresql:
      install: false
    

    여기서:

    • postgresql.install: 중첩된 데이터베이스를 비활성화하고 대신 외부 데이터베이스를 사용하려면 false로 설정합니다.
    • global.psql.main.host: 외부 main 데이터베이스의 호스트 이름으로 설정하며 도메인 또는 IP 주소가 될 수 있습니다.
    • global.psql.main.password.secret: PostgreSQL 사용자의 비밀을 보유하는 Kubernetes 시크릿의 이름입니다. 예제에서는 gitlab-postgresql-password입니다.
    • global.psql.main.password.key: 시크릿 내에서 비밀을 포함하는 키입니다. 예제에서는 main-gitlab-password입니다.
    • global.psql.ci.host: 외부 ci 데이터베이스의 호스트 이름으로 설정하며 도메인 또는 IP 주소가 될 수 있습니다. 두 데이터베이스 mainci가 동일한 데이터베이스 서버에 있는 경우 global.psql.main.host의 값과 동일할 수 있습니다.
    • global.psql.ci.password.secret: PostgreSQL 사용자의 비밀을 보유하는 Kubernetes 시크릿의 이름입니다. 예제에서는 gitlab-postgresql-password입니다.
    • global.psql.ci.password.key: 시크릿 내에서 비밀을 포함하는 키입니다. 예제에서는 ci-gitlab-password입니다.
  3. 마지막으로 gitlab-values.yaml을 사용하여 GitLab 차트를 배포합니다:

    helm repo add gitlab https://charts.gitlab.io/
    helm repo update
    helm upgrade --install gitlab gitlab/gitlab --timeout=900s -f gitlab-values.yaml