正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

GitLab-Migrationsチャートの使用

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

migrationsサブチャートは、GitLabで使用されるデータベースのシード/移行を処理する単一のジョブを提供します。このチャートは、GitLab Railsコードベースを使用して実行されます。

ClickHouseが有効になっている場合、このサブチャートはClickHouseの移行も実行します。

移行後、このジョブは、承認されたキーファイルへの書き込みをオフにするために、データベース内のアプリケーション設定も編集します。SSH AuthorizedKeysCommandでGitLab Authorized Keys APIを使用することのみをサポートしており、承認されたキーファイルへの書き込みはサポートしていません。

要件

このチャートは、完全なGitLabチャートの一部として、またはこのチャートがデプロイされるKubernetesクラスタリングから到達可能な外部サービスとして提供されるRedisおよびPostgreSQLに依存します。

インストールでClickHouseが有効になっている場合、このチャートはClickHouseにも依存します。

設計上の選択

migrationsチャートは、チャートがインストールされるたび、または新しいチャートのバージョンappVersion 、または値の変更でチャートがアップグレードされるたびに、新しい移行ジョブを作成します。

このチャートをインストールおよびアップグレードするためにhelm installhelm upgradeを使用すると、このチャートによって作成されたジョブは、次のチャートのアップグレードまでクラスタリング内のオブジェクトとして残ります。これは、移行ログを監視できるようにするためです。何らかの形式のログシッピングが完了したら、これらのオブジェクトの永続性を再検討できます。

helm templateおよびkubectl applyまたは同様のツールによって生成されたマニフェストを使用してデプロイが作成された場合、古い移行ジョブオブジェクトはクラスタリングから削除されません。

このチャートで使用されているコンテナには、現在ここで使用していない追加の最適化がいくつかあります。主に、Railsアプリケーションを起動して確認しなくても、すでに最新の状態になっている場合は、移行の実行をすばやくスキップできる機能です。この最適化では、移行ステータスを保持する必要があります。これは、現時点ではこのチャートでは行っていません。将来、このチャートに移行ステータスのストレージサポートを導入する予定です。

設定

migrationsチャートは、外部サービスとチャートの設定の2つの部分で構成されています。

インストールコマンドラインオプション

以下の表には、helm installコマンドに--setフラグを使用して指定できる、可能なすべてのチャートの設定が含まれています

パラメータ説明デフォルト
common.labelsこのチャートによって作成されたすべてのオブジェクトに適用される補足ラベル。{}
image.repository移行イメージリポジトリregistry.gitlab.com/gitlab-org/build/cng/gitlab-toolbox-ee
image.tag移行イメージタグ
image.pullPolicy移行のプルポリシーAlways
image.pullSecretsイメージリポジトリのシークレット
init.image.repositoryinitContainerイメージリポジトリregistry.gitlab.com/gitlab-org/build/cng/gitlab-base
init.image.taginitContainerイメージタグmaster
init.image.containerSecurityContextinitコンテナsecurityContextオーバーライド{}
init.containerSecurityContext.allowPrivilegeEscalationinitContainer固有: プロセスが親プロセスよりも多くの特権を取得できるかどうかを制御しますfalse
init.containerSecurityContext.runAsNonRootinitContainer固有: コンテナを非rootユーザーで実行するかどうかを制御しますtrue
init.containerSecurityContext.capabilities.dropinitContainer固有: コンテナのLinuxケイパビリティを削除します[ "ALL" ]
enabled移行の有効フラグtrue
tolerationsポッド割り当ての容認ラベル[]
affinityポッド割り当てのアフィニティルール{}
annotationsジョブ仕様の注釈{}
podAnnotationspob仕様の注釈{}
podLabels補足ポッドのラベル。セレクターには使用されません。
redis.serviceNameRedisサービス名redis
psql.serviceNamePostgreSQLを提供するサービスの名前release-postgresql
psql.password.secretpsqlシークレットgitlab-postgres
psql.password.keypsqlシークレット内のpsqlパスワードへのキーpsql-password
psql.portPostgreSQLサーバーポートを設定します。これは、global.psql.portより優先されます。
resources.requests.cpuGitLab移行の最小CPU250m
resources.requests.memoryGitLab移行の最小メモリ200Mi
securityContext.fsGroupポッドを開始するグループID1000
securityContext.runAsUserポッドを開始するユーザーID1000
securityContext.fsGroupChangePolicyボリュームの所有権とアクセス許可を変更するためのポリシー(Kubernetes 1.23が必要です)
securityContext.seccompProfile.type使用するSeccompプロファイルRuntimeDefault
containerSecurityContext.runAsUserコンテナの開始元となるsecurityContextをオーバーライドします1000
containerSecurityContext.allowPrivilegeEscalationコンテナのプロセスが親プロセスよりも多くの特権を取得できるかどうかを制御しますfalse
containerSecurityContext.runAsNonRootコンテナを非rootユーザーで実行するかどうかを制御しますtrue
containerSecurityContext.capabilities.dropGitalyコンテナのLinuxケイパビリティを削除します[ "ALL" ]
serviceAccount.annotationsServiceAccount注釈{}
serviceAccount.automountServiceAccountTokenポッドにデフォルトのServiceAccountアクセストークンをマップするかどうかを示しますfalse
serviceAccount.createServiceAccountを作成するかどうかを示しますfalse
serviceAccount.enabledServiceAccountを使用するかどうかを示しますfalse
serviceAccount.nameServiceAccountの名前。設定しない場合、完全なチャート名が使用されます
extraInitContainers含める追加のinitコンテナのリスト
extraContainers含めるコンテナのリストを含む複数行のリテラルスタイル文字列
extraVolumes作成する追加のボリュームのリスト
extraVolumeMounts実行する追加のボリュームマウントのリスト
extraEnv公開する追加の環境変数のリスト
extraEnvFrom公開する他のデータソースからの追加の環境変数のリスト
priorityClassName優先クラスがポッドに割り当てられています。

チャート設定の例

extraEnv

extraEnvを使用すると、ポッド内のすべてのコンテナで追加の環境変数を公開できます。

extraEnvの使用例を以下に示します:

extraEnv:
  SOME_KEY: some_value
  SOME_OTHER_KEY: some_other_value

コンテナの起動時に、環境変数が公開されていることを確認できます:

env | grep SOME
SOME_KEY=some_value
SOME_OTHER_KEY=some_other_value

extraEnvFrom

extraEnvFromを使用すると、ポッド内のすべてのコンテナで、他のデータソースからの追加の環境変数を公開できます。

extraEnvFromの使用例を以下に示します:

extraEnvFrom:
  MY_NODE_NAME:
    fieldRef:
      fieldPath: spec.nodeName
  MY_CPU_REQUEST:
    resourceFieldRef:
      containerName: test-container
      resource: requests.cpu
  SECRET_THING:
    secretKeyRef:
      name: special-secret
      key: special_token
      # optional: boolean
  CONFIG_STRING:
    configMapKeyRef:
      name: useful-config
      key: some-string
      # optional: boolean

image.pullSecrets

pullSecretsを使用すると、プライベートレジストリに対して認証を行い、ポッドのイメージをプルできます。

プライベートレジストリとその認証方法に関する追加の詳細は、Kubernetesドキュメントにあります。

pullSecretsの使用例を以下に示します:

image:
  repository: my.migrations.repository
  pullPolicy: Always
  pullSecrets:
  - name: my-secret-name
  - name: my-secondary-secret-name

serviceAccount

このセクションでは、ServiceAccountを作成するかどうか、およびデフォルトのアクセストークンをポッドにマウントするかどうかを制御します。

名前デフォルト説明
annotationsマップ{}ServiceAccount注釈。
automountServiceAccountTokenブール値falseの設定は、デフォルトのServiceAccountアクセストークンをポッドにマウントする必要があるかどうかを制御します。これは、特定のサイドカーが正常に機能するために必要という場合(Istioなど)を除き、有効にしないようにしてください。
createブール値falseServiceAccountを作成するかどうかを示します。
enabledブール値falseServiceAccountを使用するかどうかを示します。
name文字列ServiceAccountの名前。設定しない場合、完全なチャート名が使用されます。

affinity

詳細については、affinityを参照してください。

このチャートのCommunity Editionの使用

デフォルトの場合、HelmチャートではGitLabのEnterprise Editionを使用します。必要に応じて、代わりにCommunity Editionを使用できます。2つのエディションの違いの詳細については、こちらをご覧ください。

Community Editionを使用するには、image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-toolbox-ceに設定します

外部サービス

Redis

redis:
  host: redis.example.com
  serviceName: redis
  port: 6379
  sentinels:
    - host: sentinel1.example.com
      port: 26379
  password:
    secret: gitlab-redis
    key: redis-password

host

使用するデータベースが格納されているRedisサーバーのホスト名。serviceNameの代わりとして省略できます。Redis Sentinelを使用している場合、host属性は、sentinel.confで指定されているクラスタ名に設定する必要があります。

serviceName

Redisデータベースを操作しているserviceの名前。これが存在し、hostが存在しない場合、チャートはhost値の代わりにサービスのホスト名(および現在の.Release.Name)をテンプレート処理します。これは、RedisをGitLabチャート全体の一部として使用する場合に便利です。これはデフォルトでredisになります

ポート

Redisサーバーへの接続に使用するポート。6379がデフォルトです。

password

Redisのpassword属性には、2つのサブキーがあります:

  • secretは、プル元のKubernetes Secretの名前を定義します。
  • keyは、上記のシークレットのうちパスワードを含むキーの名前を定義します。

sentinels

sentinels属性を使用すると、Redis HAクラスタリングへの接続が可能になります。サブキーは、各Sentinel接続を記述します。

  • hostは、Sentinelサービスのホスト名を定義します
  • portは、Sentinelサービスに到達するためのポート番号を定義し、デフォルトは26379です

: 現在のRedis Sentinelサポートは、GitLabチャートとは別にデプロイされたSentinelのみをサポートしています。そのため、redis.install=falseに設定して、GitLabチャートによるRedisのデプロイを無効にする必要があります。Redisパスワードを含むKubernetesシークレットは、GitLabチャートをデプロイする前に手動で作成する必要があります。

PostgreSQL

psql:
  host: psql.example.com
  serviceName: pgbouncer
  port: 5432
  database: gitlabhq_production
  username: gitlab
  preparedStatements: false
  password:
    secret: gitlab-postgres
    key: psql-password

host

使用するデータベースを持つPostgreSQLサーバーのホスト名。これは、postgresql.install=true(デフォルトの非本番環境)の場合に省略できます。

serviceName

PostgreSQLデータベースを操作しているサービス名の名前。これが存在し、hostが存在しない場合、チャートはhost値の代わりにサービスのホスト名をテンプレート処理します。

ポート

PostgreSQLサーバーへの接続に使用するポート。5432がデフォルトです。

データベース

PostgreSQLサーバーで使用するデータベースの名前。これはデフォルトでgitlabhq_productionになります。

preparedStatements

PostgreSQLサーバーとの通信時にプリペアドステートメントを使用するかどうか。falseがデフォルトです。

ユーザー名

データベースへの認証に使用するユーザー名。これはデフォルトでgitlabになります

password

PostgreSQLのpassword属性には、2つのサブキーがあります:

  • secretは、プル元のKubernetes Secretの名前を定義します。
  • keyは、上記のシークレットのうちパスワードを含むキーの名前を定義します。

ClickHouse(オプション)

global:
  clickhouse:
    enabled: true
    main:
      url: https://clickhouse.example.com
      database: default
      username: default
      password:
        secret: gitlab-clickhouse-password
        key: main_password

インストールでClickHouseが有効になっている場合、このチャートはClickHouseデータベースの移行も実行します。ClickHouseの設定は、global.clickhouseキーの下に指定する必要があります。

main.url

ClickHouseインスタンスのURL。

main.database

ClickHouseのデータベース名。

main.username

ClickHouseで認証するために使用するユーザー名。

main.password

ClickHouseのpassword属性には、2つのサブキーが含まれています:

  • secretは、プル元のKubernetesシークレットの名前を定義します。
  • keyは、パスワードを含む上記のsecret内のキーの名前を定義します。