複数の外部データベースを使用した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

前提条件:

複数の外部データベースをセットアップするには

  1. データベースユーザーgitlab のPostgreSQLシークレットを保持するKubernetesシークレットを作成します。このパスワードは、異なるパスワードを持つ2つの異なる物理サーバー上に複数のデータベースを持つことをサポートするために、異なるものにすることができます。

    この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. GitLabチャートのデプロイに使っている既存のYAMLファイル(例えばgitlab-values.yaml )に以下を追加し、host の値をあなたのものに置き換えてください:

    global:
      psql:
        main:
          host: main.database.host # set this to the host of your external main database
          database: gitlabhq_production
          password:
            secret: gitlab-postgresql-password
            key: main-gitlab-password
        ci:
          host: ci.database.host # set this to the host of your external ci database. Can be the same as the one for main database
          database: gitlabhq_production_ci # difference in database containing CI schema, results in `database_tasks: true` as well
          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