GitLab-マイグレーションチャートの使い方

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

マイグレーションの後、このジョブはデータベースのアプリケーション設定を編集してauthorized keys ファイルへの書き込みをオフにします。Chartでは、GitLab Authorized Keys APIのSSHAuthorizedKeysCommand での使用のみをサポートしています。

要件

このチャートはRedisとPostgreSQLに依存しています。RedisはGitLabチャートの一部として、PostgreSQLはこのチャートがデプロイされたKubernetesクラスターからアクセス可能な外部サービスとして提供されています。

設計の選択

migrations はチャートがデプロイされるたびに新しいマイグレーションジョブを作成します。ジョブ名の衝突を防ぐために、作成されるたびに Chart のリビジョンとランダムな英数字をジョブ名に追加します。ランダムなテキストの目的についてはこのセクションで詳しく説明します。

今のところ、ジョブが完了した後もオブジェクトとしてクラスターに残るようにしています。これはマイグレーションログを観察するためです。現在のところ、これはhelm uninstall の後でもこれらのジョブが持続することを意味します。 これはジョブ名にランダムテキストを付加する理由の1つで、同じリリース名を使用する将来のデプロイが競合を引き起こさないようにするためです。何らかの形でログシッピングができるようになれば、これらのオブジェクトの永続性を再検討することができます。

このChartで使用しているコンテナには、現在このChartでは使用していない追加の最適化があります。主に、マイグレーションがすでに最新であれば、Railsアプリケーションを起動して確認しなくても、マイグレーションの実行をすばやくスキップする機能です。この最適化にはマイグレーションのステータスを保持する必要があります。今のところこのChartでは行っていません。将来的には、マイグレーションステータスのストレージサポートをこのChartに導入する予定です。

設定

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

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

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

パラメータ説明デフォルト
common.labelsこのChartで作成されたすべてのオブジェクトに適用される補助ラベル。{}
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 のオーバーライド。{}
enabledマイグレーション有効フラグtrue
tolerationsポッド割り当て用のトレラベル[]
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.cpu250mGitLabマイグレーションの最小CPU
resources.requests.memory200MiGitLab マイグレーションの最小メモリ
securityContext.fsGroup1000ポッドを起動するグループID
securityContext.runAsUser1000ポッドを起動するユーザーID
securityContext.fsGroupChangePolicy ボリュームの所有権と権限を変更するためのポリシー (Kubernetes 1.23 が必要)
containerSecurityContext.runAsUserコンテナが起動するコンテナsecurityContext をオーバーライドします。1000
extraInitContainers追加コンテナのリスト 
extraContainers追加コンテナのリスト 
extraVolumes作成する追加ボリュームのリスト 
extraVolumeMounts追加ボリュームマウントのリスト 
extraEnv公開する追加環境変数のリスト 
extraEnvFrom公開する他のデータソースの追加環境変数のリスト 
bootsnap.enabledRailsのBootsnapキャッシュを有効にします。true
priorityClassNameポッドに割り当てられる優先度クラス 

Chart設定例

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

追加EnvFrom

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

画像.pullSecrets

pullSecrets を使用すると、非公開レジストリで認証してポッドのイメージをプルできるようになります。

非公開レジストリとその認証方法の詳細については、Kubernetesのドキュメントを参照してください。

以下は、pullSecrets の使用例です:

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

このChartのCommunity Editionを使用する場合

デフォルトでは、HelmチャートはGitLabのEnterprise Editionを使用します。必要であれば、代わりに 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

ホスト

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

サービス名

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

ポート

Redisサーバに接続するポート。デフォルトは6379 です。

パスワード

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

  • secret KubernetesSecret からプルする名前を定義します。
  • key は、パスワードを含む上記の秘密のキーの名前を定義します。

センチネル

sentinels 属性は Redis HA クラスターへの接続を許可します。サブキーは各Sentinel接続を説明します。

  • host はSentinelサービスのホスト名を定義します。
  • port Sentinelサービスに到達するポート番号を定義します。26379

_Note:_現在のRedis Sentinelサポートは、GitLabチャートとは別にデプロイされたSentinelのみをサポートしています。そのため、GitLabチャートを通してのRedisのデプロイは、redis.install=false で無効にする必要があります。Redisのパスワードを含むシークレットは、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

ホスト

使用するデータベースがある PostgreSQL サーバのホスト名。postgresql.install=true の場合は省略可能です(デフォルトは non-production)。

サービス名

PostgreSQLデータベースをオペレーションしているサービスの名前です。これが存在し、かつhost 存在しない場合、Chartは hostこの値のhost 代わりにサービスのホスト名をテンプレート化 hostします。

ポート

PostgreSQLサーバに接続するポート。デフォルトは5432 です。

データベース

PostgreSQLサーバで使用するデータベースの名前です。デフォルトはgitlabhq_production です。

preparedStatements

PostgreSQLサーバと通信する際に準備された文を使用するかどうか。デフォルトはfalse です。

ユーザー名

データベースを認証するユーザ名。デフォルトはgitlab

パスワード

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

  • secret KubernetesSecret からプルする名前を定義します。
  • key は、パスワードを含む上記の秘密のキーの名前を定義します。