Praefectチャート(α)を使って
Praefectチャートは、HelmチャートでデプロイされたGitLabインストール内のGitalyクラスタを管理するために使用されます。
既知の制限とイシュー
- データベースは手動で作成する必要があります。
- クラスターのサイズは固定です:Gitaly Clusterは現在自動スケーリングをサポートしていません。
- クラスタ内のPraefectインスタンスを使用してクラスタ外のGitalyインスタンスを管理することはサポートされていません。
- Chartのバージョン4.8(GitLab 13.8)にアップグレードすると、リポジトリデータが失われた_ように_見えるイシューが発生します。データは失われませんが、手動での操作が必要です。
要件
このチャートはGitalyチャートを消費します。global.gitaly
からの設定は、このチャートによって作成されるインスタンスを構成するために使用されます。これらの設定のドキュメントは、Gitalyチャートのドキュメントにあります。
_イン_ポート:global.gitaly.tls
はglobal.praefect.tls
から独立しており、別々に設定されます。
デフォルトでは、このChartは3つのGitaly Replicasを作成します。
設定
Chartはデフォルトで無効になっています。チャートの一部として有効にするには、global.praefect.enabled=true
を設定します。
レプリカ
デプロイするレプリカのデフォルト数は3です。global.praefect.virtualStorages[].gitalyReplicas
を希望のレプリカ数に設定することで変更できます。例えば
global:
praefect:
enabled: true
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
複数の仮想ストレージ
複数の仮想ストレージを設定することができます(Gitaly Clusterのドキュメントを参照)。例えば
global:
praefect:
enabled: true
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
- name: vs2
gitalyReplicas: 5
maxUnavailable: 2
これはGitalyのリソースを2セット作成します。これには2つのGitaly StatefulSetが含まれます(仮想ストレージごとに1つ)。
管理者は、新しいリポジトリがどこに保存されるかを設定できます。
永続性
仮想ストレージごとに永続性設定を行うことができます。
global:
praefect:
enabled: true
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
persistence:
enabled: true
size: 50Gi
accessMode: ReadWriteOnce
storageClass: storageclass1
- name: vs2
gitalyReplicas: 5
maxUnavailable: 2
persistence:
enabled: true
size: 100Gi
accessMode: ReadWriteOnce
storageClass: storageclass2
defaultReplicationFactor
defaultReplicationFactor
は各仮想ストレージで設定できます。(configure replication-factorのドキュメントを参照)。
global:
praefect:
enabled: true
virtualStorages:
- name: default
gitalyReplicas: 5
maxUnavailable: 2
defaultReplicationFactor: 3
- name: secondary
gitalyReplicas: 4
maxUnavailable: 1
defaultReplicationFactor: 2
マイグレーション
スタンドアロンの Gitaly インスタンスから Praefect セットアップにマイグレーションする場合、global.praefect.replaceInternalGitaly
をfalse
に設定できます。これにより、既存の Gitaly インスタンスが維持され、Praefect が管理する新しい Gitaly インスタンスが作成されます。
global:
praefect:
enabled: true
replaceInternalGitaly: false
virtualStorages:
- name: virtualStorage2
gitalyReplicas: 5
maxUnavailable: 2
default
。 default
これは、常にdefault
少なくとも1つのストレージに名前が付けられている必要があるため default
、Praefect以外の設定によって名前がすでに使用されているためです。Gitaly Cluster へのマイグレーションの手順に従って、default
ストレージからvirtualStorage2
にデータを移行できます。global.gitaly.internal.names
の下に追加のストレージが定義されている場合は、それらのストレージからリポジトリもマイグレーションしてください。
virtualStorage2
にリポジトリがマイグレーションされた後、default
というストレージが Praefect 設定に追加されている場合は、replaceInternalGitaly
をtrue
に戻すことができます。
global:
praefect:
enabled: true
replaceInternalGitaly: true
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
- name: virtualStorage2
gitalyReplicas: 5
maxUnavailable: 2
Gitaly クラスターへのマイグレーションの手順に従って、virtualStorage2
から新しく追加されたdefault
ストレージにデータを移動できます。
最後に、新しいリポジトリがどこに保存されるかを設定するには、リポジトリの保存パスのドキュメントを参照してください。
データベースの作成
Praefectは独自のデータベースを使用して状態を追跡します。Praefectを機能させるためには、手動でデータベースを作成する必要があります。
-
データベースインスタンスにログインしてください:
kubectl exec -it $(kubectl get pods -l app=postgresql -o custom-columns=NAME:.metadata.name --no-headers) -- bash
PGPASSWORD=$(cat $POSTGRES_POSTGRES_PASSWORD_FILE) psql -U postgres -d template1
-
データベースユーザーを作成します:
CREATE ROLE praefect WITH LOGIN;
-
データベースユーザーのパスワードを設定します。
デフォルトでは、
shared-secrets
ジョブがあなたのためにシークレットを生成します。-
パスワードを取得してください:
kubectl get secret RELEASE_NAME-praefect-dbsecret -o jsonpath="{.data.secret}" | base64 --decode
-
psql
プロンプトでパスワードを設定します:\password praefect
-
-
データベースを作成します:
CREATE DATABASE praefect WITH OWNER praefect;
TLS経由でのPraefectの実行
Praefectは、TLS経由でクライアントとGitalyノードとの通信をサポートしています。これは、global.praefect.tls.enabled
とglobal.praefect.tls.secretName
の設定によって制御されます。TLS経由でPraefectを実行するには、以下の手順に従ってください:
-
Helmチャートは、PraefectとTLSで通信するために証明書が提供されることを期待します。この証明書は、存在するすべてのPraefectノードに適用する必要があります。したがって、これらの各ノードのすべてのホスト名を証明書のサブジェクト代替名((SAN) )として追加するか、ワイルドカードを使用します。
使用するホスト名を知るには、Toolbox ポッド内のファイル
/srv/gitlab/config/gitlab.yml
を確認し、その中のrepositories.storages
キーで指定されているさまざまなgitaly_address
フィールドを確認します。kubectl exec -it <Toolbox Pod> -- grep gitaly_address /srv/gitlab/config/gitlab.yml
-
作成した証明書を使用してTLSシークレットを作成します。
kubectl create secret tls <secret name> --cert=praefect.crt --key=praefect.key
-
--set global.praefect.tls.enabled=true
を渡して、Helmチャートを再デプロイします。
TLS経由でGitalyを実行する場合、各仮想ストレージにシークレットネームを提供する必要があります。
global:
gitaly:
tls:
enabled: true
praefect:
enabled: true
tls:
enabled: true
secretName: praefect-tls
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
tlsSecretName: default-tls
- name: vs2
gitalyReplicas: 5
maxUnavailable: 2
tlsSecretName: vs2-tls
インストールのコマンドラインオプション
以下の表は、--set
フラグを使用してhelm install
コマンドに提供できるすべての可能な Chart 設定です。
パラメータ | デフォルト | 説明 |
---|---|---|
共通ラベル | {} | このChartで作成されたすべてのオブジェクトに適用される補助ラベル。 |
フェイルオーバー有効 | true | ノード障害時にPraefectがフェイルオーバーを実行するかどうか |
フェイルオーバー.readonlyAfter | false | フェイルオーバー後にノードを読み取り専用モードにするかどうか |
自動移行 | true | 起動時にマイグレーションを自動実行 |
リポジトリ | registry.gitlab.com/gitlab-org/build/cng/gitaly | 使用するデフォルトの画像リポジトリ。PraefectはGitalyイメージの一部としてバンドルされています。 |
ポッドラベル | {} | ポッドラベルの補足。セレクタには使用されません。 |
ntpHost | pool.ntp.org | Praefect が現在時刻を問い合わせる NTP サーバーを設定します。 |
サービス名 | praefect | 作成するサービス名 |
サービスタイプ | クラスタIP | 作成するサービスのタイプ |
サービス.internalPort | 8075 | ポッドがリッスンする内部ポート番号。 |
service.externalPort | 8075 | クラスターでPraefectサービスが公開するポート番号。 |
init.リソース | ||
init.image | ||
追加EnvFrom | 公開する他のデータソースの追加環境変数のリスト | |
ロギングレベル | ログレベル | |
ログフォーマット | json | ログのフォーマット |
logging.sentryDsn | Sentry DSN URL - Go サーバーからの例外 | |
logging.sentryEnvironment | ロギングに使われるSentry環境 | |
metrics.enabled | true | メトリクスエンドポイントをスクレイピングのために利用可能にする場合 |
metrics.port | 9236 | メトリクス・エンドポイント・ポート |
metrics.separate_database_metrics | true | trueの場合、メトリクス・スクレイプはデータベース・クエリを実行しません。 |
metrics.path | /metrics | メトリクスエンドポイントパス |
metrics.serviceMonitor.enabled | false | Prometheus Operatorがメトリクスのスクレイピングを管理できるようにServiceMonitorを作成する必要がある場合、これを有効にすると、prometheus.io スクレイピング注釈が削除されることに注意してください。 |
metrics.serviceMonitor.additionalLabels | {} | ServiceMonitorに追加するラベル |
metrics.serviceMonitor.endpointConfig | {} | ServiceMonitorの追加エンドポイント設定 |
securityContext.runAsUser | 1000 | |
セキュリティコンテキスト.fsGroup | 1000 | |
securityContext.fsGroupChangePolicy。 | ボリュームの所有権と権限を変更するためのポリシー (Kubernetes 1.23 が必要) | |
サービスラベル | {} | 補足サービスラベル |
ステートフルセット戦略 | {} | ステートフルセットが使用する更新ストラテジーを設定します。 |