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 installとhelm 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.repository | initContainerイメージリポジトリ | registry.gitlab.com/gitlab-org/build/cng/gitlab-base |
init.image.tag | initContainerイメージタグ | master |
init.image.containerSecurityContext | initコンテナsecurityContextオーバーライド | {} |
init.containerSecurityContext.allowPrivilegeEscalation | initContainer固有: プロセスが親プロセスよりも多くの特権を取得できるかどうかを制御します | false |
init.containerSecurityContext.runAsNonRoot | initContainer固有: コンテナを非rootユーザーで実行するかどうかを制御します | true |
init.containerSecurityContext.capabilities.drop | initContainer固有: コンテナのLinuxケイパビリティを削除します | [ "ALL" ] |
enabled | 移行の有効フラグ | true |
tolerations | ポッド割り当ての容認ラベル | [] |
affinity | ポッド割り当てのアフィニティルール | {} |
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 | GitLab移行の最小CPU | 250m |
resources.requests.memory | GitLab移行の最小メモリ | 200Mi |
securityContext.fsGroup | ポッドを開始するグループID | 1000 |
securityContext.runAsUser | ポッドを開始するユーザーID | 1000 |
securityContext.fsGroupChangePolicy | ボリュームの所有権とアクセス許可を変更するためのポリシー(Kubernetes 1.23が必要です) | |
securityContext.seccompProfile.type | 使用するSeccompプロファイル | RuntimeDefault |
containerSecurityContext.runAsUser | コンテナの開始元となるsecurityContextをオーバーライドします | 1000 |
containerSecurityContext.allowPrivilegeEscalation | コンテナのプロセスが親プロセスよりも多くの特権を取得できるかどうかを制御します | false |
containerSecurityContext.runAsNonRoot | コンテナを非rootユーザーで実行するかどうかを制御します | true |
containerSecurityContext.capabilities.drop | GitalyコンテナのLinuxケイパビリティを削除します | [ "ALL" ] |
serviceAccount.annotations | ServiceAccount注釈 | {} |
serviceAccount.automountServiceAccountToken | ポッドにデフォルトのServiceAccountアクセストークンをマップするかどうかを示します | false |
serviceAccount.create | ServiceAccountを作成するかどうかを示します | false |
serviceAccount.enabled | ServiceAccountを使用するかどうかを示します | false |
serviceAccount.name | ServiceAccountの名前。設定しない場合、完全なチャート名が使用されます | |
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_valueextraEnvFrom
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: booleanimage.pullSecrets
pullSecretsを使用すると、プライベートレジストリに対して認証を行い、ポッドのイメージをプルできます。
プライベートレジストリとその認証方法に関する追加の詳細は、Kubernetesドキュメントにあります。
pullSecretsの使用例を以下に示します:
image:
repository: my.migrations.repository
pullPolicy: Always
pullSecrets:
- name: my-secret-name
- name: my-secondary-secret-nameserviceAccount
このセクションでは、ServiceAccountを作成するかどうか、およびデフォルトのアクセストークンをポッドにマウントするかどうかを制御します。
| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
annotations | マップ | {} | ServiceAccount注釈。 |
automountServiceAccountToken | ブール値 | false | の設定は、デフォルトのServiceAccountアクセストークンをポッドにマウントする必要があるかどうかを制御します。これは、特定のサイドカーが正常に機能するために必要という場合(Istioなど)を除き、有効にしないようにしてください。 |
create | ブール値 | false | ServiceAccountを作成するかどうかを示します。 |
enabled | ブール値 | false | ServiceAccountを使用するかどうかを示します。 |
name | 文字列 | ServiceAccountの名前。設定しない場合、完全なチャート名が使用されます。 |
affinity
詳細については、affinityを参照してください。
このチャートのCommunity Editionの使用
デフォルトの場合、HelmチャートではGitLabのEnterprise Editionを使用します。必要に応じて、代わりにCommunity Editionを使用できます。2つのエディションの違いの詳細については、こちらをご覧ください。
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-passwordhost
使用するデータベースが格納されているRedisサーバーのホスト名。serviceNameの代わりとして省略できます。Redis Sentinelを使用している場合、host属性は、sentinel.confで指定されているクラスタ名に設定する必要があります。
serviceName
Redisデータベースを操作しているserviceの名前。これが存在し、hostが存在しない場合、チャートはhost値の代わりにサービスのホスト名(および現在の.Release.Name)をテンプレート処理します。これは、RedisをGitLabチャート全体の一部として使用する場合に便利です。これはデフォルトでredisになります
ポート
Redisサーバーへの接続に使用するポート。6379がデフォルトです。
password
Redisのpassword属性には、2つのサブキーがあります:
secretは、プル元のKubernetesSecretの名前を定義します。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-passwordhost
使用するデータベースを持つPostgreSQLサーバーのホスト名。これは、postgresql.install=true(デフォルトの非本番環境)の場合に省略できます。
serviceName
PostgreSQLデータベースを操作しているサービス名の名前。これが存在し、hostが存在しない場合、チャートはhost値の代わりにサービスのホスト名をテンプレート処理します。
ポート
PostgreSQLサーバーへの接続に使用するポート。5432がデフォルトです。
データベース
PostgreSQLサーバーで使用するデータベースの名前。これはデフォルトでgitlabhq_productionになります。
preparedStatements
PostgreSQLサーバーとの通信時にプリペアドステートメントを使用するかどうか。falseがデフォルトです。
ユーザー名
データベースへの認証に使用するユーザー名。これはデフォルトでgitlabになります
password
PostgreSQLのpassword属性には、2つのサブキーがあります:
secretは、プル元のKubernetesSecretの名前を定義します。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内のキーの名前を定義します。