- 要件
- 設定
- インストールのコマンドラインオプション
- Chart設定例
- このChartのCommunity Editionを使用する場合
- グローバル設定
- デプロイの設定
- Ingressの設定
- リソース
- 外部サービス
- チャート設定
-
設定
networkpolicy
- KEDAの設定
GitLab ウェブサービスチャートの使用
webservice
サブチャートは、GitLab Rails ウェブサーバにポッドごとに 2 つのウェブサービスワーカーを提供します。(GitLabのあらゆるウェブリクエストを一つのポッドで処理するために最低限必要なものです)
このChartのポッドは、gitlab-workhorse
とwebservice
の2つのコンテナを利用しています。GitLab Workhorseはポート8181
をリッスンし、ポッドへのインバウンドトラフィックの宛先と_なります_。webservice
には GitLabRails コードベースが格納され、8080
でリッスンし、メトリクス収集の目的でアクセスできます。webservice
は、通常のトラフィックを直接受け取ってはいけません。
要件
このチャートはRedis、PostgreSQL、Gitaly、レジストリサービスに依存しています。これらはGitLabチャートの一部として提供されているか、このチャートがデプロイされたKubernetesクラスターからアクセス可能な外部サービスとして提供されています。
設定
webservice
Chart の設定は以下のとおりです:グローバル設定、デプロイ設定、イングレス設定、外部サービス、チャート設定。
インストールのコマンドラインオプション
以下の表は、--set
フラグを使用して、helm install
コマンドに供給できるすべての可能なチャート設定を示しています。
パラメータ | デフォルト | 説明 |
---|---|---|
annotations | ポッド注釈 | |
podLabels | ポッドラベルの補足。セレクタには使用されません。 | |
common.labels | このChartで作成されたすべてのオブジェクトに適用される補助ラベル。 | |
deployment.terminationGracePeriodSeconds | 30 | Kubernetesがポッドの終了を待つ秒数。shutdown.blackoutSeconds
|
deployment.livenessProbe.initialDelaySeconds | 20 | Liveness Probeが開始されるまでの遅延時間 |
deployment.livenessProbe.periodSeconds | 60 | Livenessプローブの実行頻度 |
deployment.livenessProbe.timeoutSeconds | 30 | Livenessプローブがタイムアウトした場合 |
deployment.livenessProbe.successThreshold | 1 | 一度失敗したプローブが成功したとみなされるための最小連続成功回数 |
deployment.livenessProbe.failureThreshold | 3 | 成功した後に失敗したとみなされるための連続した失敗の最小値 |
deployment.readinessProbe.initialDelaySeconds | 0 | Readiness Probeが開始されるまでの遅延。 |
deployment.readinessProbe.periodSeconds | 10 | Readinessプローブの実行頻度 |
deployment.readinessProbe.timeoutSeconds | 2 | 準備完了プローブがタイムアウトした場合 |
deployment.readinessProbe.successThreshold | 1 | Readinessプローブが失敗した後、成功したとみなされるための最小連続成功回数 |
deployment.readinessProbe.failureThreshold | 3 | 成功した後、レディネス・プローブが失敗したとみなされるには、最低連続失敗回数が必要です。 |
deployment.strategy | {} | デプロイで使用される更新ストラテジを設定できます。指定しない場合は、クラスターのデフォルトが使用されます。 |
enabled | true | ウェブサービス有効フラグ |
extraContainers | 追加コンテナのリスト | |
extraInitContainers | 追加コンテナのリスト | |
extras.google_analytics_id | nil | フロントエンド用のGoogle Analytics ID |
extraVolumeMounts | 追加ボリュームマウントのリスト | |
extraVolumes | 作成する追加ボリュームのリスト | |
extraEnv | 公開する追加環境変数のリスト | |
extraEnvFrom | 公開する他のデータソースの追加環境変数のリスト | |
gitlab.webservice.workhorse.image | registry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ee | Workhorse イメージリポジトリ |
gitlab.webservice.workhorse.tag | Workhorse画像タグ | |
hpa.behavior | {scaleDown: {stabilizationWindowSeconds: 300 }} | ビヘイビアには、アップスケーリングとダウンスケーリングのビヘイビアの仕様が含まれます(autoscaling/v2beta2 以上が必要です)。 |
hpa.customMetrics | [] | カスタム・メトリクスには、希望するレプリカ数を計算するために使用するメトリクスの設定が含まれます(targetAverageUtilization で設定された平均CPU使用率をデフォルトで上書きします)。 |
hpa.cpu.targetType | AverageValue | オートスケーリングCPUターゲット・タイプを設定します。Utilization またはAverageValue
|
hpa.cpu.targetAverageValue | 1 | オートスケーリングCPUターゲット値の設定 |
hpa.cpu.targetAverageUtilization | オートスケーリングCPUターゲット使用率の設定 | |
hpa.memory.targetType |
Utilization 、またはAverageValue
| |
hpa.memory.targetAverageValue | オートスケーリング・メモリ・ターゲットの値を設定します。 | |
hpa.memory.targetAverageUtilization | オートスケーリングメモリ使用率の設定 | |
hpa.targetAverageValue | 自動スケーリングCPU目標値の設定 | |
sshHostKeys.mount | false | 公開SSHキーを含むGitLab Shellシークレットをマウントするかどうか。 |
sshHostKeys.mountName | ssh-host-keys | マウントするボリュームの名前。 |
sshHostKeys.types | [dsa,rsa,ecdsa,ed25519] | マウントするSSHキーの種類のリスト。 |
image.pullPolicy | Always | ウェブサービス画像プルポリシー |
image.pullSecrets | 画像リポジトリのシークレット | |
image.repository | registry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ee | ウェブサービスの画像リポジトリ |
image.tag | ウェブサービス画像タグ | |
init.image.repository | initContainer 画像 | |
init.image.tag | initContainer画像タグ | |
keda.enabled | false | の代わりにKEDA ScaledObjects を使用します。HorizontalPodAutoscalers
|
keda.pollingInterval | 30 | 各トリガーを |
keda.cooldownPeriod | 300 | リソースを0にスケールバックする前に、最後のトリガがアクティブであると報告された後、待機する期間。 |
keda.minReplicaCount | KEDAがリソースをスケールダウンする最小レプリカ数。minReplicas
| |
keda.maxReplicaCount | KEDAがリソースをスケールアップする際の最大レプリカ数。maxReplicas
| |
keda.fallback | KEDAフォールバック設定。 | |
keda.hpaName | KEDAが作成するHPAリソースの名前。keda-hpa-{scaled-object-name}
| |
keda.restoreToOriginalReplicaCount |
ScaledObject が削除された後、ターゲットリソースを元のレプリカ数にスケールバックするかどうかを指定します。 | |
keda.behavior | アップスケーリングとダウンスケーリングの動作を指定します。hpa.behavior
| |
keda.triggers | 対象リソースのスケーリングを有効にするトリガーのリスト。デフォルトはhpa.cpu とhpa.memory
| |
metrics.enabled | true | メトリクスエンドポイントをスクレイピングのために利用可能にする場合 |
metrics.port | 8083 | メトリクス・エンドポイント・ポート |
metrics.path | /metrics | メトリクスエンドポイントパス |
metrics.serviceMonitor.enabled | false | Prometheus Operatorがメトリクスのスクレイピングを管理できるようにServiceMonitorを作成する必要がある場合、これを有効にすると、prometheus.io スクレイピング注釈が削除されることに注意してください。 |
metrics.serviceMonitor.additionalLabels | {} | ServiceMonitorに追加するラベル |
metrics.serviceMonitor.endpointConfig | {} | ServiceMonitorの追加エンドポイント設定 |
metrics.annotations | 廃止明示的なメトリクス・アノテーションを設定します。テンプレート・コンテンツに置き換えられました。 | |
metrics.tls.enabled | メトリクス/web_exporter エンドポイントで TLS を有効にします。デフォルトはtls.enabled 。 | |
metrics.tls.secretName | メトリクス/web_exporter エンドポイントの TLS 証明書とキーのシークレット。デフォルトはtls.secretName です。 | |
minio.bucket | git-lfs | MinIO を使用する場合のストレージ・バケットの名前。 |
minio.port | 9000 | MinIOサービスのポート |
minio.serviceName | minio-svc | MinIOサービス名 |
monitoring.ipWhitelist | [0.0.0.0/0] | 監視エンドポイント用にホワイトリストに登録するIPのリスト |
monitoring.exporter.enabled | false | Prometheusメトリクスを公開するWebサーバーを有効にします。メトリクスのポートがモニタリングエクスポーターのポートに設定されている場合、これはmetrics.enabled 。 |
monitoring.exporter.port | 8083 | メトリクスエクスポーターに使用するポート番号。 |
psql.password.key | psql-password | psqlシークレットのpsqlパスワードへの鍵 |
psql.password.secret | gitlab-postgres | psqlシークレット名 |
psql.port | PostgreSQL サーバのポートを設定します。よりも優先されます。global.psql.port
| |
puma.disableWorkerKiller | true | Pumaワーカーのメモリキラーを無効にします。 |
puma.workerMaxMemory | Puma ワーカーキラーの最大メモリ (メガバイト単位) | |
puma.threads.min | 4 | Pumaスレッドの最小量 |
puma.threads.max | 4 | Pumaスレッドの最大数 |
rack_attack.git_basic_auth | {} | 詳しくはGitLab ドキュメントをご覧ください。 |
redis.serviceName | redis | Redis サービス名 |
global.registry.api.port | 5000 | レジストリポート |
global.registry.api.protocol | http | レジストリプロトコル |
global.registry.api.serviceName | registry | レジストリサービス名 |
global.registry.enabled | true | 全プロジェクトメニューのレジストリリンクの追加/削除 |
global.registry.tokenIssuer | gitlab-issuer | レジストリトークン発行者 |
replicaCount | 1 | ウェブサービス レプリカ数 |
resources.requests.cpu | 300m | ウェブサービスの最小CPU |
resources.requests.memory | 1.5G | ウェブサービスの最小メモリ |
service.externalPort | 8080 | ウェブサービスの公開ポート |
securityContext.fsGroup | 1000 | ポッドを起動するグループID |
securityContext.runAsUser | 1000 | ポッドを起動するユーザーID |
securityContext.fsGroupChangePolicy | ボリュームの所有権と権限を変更するためのポリシー (Kubernetes 1.23 が必要) | |
containerSecurityContext | コンテナが起動するコンテナsecurityContext をオーバーライドします。 | |
containerSecurityContext.runAsUser | コンテナが起動される特定のセキュリティコンテキストを上書きできるようにします。 | 1000 |
serviceLabels | {} | 補足サービスラベル |
service.internalPort | 8080 | ウェブサービス内部ポート |
service.type | ClusterIP | ウェブサービスのサービスタイプ |
service.workhorseExternalPort | 8181 | Workhorse公開ポート |
service.workhorseInternalPort | 8181 | Workhorse内部ポート |
service.loadBalancerIP | ロードバランサーに割り当てるIPアドレス(クラウドプロバイダーがサポートしている場合) | |
service.loadBalancerSourceRanges | ロードバランサーへのアクセスを許可する IP CIDR のリスト (サポートされている場合) service.type = LoadBalancer の場合に必要です。 | |
shell.authToken.key | secret | シェルシークレットのシェルトークンへのキー |
shell.authToken.secret | {Release.Name}-gitlab-shell-secret | シェルトークンのシークレット |
shell.port | nil | UIが生成するSSH URLで使用するポート番号 |
shutdown.blackoutSeconds | 10 | シャットダウンを受け取った後、Webサービスを実行し続ける秒数。deployment.terminationGracePeriodSeconds
|
tls.enabled | false | ウェブサービスの TLS 有効 |
tls.secretName | {Release.Name}-webservice-tls |
secretName 、KubernetesのTLSシークレットを指す必要があります。 |
tolerations | [] | ポッド割り当て用のトレラベル |
trusted_proxies | [] | 詳しくはGitLab ドキュメントをご覧ください。 |
workhorse.logFormat | json | ログのフォーマット有効なフォーマット:json ,structured 、text
|
workerProcesses | 2 | ウェブサービスの作業者数 |
workhorse.keywatcher | true | Workhorse を Redis にサブスクライブします。これは/api/* へのリクエストを処理するデプロイでは必須ですが、その他のデプロイでは安全に無効にできます。 |
workhorse.shutdownTimeout |
global.webservice.workerTimeout + 1 (秒) | WorkhorseからのすべてのWebリクエストがクリアされるまでの待ち時間。例1min 65s . |
workhorse.trustedCIDRsForPropagation | 相関 ID を伝播するために信頼できる CIDR ブロックのリスト。これを動作させるには、workhorse.extraArgs で-propagateCorrelationID オプションも使用する必要があります。詳細はWorkhorse のドキュメントを参照してください。 | |
workhorse.trustedCIDRsForXForwardedFor |
X-Forwarded-For HTTP ヘッダを介して実際のクライアント IP を解決するために使用できる CIDR ブロックのリスト。これはworkhorse.trustedCIDRsForPropagation で使用されます。詳細はWorkhorseのドキュメントを参照してください。 | |
workhorse.livenessProbe.initialDelaySeconds | 20 | Liveness Probeが開始されるまでの遅延時間 |
workhorse.livenessProbe.periodSeconds | 60 | Livenessプローブの実行頻度 |
workhorse.livenessProbe.timeoutSeconds | 30 | Livenessプローブがタイムアウトした場合 |
workhorse.livenessProbe.successThreshold | 1 | 一度失敗したプローブが成功したとみなされるための最小連続成功回数 |
workhorse.livenessProbe.failureThreshold | 3 | 成功した後に失敗したとみなされるための連続した失敗の最小値 |
workhorse.monitoring.exporter.enabled | false | WorkhorseがPrometheusメトリクスを公開できるようにします。workhorse.metrics.enabled
|
workhorse.monitoring.exporter.port | 9229 | Workhorse Prometheusメトリクスに使用するポート番号。 |
workhorse.monitoring.exporter.tls.enabled | false |
true に設定すると、メトリクスのエンドポイントで TLS を有効にします。WorkhorseでTLSが有効になっている必要があります。 |
workhorse.metrics.enabled | true | Workhorseメトリクス・エンドポイントをスクレイピングに利用できるようにする場合 |
workhorse.metrics.port | 8083 | Workhorse メトリクスのエンドポイントポート |
workhorse.metrics.path | /metrics | Workhorse メトリクスのエンドポイント・パス |
workhorse.metrics.serviceMonitor.enabled | false | Prometheus OperatorがWorkhorseメトリクスのスクレイピングを管理できるようにServiceMonitorを作成する場合 |
workhorse.metrics.serviceMonitor.additionalLabels | {} | Workhorse ServiceMonitorに追加するラベル |
workhorse.metrics.serviceMonitor.endpointConfig | {} | Workhorse ServiceMonitorの追加エンドポイント設定 |
workhorse.readinessProbe.initialDelaySeconds | 0 | Readiness Probeが開始されるまでの遅延。 |
workhorse.readinessProbe.periodSeconds | 10 | Readinessプローブの実行頻度 |
workhorse.readinessProbe.timeoutSeconds | 2 | 準備完了プローブがタイムアウトした場合 |
workhorse.readinessProbe.successThreshold | 1 | Readinessプローブが失敗した後、成功したとみなされるための最小連続成功回数 |
workhorse.readinessProbe.failureThreshold | 3 | 成功した後、レディネス・プローブが失敗したとみなされるには、最低連続失敗回数が必要です。 |
workhorse.imageScaler.maxProcs | 2 | 同時に実行できるイメージ・スケーリング・プロセスの最大数 |
workhorse.imageScaler.maxFileSizeBytes | 250000 | スケーラーが処理する画像の最大ファイルサイズ(バイト単位 |
workhorse.tls.verify | true |
true に設定すると、NGINX Ingress は Workhorse の TLS 証明書を検証します。カスタム CA の場合は、workhorse.tls.caSecretName も設定する必要があります。自己署名証明書の場合はfalse に設定する必要があります。 |
workhorse.tls.secretName | {Release.Name}-workhorse-tls | TLSキーと証明書のペアを含むTLSシークレットの名前。Workhorse TLS が有効な場合に必要です。 |
workhorse.tls.caSecretName | CA 証明書を含むシークレットの名前。これはTLSシークレットではなく、ca.crt キーのみを持つ必要があります。これはNGINXによるTLS検証に使用されます。 | |
webServer | puma | リクエスト処理に使用するウェブサーバー(Webservice/Puma)を選択します。 |
priorityClassName | "" | ポッドの設定を許可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
deployments:
default:
extraEnvFrom:
CONFIG_STRING:
configMapKeyRef:
name: useful-config
key: some-string
# optional: boolean
画像.pullSecrets
pullSecrets
を使用すると、非公開レジストリで認証してポッドのイメージをプルできるようになります。
非公開レジストリとその認証方法の詳細については、Kubernetesのドキュメントを参照してください。
以下は、pullSecrets
の使用例です:
image:
repository: my.webservice.repository
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
を使用すると、Web サービスポッドに注釈を追加できます。例えば
annotations:
kubernetes.io/example-annotation: annotation-value
戦略
deployment.strategy
では、デプロイの更新戦略を変更できます。デプロイが更新されたときにポッドがどのように再作成されるかを定義します。指定されていない場合は、クラスターのデフォルトが使用されます。たとえば、ローリングアップデートの開始時に余分なポッドを作成したくない場合、最大利用不可ポッドを50%に変更します:
deployment:
strategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 50%
更新ストラテジーのタイプをRecreate
に変更することもできますが、新しいポッドをスケジュールする前にすべてのポッドが停止し、新しいポッドが起動するまで Web UI が利用できなくなるので注意してください。この場合、rollingUpdate
を定義する必要はなく、type
だけを定義します:
deployment:
strategy:
type: Recreate
詳細はKubernetesのドキュメントを参照してください。
TLS
Webservice ポッドは 2 つのコンテナを実行します:
gitlab-workhorse
webservice
gitlab-workhorse
Workhorse はウェブエンドポイントとメトリクスエンドポイントの両方で TLS をサポートしています。これにより、Workhorse と他のコンポーネント(特にnginx-ingress
、gitlab-shell
、gitaly
)との間の通信がセキュリティで保護されます。TLS証明書は、Common Name(CN) または Subject Alternate Name(SAN)にWorkhorse Serviceホスト名(例:RELEASE-webservice-default.default.svc
)を含める必要があります。
Webservice のデプロイは複数存在する可能性があるため、異なるサービス名用の TLS 証明書を準備する必要があることに注意してください。これは、複数の SAN またはワイルドカード証明書によって実現できます。
TLS証明書が生成されたら、それ用のKubernetes TLSシークレットを作成します。また、ca.crt
キー付きのTLS証明書のCA証明書のみを含む別のシークレットを作成する必要があります。
global.workhorse.tls.enabled
をtrue
に設定することで、gitlab-workhorse
コンテナで TLS を有効にすることができます。それに応じて、gitlab.webservice.workhorse.tls.secretName
とglobal.certificates.customCAs
にカスタムシークレット名を渡すことができます。
gitlab.webservice.workhorse.tls.verify
がtrue
の場合(デフォルト)、gitlab.webservice.workhorse.tls.caSecretName
に CA 証明書のシークレット名を渡す必要があります。これは自己署名証明書とカスタム CA の場合に必要です。このシークレットはNGINXがWorkhorseのTLS証明書を検証するために使用します。
global:
workhorse:
tls:
enabled: true
certificates:
customCAs:
- secret: gitlab-workhorse-ca
gitlab:
webservice:
workhorse:
tls:
verify: true
# secretName: gitlab-workhorse-tls
caSecretName: gitlab-workhorse-ca
monitoring:
exporter:
enabled: true
tls:
enabled: true
gitlab-workhorse
コンテナのメトリクス・エンドポイントでの TLS は、global.workhorse.tls.enabled
から継承されます。 メトリクス・エンドポイントでの TLS は、 Workhorse で TLS が有効になっている場合にのみ利用できることに注意してください。メトリクス・リスナーは、gitlab.webservice.workhorse.tls.secretName
で指定されているのと同じ TLS 証明書を使用します。
メトリクス・エンドポイントで使用される TLS 証明書は、特に付属の Prometheus Helm チャートを使用する場合、付属のサブジェクト代替名 (SAN) に対して追加の考慮が必要になる場合があります。詳細については、TLS対応エンドポイントをスクレイピングするPrometheusの設定を参照してください。
webservice
TLSを有効にする主なユースケースは、PrometheusメトリクスをスクレイピングするためにHTTPS経由で暗号化を提供することです。
Prometheus が HTTPS を使用して/metrics/
エンドポイントをスクレイピングするには、証明書のCommonName
属性またはSubjectAlternativeName
エントリに追加の設定が必要です。これらの要件については、TLS対応エンドポイントをスクレイピングするPrometheusの設定を参照してください。
TLS はgitlab.webservice.tls.enabled
の設定によりwebservice
コンテナで有効にすることができます:
gitlab:
webservice:
tls:
enabled: true
# secretName: gitlab-webservice-tls
secretName
はKubernetes TLSシークレットを指す必要があります。例えば、ローカルの証明書とキーでTLSシークレットを作成する場合:
kubectl create secret tls <secret name> --cert=path/to/puma.crt --key=path/to/puma.key
このChartのCommunity Editionを使用する場合
デフォルトでは、HelmチャートはGitLabのEnterprise Editionを使用しています。必要であれば、代わりに Community Edition を使うこともできます。両者の違いについてはこちらをご覧ください。
コミュニティ版を使うには、image.repository
をregistry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ce
に、workhorse.image
をregistry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ce
に設定します。
グローバル設定
私たちのChartには共通のグローバル設定があります。GitLabやレジストリのホスト名など、共通の設定オプションについてはGlobals Documentationをご覧ください。
デプロイの設定
このChartには、複数のデプロイオブジェクトとそれに関連するリソースを作成する機能があります。この機能により、GitLabアプリケーションへのリクエストをパスベースルーティングを使って複数のポッドセット間でディストリビューションすることができます。
この Map (default
この例では ) default
のキーdefault
はそれぞれの “name” です。 default
デプロイ、サービス、HorizontalPodAutoscaler、PodDisruptionBudget、そしてオプションでRELEASE-webservice-default
で作成された Ingress があります。
提供されていないプロパティは、gitlab-webservice
Chartのデフォルトを継承します。
deployments:
default:
ingress:
path: # Does not inherit or default. Leave blank to disable Ingress.
pathType: Prefix
provider: nginx
annotations:
# inherits `ingress.anntoations`
proxyConnectTimeout: # inherits `ingress.proxyConnectTimeout`
proxyReadTimeout: # inherits `ingress.proxyReadTimeout`
proxyBodySize: # inherits `ingress.proxyBodySize`
deployment:
annotations: # map
labels: # map
# inherits `deployment`
pod:
labels: # additional labels to .podLabels
annotations: # map
# inherit from .Values.annotations
service:
labels: # additional labels to .serviceLabels
annotations: # additional annotations to .service.annotations
# inherits `service.annotations`
hpa:
minReplicas: # defaults to .minReplicas
maxReplicas: # defaults to .maxReplicas
metrics: # optional replacement of HPA metrics definition
# inherits `hpa`
pdb:
maxUnavailable: # inherits `maxUnavailable`
resources: # `resources` for `webservice` container
# inherits `resources`
workhorse: # map
# inherits `workhorse`
extraEnv: #
# inherits `extraEnv`
extraEnvFrom: #
# inherits `extraEnvFrom`
puma: # map
# inherits `puma`
workerProcesses: # inherits `workerProcesses`
shutdown:
# inherits `shutdown`
nodeSelector: # map
# inherits `nodeSelector`
tolerations: # array
# inherits `tolerations`
デプロイ イングレス
deployments
の各エントリーはChart全体のIngress設定を継承します。ここで提示されるどの値も、そこで提供される値を上書きします。path
以外では、すべての設定はそれらと同じです。
webservice:
deployments:
default:
ingress:
path: /
api:
ingress:
path: /api
path
プロパティは、Ingress のpath
プロパティに直接入力され、各サービスに向けられる URI パスを制御することができます。上記の例では、default
がキャッチオール・パスとして機能し、api
は以下のすべてのトラフィックを受信します。/api
path
を空に設定することで、指定したデプロイに関連する Ingress リソースを作成させないようにすることができます。internal-api
は決して内部トラフィックを受け取りません。
webservice:
deployments:
default:
ingress:
path: /
api:
ingress:
path: /api
internal-api:
ingress:
path:
Ingressの設定
名前 | 種類 | デフォルト | 説明 |
---|---|---|---|
ingress.apiVersion | 文字列 |
apiVersion フィールドで使用する値。 | |
ingress.annotations | マップ | 下記参照 | これらの注釈はすべてのIngressで使用されます。例:ingress.annotations."nginx\.ingress\.kubernetes\.io/enable-access-log"=true . |
ingress.configureCertmanager | ブール値 | Ingress 注釈cert-manager.io/issuer とacme.cert-manager.io/http01-edit-in-place を切り替えます。詳細はGitLab Pages の TLS 要件をご覧ください。 | |
ingress.enabled | ブール値 | false | Ingressオブジェクトをサポートするサービスに対してIngressオブジェクトを作成するかどうかを制御する設定。false の場合、global.ingress.enabled の設定値が使用されます。 |
ingress.proxyBodySize | 文字列 | 512m | 下記参照。 |
ingress.tls.enabled | ブール値 | true |
false に設定すると、GitLab Webservice の TLS を無効にします。これは主に、Ingress コントローラの前に TLS 終端プロキシがある場合など、Ingress レベルで TLS 終端を使えない場合に便利です。 |
ingress.tls.secretName | 文字列 | (空) | GitLab URLに対して有効な証明書とキーを含むKubernetes TLSシークレットの名前。設定されていない場合は、global.ingress.tls.secretName の値が代わりに使用されます。 |
ingress.tls.smardcardSecretName | 文字列 | (空) | 有効な場合、GitLabスマートカードURLの有効な証明書とキーを含むKubernetes TLS SEcretの名前。設定されていない場合は、global.ingress.tls.secretName の値が代わりに使用されます。 |
ingress.tls.useGeoClass | ブール値 | false | IngressClass を Geo Ingress クラス (global.geo.ingressClass ) でオーバーライドします。プライマリ Geo サイトに必要です。 |
注釈
annotations
は、Webservice Ingress にアノテーションを設定するために使用します。
デフォルトでは1つのアノテーションを設定します:nginx.ingress.kubernetes.io/service-upstream: "true"
。これにより、NGINX がアップストリームとしてサービス自体に直接連絡するように指示することで、Webservice ポッドへのトラフィックをより均等にバランスさせることができます。詳細はNGINXのドキュメントを参照してください。
これをオーバーライドするには
gitlab:
webservice:
ingress:
annotations:
nginx.ingress.kubernetes.io/service-upstream: "false"
プロキシボディサイズ
proxyBodySize
は NGINX プロキシの最大ボディサイズを設定するために使用します。これは一般的に、デフォルトよりも大きなDockerイメージを許可するために必要です。これはLinux パッケージのインストールにおけるnginx['client_max_body_size']
設定に相当します。別のオプションとして、次の2つのパラメータのいずれかでボディサイズを設定することもできます:
gitlab.webservice.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-body-size"
global.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-body-size"
追加イングレス
extraIngress.enabled=true
を設定することで、追加の Ingress をデプロイできます。このIngressはデフォルトのIngressと同じ名前に-extra
というサフィックスが付き、デフォルトのIngressと同じ設定をサポートします。
リソース
メモリ要求/制限
各ポッドはworkerProcesses
に等しい量のワーカーを生成し、それぞれベースラインのメモリ量を使用します。推奨します:
- ワーカーあたり最低 1.25GB (
requests.memory
) です。 - ワーカーあたり最大 1.5GB と、プライマリ用に 1GB (
limits.memory
)
必要なリソースはユーザーによって生成されるワークロードに依存し、GitLabアプリケーションの変更やアップグレードによって将来変更される可能性があることに注意してください。
デフォルト
workerProcesses: 2
resources:
requests:
memory: 2.5G # = 2 * 1.25G
# limits:
# memory: 4G # = (2 * 1.5G) + 950M
4人のワーカーが設定されています:
workerProcesses: 4
resources:
requests:
memory: 5G # = 4 * 1.25G
# limits:
# memory: 7G # = (4 * 1.5G) + 950M
外部サービス
Redis
Redisのドキュメントはglobalsページに統合されました。最新のRedis設定オプションについては、このページを参照してください。
PostgreSQL
PostgreSQLドキュメントはglobalsページに統合されました。最新のPostgreSQL設定オプションについては、このページを参照してください。
Gitaly
Gitalyの設定はグローバル設定で行います。Gitaly設定ドキュメントをご覧ください。
MinIO
minio:
serviceName: 'minio-svc'
port: 9000
名前 | 種類 | デフォルト | 説明 |
---|---|---|---|
port | 整数 | 9000 | MinIOService に到達するポート番号。 |
serviceName | 文字列 | minio-svc | MinIO ポッドによって公開されるService の名前。 |
レジストリ
registry:
host: registry.example.com
port: 443
api:
protocol: http
host: registry.example.com
serviceName: registry
port: 5000
tokenIssuer: gitlab-issuer
certificate:
secret: gitlab-registry
key: registry-auth.key
名前 | 種類 | デフォルト | 説明 |
---|---|---|---|
api.host | 文字列 | 使用するレジストリサーバーのホスト名。api.serviceName の代わりに省略することもできます。 | |
api.port | 整数 | 5000 | レジストリ API に接続するポート。 |
api.protocol | 文字列 | Webservice がレジストリ API にアクセスする際に使用するプロトコル。 | |
api.serviceName | 文字列 | registry | レジストリサーバをオペレーションしているservice の名前。これが存在し、api.host が存在しない場合、Chart はapi.host の値の代わりにサービスのホスト名(および現在の.Release.Name )をテンプレートします。GitLab チャート全体の一部としてレジストリを使用する場合に便利です。 |
certificate.key | 文字列 |
auth.token.rootcertbundle としてレジストリコンテナに提供される証明書バンドルが格納されているSecret 内のkey の名前。 | |
certificate.secret | 文字列 | GitLab インスタンスによって作成されたトークンを検証するために使用する証明書バンドルを格納するKubernetes シークレットの名前。 | |
host | 文字列 | GitLab UIでユーザーにDockerコマンドを提供する際に使用する外部ホスト名。registry.hostname テンプレートで設定された値にフォールバックします。global.hosts で設定した値に基づいてレジストリホスト名を決定します。詳しくはGlobals ドキュメントを参照してください。 | |
port | 整数 | ホスト名で使用する外部ポート。ポート80 または443 を使用すると、URL はhttp /https で形成されます。その他のポートはすべてhttp を使用し、例えばhttp://registry.example.com:8443 のようにホスト名の最後にポートを追加します。 | |
tokenIssuer | 文字列 | gitlab-issuer | 認証トークン発行者の名前。これは、トークンを送信する際にレジストリに組み込まれる設定と一致しなければなりません。デフォルトのgitlab-issuer は、レジストリで使用しているものと同じです。 |
チャート設定
以下の値は、ウェブサービス・ポッドの設定に使用されます。
名前 | 種類 | デフォルト | 説明 |
---|---|---|---|
replicaCount | 整数 | 1 | デプロイで作成する Web サービスインスタンスの数。 |
workerProcesses | 整数 | 2 | ポッドごとに実行する Webservice ワーカーの数。GitLab が正しく機能するためには、クラスター内で少なくとも2 ワーカーが利用可能でなければなりません。workerProcesses を増やすとワーカー一人あたり400MB ほど必要なメモリが増えるので、それに応じてポッドresources を更新する必要があります。 |
メトリクス
メトリクスはmetrics.enabled
の値で有効にすることができ、GitLab モニタリングエクスポーターを使ってメトリクスポートを公開します。ポッドには Prometheus アノテーションが付与されるか、metrics.serviceMonitor.enabled
がtrue
の場合は Prometheus Operator ServiceMonitor が作成されます。/-/metrics
エンドポイントからメトリクスをスクレイピングすることもできますが、その場合はGitLab Prometheus メトリクスが管理エリアで有効になっている必要があります。GitLab Workhorseのメトリクスはworkhorse.metrics.enabled
。しかし、これらはPrometheusのアノテーションを使って収集することができないので、workhorse.metrics.serviceMonitor.enabled
をtrue
にするか、外部のPrometheus設定が必要です。
GitLab シェル
GitLab ShellはWebserviceとの通信でAuth Tokenを使用します。GitLab ShellとWebserviceは共有シークレットを使ってトークンを共有します。
shell:
authToken:
secret: gitlab-shell-secret
key: secret
port:
名前 | 種類 | デフォルト | 説明 |
---|---|---|---|
authToken.key | 文字列 | authToken を含む秘密鍵 (下記) の名前を定義します。 | |
authToken.secret | 文字列 | プルする KubernetesSecret の名前を定義します。 | |
port | 整数 | 22 | GitLab UI 内で SSH URL を生成する際に使用するポート番号。global.shell.port によって制御されます。 |
ウェブサーバーのオプション
Chartの現在のバージョンはPumaウェブサーバーをサポートしています。
Puma独自のオプション:
名前 | 種類 | デフォルト | 説明 |
---|---|---|---|
puma.workerMaxMemory | 整数 | Puma ワーカーキラーの最大メモリ (メガバイト単位) | |
puma.threads.min | 整数 | 4 | Pumaスレッドの最小量 |
puma.threads.max | 整数 | 4 | Pumaスレッドの最大数 |
設定networkpolicy
このセクションではNetworkPolicyを制御します。この設定はオプションで、ポッドの Egress および Ingress を特定のエンドポイントに制限するために使用します。
名前 | 種類 | デフォルト | 説明 |
---|---|---|---|
enabled | ブール値 | false | この設定はNetworkPolicy
|
ingress.enabled | ブール値 | false |
true に設定すると、Ingress ネットワーク ポリシーがアクティビティになります。これにより、ルールが指定されていない限り、すべての Ingress 接続がブロックされます。 |
ingress.rules | 配列 | [] | 詳細はhttps://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource と以下の例を参照してください。 |
egress.enabled | ブール値 | false |
true に設定すると、Egress ネットワーク ポリシーがアクティビティになります。これにより、ルールが指定されていない限り、すべてのイグレス接続がブロックされます。 |
egress.rules | 配列 | [] | イグレスポリシーのルール。詳細はhttps://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource と以下の例を参照してください。 |
ネットワークポリシーの例
Webサービスサービスは、Prometheusエクスポートが有効な場合、およびNGINX Ingressからのトラフィックに対してのみIngress接続を必要とし、通常はさまざまな場所へのEgress接続を必要とします。この例では、次のネットワークポリシーを追加します:
- TCP
10.0.0.0/8
ポート 8080 のネットワークからのすべての Ingress リクエストは、メトリクスのエクスポートと NGINX Ingress に対して許可されます。 - UDP
10.0.0.0/8
ポート 53 のネットワークへのすべての Egress リクエストは、DNS のために許可されます。 - PostgreSQL では、TCP
10.0.0.0/8
ポート 5432 のネットワークへのすべての Egress リクエストが許可されます。 - Redis では、TCP
10.0.0.0/8
ポート 6379 でネットワークへのすべての Egress リクエストが許可されます。 - Gitaly では、TCP
10.0.0.0/8
ポート 8075 のネットワークへのすべての Egress リクエストが許可されます。 -
10.0.0.0/8
の内部ネットワークへのその他のEgressリクエストは制限されています。 -
10.0.0.0/8
の外部へのegressリクエストは許可されています。
提供された例は単なる例であり、完全ではない可能性があることに注意してください。
ウェブサービスは、外部オブジェクトストレージ上の画像に対して公開インターネットへのアウトバウンド接続を必要とすることに注意してください。
networkpolicy:
enabled: true
ingress:
enabled: true
rules:
- from:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 8080
egress:
enabled: true
rules:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 53
protocol: UDP
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 5432
protocol: TCP
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 6379
protocol: TCP
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 8075
protocol: TCP
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 10.0.0.0/8
ロードバランサーサービス
service.type
がLoadBalancer
に設定されている場合、オプションでservice.loadBalancerIP
を指定すると、ユーザー指定の IP でLoadBalancer
を作成できます(クラウドプロバイダーがサポートしている場合)。
service.type
がLoadBalancer
に設定されている場合は、LoadBalancer
にアクセスできる CIDR 範囲を制限するためにservice.loadBalancerSourceRanges
も設定する必要があります(クラウドプロバイダーがサポートしている場合)。これはメトリックポートが公開されるイシューのため、現在必要です。
LoadBalancer
サービスタイプに関する追加情報は、Kubernetes ドキュメントに記載されています。
service:
type: LoadBalancer
loadBalancerIP: 1.2.3.4
loadBalancerSourceRanges:
- 10.0.0.0/8
KEDAの設定
このkeda
セクションでは、通常のHorizontalPodAutoscalers
の代わりにKEDA ScaledObjects
をインストールできるようにします。この設定はオプションで、カスタムまたは外部のメトリクスに基づいてオートスケーリングする必要がある場合に使用できます。
ほとんどの設定は、該当する場合はhpa
セクションで設定された値にデフォルト設定されます。
以下が真である場合、hpa
セクションで設定された CPU とメモリのしきい値に基づいて、CPU とメモリのトリガーが自動的に追加されます:
-
triggers
がセットされていません。 - 対応する
request.cpu.request
またはrequest.memory.request
の設定もゼロ以外の値に設定されます。
トリガーが設定されていない場合、ScaledObject
は作成されません。
これらの設定の詳細については、KEDAのドキュメントを参照してください。
名前 | 種類 | デフォルト | 説明 |
---|---|---|---|
enabled | ブール値 | false | の代わりにKEDA ScaledObjects を使用します。HorizontalPodAutoscalers
|
pollingInterval | 整数 | 30 | 各トリガーを |
cooldownPeriod | 整数 | 300 | リソースを0にスケールバックする前に、最後のトリガがアクティブであると報告された後、待機する期間。 |
minReplicaCount | 整数 | KEDAがリソースをスケールダウンする最小レプリカ数。minReplicas
| |
maxReplicaCount | 整数 | KEDAがリソースをスケールアップする際の最大レプリカ数。maxReplicas
| |
fallback | マップ | KEDAフォールバック設定。 | |
hpaName | 文字列 | KEDAが作成するHPAリソースの名前。keda-hpa-{scaled-object-name}
| |
restoreToOriginalReplicaCount | ブール値 |
ScaledObject が削除された後、ターゲットリソースを元のレプリカ数にスケールバックするかどうかを指定します。 | |
behavior | マップ | アップスケーリングとダウンスケーリングの動作を指定します。hpa.behavior
| |
triggers | 配列 | 対象リソースのスケーリングを有効にするトリガーのリスト。デフォルトはhpa.cpu とhpa.memory
|