GitLab-Gitalyチャートの使い方
gitaly
サブチャートでは、Gitalyサーバーのデプロイを設定することができます。
要件
このチャートは、GitLabチャートの一部として、またはこのチャートがデプロイされているKubernetesクラスターからアクセス可能な外部サービスとして提供されているWorkhorseサービスへのアクセスに依存しています。
デザインの選択
このチャートで使っているGitalyコンテナには、GitLab Shellのコードベースも含まれています。GitalyコンテナにはGitLab Shellコンテナのコピーも含まれているので、このチャートでGitLab Shellを設定する必要があります。
設定
gitaly
Chartは、外部サービスとチャート設定の2つの部分で構成されます。
GitalyはデフォルトではGitLabチャートをデプロイする際にコンポーネントとしてデプロイされます。 Gitalyを個別にデプロイする場合は、global.gitaly.enabled
をfalse
に設定し、外部のGitalyドキュメントに記載されているように追加の設定を行う必要があります。
インストールコマンドラインオプション
以下の表は、--set
フラグを使用して、helm install
コマンドに供給できるすべての可能なチャート設定です。
パラメータ | デフォルト | 説明 |
---|---|---|
annotations
| ポッド注釈 | |
external[].hostname
| - ""
| 外部ノードのホスト名 |
external[].name
| - ""
| 外部ノードストレージ名 |
external[].port
| - ""
| 外部ノードのポート |
extraContainers
| 追加コンテナのリスト | |
extraInitContainers
| 追加するinitコンテナのリスト | |
extraVolumeMounts
| 追加ボリュームのマウントリスト | |
extraVolumes
| 作成する追加ボリュームのリスト | |
extraEnv
| 公開する追加環境変数のリスト | |
gitaly.serviceName
| 生成されるGitalyサービスの名前。global.gitaly.serviceName を上書きし、デフォルトは次のようになります。<RELEASE-NAME>-gitaly
| |
image.pullPolicy
| Always
| Gitalyイメージプルポリシー |
image.pullSecrets
| 画像リポジトリの秘密 | |
image.repository
| registry.com/gitlab-org/build/cng/gitaly
| Gitaly 画像リポジトリ |
image.tag
| latest
| Gitaly画像タグ |
init.image.repository
| initContainer イメージ | |
init.image.tag
| initContainer画像タグ | |
internal.names[]
| - default
| 統計フルセット・ストレージの名前の並び順 |
service.externalPort
| 8075
| Gitalyサービス公開ポート |
service.internalPort
| 8075
| Gitaly内部ポート |
service.name
| gitaly
| ServiceオブジェクトでGitalyがビハインドしているServiceポートの名前です。 |
service.type
| ClusterIP
| Gitalyサービスタイプ |
securityContext.fsGroup
| 1000
| ポッドを起動するグループID |
securityContext.runAsUser
| 1000
| ポッドを起動するユーザID |
tolerations
| []
| ポッド割り当てのためのトレラベル |
persistence.accessMode
| ReadWriteOnce
| Gitaly永続アクセスモード |
persistence.annotations
| Gitaly永続性アノテーション | |
persistence.enabled
| true
| Gitalyが永続性を有効にするフラグ |
persistence.matchExpressions
| ラベル式マッチ | |
persistence.matchLabels
| バインドするラベルと値の一致 | |
persistence.size
| 50Gi
| Gitaly 永続性ボリュームサイズ |
persistence.storageClass
| プロビジョニング用の storageClassName | |
persistence.subPath
| Gitaly 永続ボリュームマウントパス | |
priorityClassName
| Gitaly StatefulSet priorityClassName。 | |
logging.level
| ログレベル | |
logging.format
| json
| ログフォーマット |
logging.sentryDsn
| Sentry DSN URL - Go サーバーからの例外 | |
logging.rubySentryDsn
| Sentry DSN URL - 以下の例外が発生します。gitaly-ruby
| |
logging.sentryEnvironment
| ロギングに使用するSentry環境 | |
ruby.maxRss
| Gitaly-Ruby の常駐セットサイズ(RSS) メモリ再起動のトリガーとなるサイズ (バイト) | |
ruby.gracefulRestartTimeout
| 最大RSSを超えてから強制再起動するまでの猶予期間 | |
ruby.restartDelay
| 再起動前にGitalyメモリがハイのままでなければならない時間(秒) | |
ruby.numWorkers
| Gitaly-Rubyワーカープロセス数 | |
shell.concurrency[]
| 各 RPC エンドポイントの同時実行数rpc およびmaxPerRepo
| |
git.catFileCacheSize
| git cat-file プロセスが使用するキャッシュサイズ | |
prometheus.grpcLatencyBuckets
| Gitalyが記録するGRPCメソッド呼び出しのヒストグラムレイテンシに対応するバケット。 入力として、配列の文字列形式(例えば、"[1.0, 1.5, 2.0]" )が必要です。
|
チャート構成例
エクストラエンバイロメント
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.gitaly.repository
tag: latest
pullPolicy: Always
pullSecrets:
- name: my-secret-name
- name: my-secondary-secret-name
こうわん
tolerations
汚染されたワーカーノードでポッドのスケジューリングが可能
以下はtolerations
の使用例です:
tolerations:
- key: "node_label"
operator: "Equal"
value: "true"
effect: "NoSchedule"
- key: "node_label"
operator: "Equal"
value: "true"
effect: "NoExecute"
コンメンタール
annotations
は、Gitalyポッドに注釈を追加することができます。
以下はannotations
の使用例です:
annotations:
kubernetes.io/example-annotation: annotation-value
優先クラス名
priorityClassName
では、GitalyポッドにPriorityClassを割り当てることができます。
以下はpriorityClassName
の使用例です:
priorityClassName: persistence-enabled
外部サービス
このChartはWorkhorseのサービスに添付されているはずです。
ワークホース
workhorse:
host: workhorse.example.com
serviceName: webservice
port: 8181
名称 | タイプ | デフォルト | 説明 |
---|---|---|---|
host
| 文字列 | Workhorse サーバーのホスト名。これはserviceName の代わりに省略できます。
| |
port
| 整数 | 8181
| Workhorseサーバーに接続するポート。 |
serviceName
| 文字列 | webservice
| Workhorse サーバーをオペレーションしているservice の名前。これが存在し、host が存在しない場合、チャートはhost の値の代わりにサービスのホスト名(と現在の.Release.Name )をテンプレート化します。これは Workhorse を GitLab チャート全体の一部として使う場合に便利です。
|
チャート設定
以下の値は、Gitalyポッドの設定に使用されます。
global.gitaly.authToken
。さらに、GitalyコンテナにはGitLab Shellのコピーがあり、設定可能ないくつかの設定があります。 ShellのauthTokenはglobal.shell.authToken
。gitリポジトリの永続性
このチャートは、PersistentVolumeClaimをプロビジョニングし、対応する永続ボリュームをGitリポジトリデータ用にマウントします。 これを動作させるには、Kubernetesクラスターで利用可能な物理ストレージが必要です。 emptyDirを使いたい場合は、persistence.enabled: false
でPersistentVolumeClaimを無効にしてください。
VolumeClaimTemplate
は不変です。persistence:
enabled: true
storageClass: standard
accessMode: ReadWriteOnce
size: 50Gi
matchLabels: {}
matchExpressions: []
subPath: "/data"
annotations: {}
名称 | タイプ | デフォルト | 説明 |
---|---|---|---|
accessMode
| 文字列 | ReadWriteOnce
| PersistentVolumeClaimで要求されたaccessModeを設定します。 詳細は「Kubernetes Access Modes Documentation」を参照してください。 |
enabled
| ブーリアン | true
| レポデータに PersistentVolumeClaims を使用するかどうかを設定します。false の場合、emptyDir ボリュームが使用されます。
|
matchExpressions
| 配列 | バインドするボリュームを選択する際に照合するラベル条件オブジェクトの配列を受け付けます。 これはPersistentVolumeClaim selector セクションで使用します。volume のドキュメントを参照ください。
| |
matchLabels
| 地図 | バインドするボリュームを選択する際に照合するラベル名とラベル値のマップを受け付けます。 これはPersistentVolumeClaim selector セクションで使用します。ボリュームのドキュメントを参照してください。
| |
size
| 文字列 | 50Gi
| データ永続化のために要求する最小ボリューム・サイズ。 |
storageClass
| 文字列 | 動的プロビジョニングのためにボリュームクレームのstorageClassNameを設定します。 未設定またはNULLの場合、デフォルトのプロビジョナーが使用されます。 ハイフンを設定すると、動的プロビジョニングは無効になります。 | |
subPath
| 文字列 | ボリューム・ルートではなく、マウントするボリューム内のパスを設定します。 サブパスが空の場合はルートが使用されます。 | |
annotations
| 地図 | 動的プロビジョニングのためのVolume Claimにアノテーションを設定します。 詳細はKubernetes Annotations Documentationを参照してください。 |
TLSでGitalyを動かす
Gitalyは、TLSを介した他のコンポーネントとの通信をサポートしています。 これは、global.gitaly.tls.enabled
とglobal.gitaly.tls.secretName
の設定によって制御されます。 TLSを介してGitalyを実行するための手順に従ってください:
-
Chartは、GitalyとTLSで通信するために証明書が提供されることを期待します。 この証明書は、存在するすべてのGitalyノードに適用されるべきです。 したがって、これらのGitalyノードのそれぞれのすべてのホスト名は、証明書のサブジェクト代替名(SAN) として追加されるべきです。
使用するホスト名を知るには、task-runnerポッドの
/srv/gitlab/config/gitlab.yml
ファイルをチェックし、その中のrepositories.storages
キーの下に指定されているさまざまなgitaly_address
フィールドをチェックします。kubectl exec -it <task-runner pod> -- grep gitaly_address /srv/gitlab/config/gitlab.yml
-
作成した証明書を使ってk8s TLSシークレットを作成します。
kubectl create secret tls gitaly-server-tls --cert=gitaly.crt --key=gitaly.key
-
引数を渡してHelmチャートを再デプロイします。
--set global.gitaly.tls.enabled=true --set global.gitaly.tls.secretName=<secret name>