GitLab ウェブサービスチャートの使用

webservice サブチャートは、GitLab Rails ウェブサーバにポッドごとに 2 つのウェブサービスワーカーを提供します。(GitLabのあらゆるウェブリクエストを一つのポッドで処理するために最低限必要なものです)

このChartのポッドは、gitlab-workhorsewebservice の2つのコンテナを利用しています。GitLab Workhorseはポート8181をリッスンし、ポッドへのインバウンドトラフィックの宛先と_なります_。webservice には GitLabRails コードベースが格納され、8080でリッスンし、メトリクス収集の目的でアクセスできます。webservice は、通常のトラフィックを直接受け取ってはいけません。

要件

このチャートはRedis、PostgreSQL、Gitaly、レジストリサービスに依存しています。これらはGitLabチャートの一部として提供されているか、このチャートがデプロイされたKubernetesクラスターからアクセス可能な外部サービスとして提供されています。

設定

webservice Chart の設定は以下のとおりです:グローバル設定デプロイ設定イングレス設定外部サービスチャート設定

インストールのコマンドラインオプション

以下の表は、--set フラグを使用して、helm install コマンドに供給できるすべての可能なチャート設定を示しています。

パラメータデフォルト説明
annotations ポッド注釈
podLabels ポッドラベルの補足。セレクタには使用されません。
common.labels このChartで作成されたすべてのオブジェクトに適用される補助ラベル。
deployment.terminationGracePeriodSeconds30Kubernetesがポッドの終了を待つ秒数。shutdown.blackoutSeconds
deployment.livenessProbe.initialDelaySeconds20Liveness Probeが開始されるまでの遅延時間
deployment.livenessProbe.periodSeconds60Livenessプローブの実行頻度
deployment.livenessProbe.timeoutSeconds30Livenessプローブがタイムアウトした場合
deployment.livenessProbe.successThreshold1一度失敗したプローブが成功したとみなされるための最小連続成功回数
deployment.livenessProbe.failureThreshold3成功した後に失敗したとみなされるための連続した失敗の最小値
deployment.readinessProbe.initialDelaySeconds0Readiness Probeが開始されるまでの遅延。
deployment.readinessProbe.periodSeconds10Readinessプローブの実行頻度
deployment.readinessProbe.timeoutSeconds2準備完了プローブがタイムアウトした場合
deployment.readinessProbe.successThreshold1Readinessプローブが失敗した後、成功したとみなされるための最小連続成功回数
deployment.readinessProbe.failureThreshold3成功した後、レディネス・プローブが失敗したとみなされるには、最低連続失敗回数が必要です。
deployment.strategy{}デプロイで使用される更新ストラテジを設定できます。指定しない場合は、クラスターのデフォルトが使用されます。
enabledtrueウェブサービス有効フラグ
extraContainers 追加コンテナのリスト
extraInitContainers 追加コンテナのリスト
extras.google_analytics_idnilフロントエンド用のGoogle Analytics ID
extraVolumeMounts 追加ボリュームマウントのリスト
extraVolumes 作成する追加ボリュームのリスト
extraEnv 公開する追加環境変数のリスト
extraEnvFrom 公開する他のデータソースの追加環境変数のリスト
gitlab.webservice.workhorse.imageregistry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-eeWorkhorse イメージリポジトリ
gitlab.webservice.workhorse.tag Workhorse画像タグ
hpa.behavior{scaleDown: {stabilizationWindowSeconds: 300 }}ビヘイビアには、アップスケーリングとダウンスケーリングのビヘイビアの仕様が含まれます(autoscaling/v2beta2 以上が必要です)。
hpa.customMetrics[]カスタム・メトリクスには、希望するレプリカ数を計算するために使用するメトリクスの設定が含まれます(targetAverageUtilization で設定された平均CPU使用率をデフォルトで上書きします)。
hpa.cpu.targetTypeAverageValueオートスケーリングCPUターゲット・タイプを設定します。Utilization またはAverageValue
hpa.cpu.targetAverageValue1オートスケーリングCPUターゲット値の設定
hpa.cpu.targetAverageUtilization オートスケーリングCPUターゲット使用率の設定
hpa.memory.targetType  Utilization 、またはAverageValue
hpa.memory.targetAverageValue オートスケーリング・メモリ・ターゲットの値を設定します。
hpa.memory.targetAverageUtilization オートスケーリングメモリ使用率の設定
hpa.targetAverageValue 自動スケーリングCPU目標値の設定
sshHostKeys.mountfalse公開SSHキーを含むGitLab Shellシークレットをマウントするかどうか。
sshHostKeys.mountNamessh-host-keysマウントするボリュームの名前。
sshHostKeys.types[dsa,rsa,ecdsa,ed25519]マウントするSSHキーの種類のリスト。
image.pullPolicyAlwaysウェブサービス画像プルポリシー
image.pullSecrets 画像リポジトリのシークレット
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-eeウェブサービスの画像リポジトリ
image.tag ウェブサービス画像タグ
init.image.repository initContainer 画像
init.image.tag initContainer画像タグ
keda.enabledfalseの代わりにKEDA ScaledObjects を使用します。HorizontalPodAutoscalers
keda.pollingInterval30各トリガーを
keda.cooldownPeriod300リソースを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.cpuhpa.memory
metrics.enabledtrueメトリクスエンドポイントをスクレイピングのために利用可能にする場合
metrics.port8083メトリクス・エンドポイント・ポート
metrics.path/metricsメトリクスエンドポイントパス
metrics.serviceMonitor.enabledfalsePrometheus 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.bucketgit-lfsMinIO を使用する場合のストレージ・バケットの名前。
minio.port9000MinIOサービスのポート
minio.serviceNameminio-svcMinIOサービス名
monitoring.ipWhitelist[0.0.0.0/0]監視エンドポイント用にホワイトリストに登録するIPのリスト
monitoring.exporter.enabledfalsePrometheusメトリクスを公開するWebサーバーを有効にします。メトリクスのポートがモニタリングエクスポーターのポートに設定されている場合、これはmetrics.enabled
monitoring.exporter.port8083メトリクスエクスポーターに使用するポート番号。
psql.password.keypsql-passwordpsqlシークレットのpsqlパスワードへの鍵
psql.password.secretgitlab-postgrespsqlシークレット名
psql.port PostgreSQL サーバのポートを設定します。よりも優先されます。global.psql.port
puma.disableWorkerKillertruePumaワーカーのメモリキラーを無効にします。
puma.workerMaxMemory Puma ワーカーキラーの最大メモリ (メガバイト単位)
puma.threads.min4Pumaスレッドの最小量
puma.threads.max4Pumaスレッドの最大数
rack_attack.git_basic_auth{}詳しくはGitLab ドキュメントをご覧ください。
redis.serviceNameredisRedis サービス名
global.registry.api.port5000レジストリポート
global.registry.api.protocolhttpレジストリプロトコル
global.registry.api.serviceNameregistryレジストリサービス名
global.registry.enabledtrue全プロジェクトメニューのレジストリリンクの追加/削除
global.registry.tokenIssuergitlab-issuerレジストリトークン発行者
replicaCount1ウェブサービス レプリカ数
resources.requests.cpu300mウェブサービスの最小CPU
resources.requests.memory1.5Gウェブサービスの最小メモリ
service.externalPort8080ウェブサービスの公開ポート
securityContext.fsGroup1000ポッドを起動するグループID
securityContext.runAsUser1000ポッドを起動するユーザーID
securityContext.fsGroupChangePolicy ボリュームの所有権と権限を変更するためのポリシー (Kubernetes 1.23 が必要)
containerSecurityContextコンテナが起動するコンテナsecurityContext をオーバーライドします。 
containerSecurityContext.runAsUserコンテナが起動される特定のセキュリティコンテキストを上書きできるようにします。1000
serviceLabels{}補足サービスラベル
service.internalPort8080ウェブサービス内部ポート
service.typeClusterIPウェブサービスのサービスタイプ
service.workhorseExternalPort8181Workhorse公開ポート
service.workhorseInternalPort8181Workhorse内部ポート
service.loadBalancerIP ロードバランサーに割り当てるIPアドレス(クラウドプロバイダーがサポートしている場合)
service.loadBalancerSourceRanges ロードバランサーへのアクセスを許可する IP CIDR のリスト (サポートされている場合) service.type = LoadBalancer の場合に必要です。
shell.authToken.keysecretシェルシークレットのシェルトークンへのキー
shell.authToken.secret{Release.Name}-gitlab-shell-secretシェルトークンのシークレット
shell.portnilUIが生成するSSH URLで使用するポート番号
shutdown.blackoutSeconds10シャットダウンを受け取った後、Webサービスを実行し続ける秒数。deployment.terminationGracePeriodSeconds
tls.enabledfalseウェブサービスの TLS 有効
tls.secretName{Release.Name}-webservice-tls secretNameKubernetesのTLSシークレットを指す必要があります。
tolerations[]ポッド割り当て用のトレラベル
trusted_proxies[]詳しくはGitLab ドキュメントをご覧ください。
workhorse.logFormatjsonログのフォーマット有効なフォーマット:json,structuredtext
workerProcesses2ウェブサービスの作業者数
workhorse.keywatchertrueWorkhorse を 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.initialDelaySeconds20Liveness Probeが開始されるまでの遅延時間
workhorse.livenessProbe.periodSeconds60Livenessプローブの実行頻度
workhorse.livenessProbe.timeoutSeconds30Livenessプローブがタイムアウトした場合
workhorse.livenessProbe.successThreshold1一度失敗したプローブが成功したとみなされるための最小連続成功回数
workhorse.livenessProbe.failureThreshold3成功した後に失敗したとみなされるための連続した失敗の最小値
workhorse.monitoring.exporter.enabledfalseWorkhorseがPrometheusメトリクスを公開できるようにします。workhorse.metrics.enabled
workhorse.monitoring.exporter.port9229Workhorse Prometheusメトリクスに使用するポート番号。
workhorse.monitoring.exporter.tls.enabledfalse true に設定すると、メトリクスのエンドポイントで TLS を有効にします。WorkhorseでTLSが有効になっている必要があります。
workhorse.metrics.enabledtrueWorkhorseメトリクス・エンドポイントをスクレイピングに利用できるようにする場合
workhorse.metrics.port8083Workhorse メトリクスのエンドポイントポート
workhorse.metrics.path/metricsWorkhorse メトリクスのエンドポイント・パス
workhorse.metrics.serviceMonitor.enabledfalsePrometheus OperatorがWorkhorseメトリクスのスクレイピングを管理できるようにServiceMonitorを作成する場合
workhorse.metrics.serviceMonitor.additionalLabels{}Workhorse ServiceMonitorに追加するラベル
workhorse.metrics.serviceMonitor.endpointConfig{}Workhorse ServiceMonitorの追加エンドポイント設定
workhorse.readinessProbe.initialDelaySeconds0Readiness Probeが開始されるまでの遅延。
workhorse.readinessProbe.periodSeconds10Readinessプローブの実行頻度
workhorse.readinessProbe.timeoutSeconds2準備完了プローブがタイムアウトした場合
workhorse.readinessProbe.successThreshold1Readinessプローブが失敗した後、成功したとみなされるための最小連続成功回数
workhorse.readinessProbe.failureThreshold3成功した後、レディネス・プローブが失敗したとみなされるには、最低連続失敗回数が必要です。
workhorse.imageScaler.maxProcs2同時に実行できるイメージ・スケーリング・プロセスの最大数
workhorse.imageScaler.maxFileSizeBytes250000スケーラーが処理する画像の最大ファイルサイズ(バイト単位
workhorse.tls.verifytrue true に設定すると、NGINX Ingress は Workhorse の TLS 証明書を検証します。カスタム CA の場合は、workhorse.tls.caSecretName も設定する必要があります。自己署名証明書の場合はfalse に設定する必要があります。
workhorse.tls.secretName{Release.Name}-workhorse-tlsTLSキーと証明書のペアを含むTLSシークレットの名前。Workhorse TLS が有効な場合に必要です。
workhorse.tls.caSecretName CA 証明書を含むシークレットの名前。これはTLSシークレットではなくca.crt キーのみを持つ必要があります。これはNGINXによるTLS検証に使用されます。
webServerpumaリクエスト処理に使用するウェブサーバー(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-ingressgitlab-shellgitaly )との間の通信がセキュリティで保護されます。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.enabledtrue に設定することで、gitlab-workhorse コンテナで TLS を有効にすることができます。それに応じて、gitlab.webservice.workhorse.tls.secretNameglobal.certificates.customCAs にカスタムシークレット名を渡すことができます。

gitlab.webservice.workhorse.tls.verifytrue の場合(デフォルト)、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

secretNameKubernetes 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.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ce に、workhorse.imageregistry.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/issueracme.cert-manager.io/http01-edit-in-place を切り替えます。詳細はGitLab Pages の TLS 要件をご覧ください。
ingress.enabledブール値falseIngressオブジェクトをサポートするサービスに対して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ブール値falseIngressClass を 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整数9000MinIOService に到達するポート番号。
serviceName文字列minio-svcMinIO ポッドによって公開される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.enabledtrue の場合は Prometheus Operator ServiceMonitor が作成されます。/-/metrics エンドポイントからメトリクスをスクレイピングすることもできますが、その場合はGitLab Prometheus メトリクスが管理エリアで有効になっている必要があります。GitLab Workhorseのメトリクスはworkhorse.metrics.enabled 。しかし、これらはPrometheusのアノテーションを使って収集することができないので、workhorse.metrics.serviceMonitor.enabledtrue にするか、外部の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整数22GitLab UI 内で SSH URL を生成する際に使用するポート番号。global.shell.port によって制御されます。

ウェブサーバーのオプション

Chartの現在のバージョンはPumaウェブサーバーをサポートしています。

Puma独自のオプション:

名前種類デフォルト説明
puma.workerMaxMemory整数 Puma ワーカーキラーの最大メモリ (メガバイト単位)
puma.threads.min整数4Pumaスレッドの最小量
puma.threads.max整数4Pumaスレッドの最大数

設定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接続を必要とします。この例では、次のネットワークポリシーを追加します:

  • TCP10.0.0.0/8 ポート 8080 のネットワークからのすべての Ingress リクエストは、メトリクスのエクスポートと NGINX Ingress に対して許可されます。
  • UDP10.0.0.0/8 ポート 53 のネットワークへのすべての Egress リクエストは、DNS のために許可されます。
  • PostgreSQL では、TCP10.0.0.0/8 ポート 5432 のネットワークへのすべての Egress リクエストが許可されます。
  • Redis では、TCP10.0.0.0/8 ポート 6379 でネットワークへのすべての Egress リクエストが許可されます。
  • Gitaly では、TCP10.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.typeLoadBalancer に設定されている場合、オプションでservice.loadBalancerIP を指定すると、ユーザー指定の IP でLoadBalancer を作成できます(クラウドプロバイダーがサポートしている場合)。

service.typeLoadBalancer に設定されている場合は、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.cpuhpa.memory