GitLab-Migrationsチャートの使い方
migrations
サブチャートは GitLab データベースのシード/マイグレーションを行う単一のマイグレーションジョブを提供します。 このチャートは GitLab Rails コードベースを使って実行されます。
移行後、このジョブはデータベースのアプリケーション設定を編集し、認証鍵ファイルへの書き込みをオフにします。Chartでは認証鍵ファイルへの書き込みをサポートする代わりに、SSHAuthorizedKeysCommand
でのGitLab Authorized Keys APIの使用のみをサポートしています。
要件
このチャートはRedisとPostgreSQLに依存しており、GitLabチャートの一部として、あるいはこのチャートがデプロイされているKubernetesクラスターからアクセス可能な外部サービスとして提供されています。
デザインの選択
migrations
はチャートがデプロイされるたびに新しい migrationsジョブを作成します。 ジョブ名の衝突を防ぐために、チャートのリビジョンと、作成されるたびにランダムな英数字をジョブ名に付加します。 ランダムなテキストの目的についてはこのセクションで詳しく説明します。
今のところ、ジョブが完了した後もオブジェクトとしてクラスターに残るようにしています。 これはマイグレーションログを観察するためです。現在のところ、これらのジョブはhelm uninstall
の後でも残ります。 これはジョブ名にランダムなテキストを付加する理由の1つで、同じリリース名を使用する将来のデプロイがコンフリクトを引き起こさないようにするためです。 ある形式のログシッピングを導入したら、これらのオブジェクトの永続性を再検討することができます。
helm delete --purge
となります。このChartで使用しているコンテナには、現在このChartでは使用していない追加の最適化があります。 主に、マイグレーションがすでに最新であれば、railsアプリケーションを起動して確認しなくても、実行中のマイグレーションをすばやくスキップする機能です。 この最適化には、マイグレーションステータスを永続化する必要があります。 現時点ではこのChartでは行っていません。 将来的には、このChartにマイグレーションステータスのストレージサポートを導入する予定です。
設定
migrations
Chartは、外部サービスとチャート設定の2つの部分で構成されます。
インストールコマンドラインオプション
以下の表は、--set
フラグを使用して、helm install
コマンドに供給可能なすべてのチャート・コンフィギュレーションです。
パラメータ | 説明 | デフォルト |
---|---|---|
image.repository
| 移行イメージのリポジトリ | registry.gitlab.com/gitlab-org/build/cng/gitlab-task-runner-ee
|
image.tag
| 移行イメージタグ | |
image.pullPolicy
| 移行プルポリシー | Always
|
image.pullSecrets
| 画像リポジトリの秘密 | |
init.image
| initContainer イメージ | busybox
|
init.tag
| initContainer画像タグ | latest
|
enabled
| マイグレーション有効フラグ | true
|
tolerations
| ポッド割り当てのためのトレラベル | []
|
annotations
| ジョブ仕様の注釈 | {}
|
redis.serviceName
| Redisサービス名 | redis
|
psql.serviceName
| PostgreSQLを提供するサービス名 | release-postgresql
|
psql.password.secret
| psqlの秘密 | gitlab-postgres
|
psql.password.key
| psqlシークレットのpsqlパスワードへのキー | psql-password
|
psql.port
| PostgreSQL サーバのポートを設定します。global.psql.port
| |
resources.requests.cpu
| 250m
| GitLabマイグレーション最小cpu |
resources.requests.memory
| 200Mi
| GitLabマイグレーションの最小メモリ |
securityContext.fsGroup
| 1000
| ポッドを起動するグループID |
securityContext.runAsUser
| 1000
| ポッドを起動するユーザID |
extraInitContainers
| 追加するinitコンテナのリスト | |
extraContainers
| 追加コンテナのリスト | |
extraVolumes
| 作成する追加ボリュームのリスト | |
extraVolumeMounts
| 追加ボリュームのマウントリスト | |
extraEnv
| 公開する追加環境変数のリスト | |
bootsnap.enabled
| RailsのBootsnapキャッシュを有効にします。 | true
|
チャート構成例
エクストラエンバイロメント
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
画像.pullSecrets
pullSecrets
を使うと、非公開レジストリで認証してポッドのイメージを取り出せるようになります。
非公開レジストリとその認証方法についての詳細は、Kubernetesのドキュメントに記載されています。
以下はpullSecrets
の使用例です:
image:
repository: my.migrations.repository
pullPolicy: Always
pullSecrets:
- name: my-secret-name
- name: my-secondary-secret-name
このChartのコミュニティ版を使って
デフォルトでは、HelmチャートはGitLabのEnterprise Editionを使用します。 必要であれば、代わりにCommunity Editionを使用することもできます。両者の違いについてはこちらをご覧ください。
Community Editionを使用するには、image.repository
。registry.gitlab.com/gitlab-org/build/cng/gitlab-task-runner-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
が存在しない場合、チャートはhost
の値の代わりにサービスのホスト名 (および現在の.Release.Name
) をテンプレート化します。 これは GitLab チャート全体の一部として Redis を使用する場合に便利です。 これはデフォルトでredis
ポート
Redis サーバーに接続するポート。デフォルトは6379
です。
パスワード
Redisのpassword
属性には2つのサブキーがあります:
-
secret
からプルするKubernetesSecret
の名前を定義します。 -
key
はパスワードを含む上記の秘密のキーの名前を定義します。
衛兵
sentinels
属性はRedis HAクラスターへの接続を許可します。 サブキーは各Sentinel接続を説明します。
-
host
Sentinelサービスのホスト名を定義します。 -
port
は、Sentinelサービスにアクセスするためのポート番号を定義します。26379
_注意:_現在の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
です。
ステートメント
PostgreSQLサーバと通信する際にプリペアドステートメントを使用するかどうか。 デフォルトはfalse
です。
ユーザー名
データベースを認証するユーザー名。 デフォルトはgitlab
パスワード
PostgreSQLのpassword
属性にはサブキーがあります:
-
secret
からプルするKubernetesSecret
の名前を定義します。 -
key
はパスワードを含む上記の秘密のキーの名前を定義します。