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.repository | initContainer 画像リポジトリ | registry.gitlab.com/gitlab-org/build/cng/gitlab-base |
init.image.tag | initContainer画像タグ | master |
init.image.containerSecurityContext | init コンテナ securityContext のオーバーライド。 | {} |
enabled | マイグレーション有効フラグ | true |
tolerations | ポッド割り当て用のトレラベル | [] |
annotations | ジョブ仕様の注釈 | {} |
podAnnotations | POB仕様の注釈 | {} |
podLabels | ポッドラベルの補足。セレクタには使用されません。 | |
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 |
securityContext.fsGroupChangePolicy | ボリュームの所有権と権限を変更するためのポリシー (Kubernetes 1.23 が必要) | |
containerSecurityContext.runAsUser | コンテナが起動するコンテナsecurityContext をオーバーライドします。 | 1000 |
extraInitContainers | 追加コンテナのリスト | |
extraContainers | 追加コンテナのリスト | |
extraVolumes | 作成する追加ボリュームのリスト | |
extraVolumeMounts | 追加ボリュームマウントのリスト | |
extraEnv | 公開する追加環境変数のリスト | |
extraEnvFrom | 公開する他のデータソースの追加環境変数のリスト | |
bootsnap.enabled | Railsの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.repository
をregistry.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
は、パスワードを含む上記の秘密のキーの名前を定義します。