正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

GitLab Webserviceチャートの使用

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

webserviceサブチャートは、GitLab Railsウェブサーバーにポッドごとに2つのWebserviceワーカーを提供します。これは、1つのポッドがGitLabであらゆるWebリクエストを処理するために必要な最小限の数です。

このチャートのポッドは、gitlab-workhorsewebserviceの2つのコンテナを使用します。GitLab Workhorseはポート8181でリッスンし、ポッドへの受信トラフィックの宛先は_常に_そうでなければなりません。webserviceはGitLabのRailsコードベースを格納し、8080でリッスンし、メトリクス収集の目的でアクセスできます。webserviceは、通常のトラフィックを直接受信してはなりません。

要件

このチャートは、Redis、PostgreSQL、Gitaly、およびRegistryサービスに依存します。これらは、完全なGitLabチャートの一部として、またはこのチャートがデプロイされるKubernetesクラスタリングから到達可能な外部サービスとして提供されます。

設定

webserviceチャートは、次のように構成されています: グローバル設定デプロイメント設定Ingress設定外部サービス 、およびチャートの設定

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

以下の表には、helm installコマンドに--setフラグを使用して指定できる、チャートの構成がすべて記載されています。

パラメータデフォルト説明
annotationsポッドの注釈
podLabels補足的なポッドラベル。セレクターには使用されません。
common.labelsこのチャートによって作成されたすべてのオブジェクトに適用される補足的なラベル。
deployment.terminationGracePeriodSeconds30Kubernetesがポッドの終了を待機する秒数。これはshutdown.blackoutSecondsより長くする必要があります
deployment.livenessProbe.initialDelaySeconds20livenessプローブが開始されるまでの遅延
deployment.livenessProbe.periodSeconds60livenessプローブを実行する頻度
deployment.livenessProbe.timeoutSeconds30livenessプローブがタイムアウトになるタイミング
deployment.livenessProbe.successThreshold1livenessプローブが失敗した後、成功したと見なされるための最小連続成功数
deployment.livenessProbe.failureThreshold3livenessプローブが成功した後、失敗したと見なされるための最小連続失敗数
deployment.readinessProbe.initialDelaySeconds0readinessプローブが開始されるまでの遅延
deployment.readinessProbe.periodSeconds10readinessプローブを実行する頻度
deployment.readinessProbe.timeoutSeconds2readinessプローブがタイムアウトになるタイミング
deployment.readinessProbe.successThreshold1readinessプローブが失敗した後、成功したと見なされるための最小連続成功数
deployment.readinessProbe.failureThreshold3readinessプローブが成功した後、失敗したと見なされるための最小連続失敗数
deployment.strategy{}デプロイメントで使用される更新戦略を構成できます。指定しない場合、クラスターのデフォルトが使用されます。
enabledtrueWebserviceが有効なフラグ
extraContainers含めるコンテナのリストを含む複数行のリテラルスタイル文字列
extraInitContainers含める追加のinitコンテナのリスト
extras.google_analytics_idnilフロントエンドのGoogle Analytics ID
extraVolumeMounts実行する追加のボリュームマウントのリスト
extraVolumes作成する追加のボリュームのリスト
extraEnvエクスポーズする追加の環境変数のリスト
extraEnvFromエクスポーズする他のデータソースからの追加の環境変数のリスト
gitlab.webservice.workhorse.imageregistry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-eeWorkhorseDockerイメージリポジトリ
gitlab.webservice.workhorse.tagWorkhorseDockerイメージタグ
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.pullPolicyAlwaysWebserviceDockerイメージプルポリシー
image.pullSecretsイメージリポジトリのシークレット
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-eeWebserviceDockerイメージリポジトリ
image.tagWebserviceDockerイメージタグ
init.image.repositoryinitContainerイメージ
init.image.taginitContainerイメージタグ
init.containerSecurityContext.runAsUser1000initContainer固有: コンテナを起動するユーザーID
init.containerSecurityContext.allowPrivilegeEscalationfalseinitContainer固有: プロセスがその親プロセスよりも多くの特権を取得できるかどうかを制御します
init.containerSecurityContext.runAsNonRoottrueinitContainer固有: コンテナを非ルートユーザーで実行するかどうかを制御します
init.containerSecurityContext.capabilities.drop[ "ALL" ]initContainer固有: コンテナのLinuxケイパビリティを削除します
keda.enabledfalseHorizontalPodAutoscalersの代わりにKEDA ScaledObjectsを使用します
keda.pollingInterval30各トリガーで確認する間隔
keda.cooldownPeriod300リソースを0にスケールバックする前に、最後のアクティブを報告されたトリガーの後に待機する期間
keda.minReplicaCountminReplicasKEDAがリソースをスケールダウンする最小レプリカ数。
keda.maxReplicaCountmaxReplicasKEDAがリソースをスケールアップする最大レプリカ数。
keda.fallbackKEDAフォールバック構成については、ドキュメントを参照してください
keda.hpaNamekeda-hpa-{scaled-object-name}KEDAが作成するHPAリソースの名前。
keda.restoreToOriginalReplicaCountScaledObjectが削除された後、ターゲットリソースを元のレプリカ数にスケールバックするかどうかを指定します
keda.behaviorhpa.behaviorスケールアップおよびスケールダウン動作の仕様。
keda.triggersターゲットリソースのスケールをアクティブ化するトリガーのリスト。hpa.cpuおよびhpa.memoryから計算されたトリガーにデフォルト設定されます
metrics.enabledtrueメトリクスエンドポイントをスクレイピングに利用できるようにする必要がある場合
metrics.port8083メトリクスエンドポイントポート
metrics.listenAddr0.0.0.0メトリクスリスナーアドレス。
metrics.path/metricsメトリクスエンドポイントのパス
metrics.serviceMonitor.enabledfalseメトリクスのスクレイプを管理するために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.bucketgit-lfsMinIOを使用する場合のストレージバケットの名前
minio.port9000MinIOサービスのポート
minio.serviceNameminio-svcMinIOサービスの名前
monitoring.ipWhitelist[0.0.0.0/0, ::/0]モニタリングエンドポイントのホワイトリストに登録するIPのリスト
monitoring.exporter.listenAddr0.0.0.0メトリクスリスナーアドレス。
monitoring.exporter.enabledfalsePrometheusメトリクスをエクスポーズするためにWebサーバーを有効にします。これは、メトリクスポートがモニタリングエクスポーターポートに設定されている場合、metrics.enabledによってオーバーライドされます
monitoring.exporter.port8083メトリクスエクスポーターに使用するポート番号
psql.password.keypsql-passwordpsqlシークレット内のpsqlパスワードへのキー
psql.password.secretgitlab-postgrespsqlシークレット名
psql.portPostgreSQLサーバーのポートを設定します。これは、global.psql.portよりも優先されます。
puma.disableWorkerKillertruePumaワーカーメモリキラーを無効にします
puma.workerMaxMemoryPumaワーカーキラーの最大メモリ(ギガバイト単位)
puma.threads.min4Pumaスレッドの最小量
puma.threads.max4Pumaスレッドの最大量
puma.bindIp6falsePumaを使用してIPv6アドレスをバインドします。現在、レート制限に関連する既知の問題のため、デフォルトではfalseになっています。
rack_attack.git_basic_auth{}詳細については、GitLabドキュメントを参照してください
redis.serviceNameredisRedisサービス名
global.registry.api.port5000Registryポート
global.registry.api.protocolhttpRegistryプロトコル
global.registry.api.serviceNameregistryRegistryサービス名
global.registry.enabledtrueすべてのプロジェクトメニューでregistryリンクを追加/削除します
global.registry.tokenIssuergitlab-issuerRegistryトークン発行者
replicaCount1Webserviceレプリカ数
resources.requests.cpu300mWebserviceの最小CPU
resources.requests.memory1.5GWebserviceの最小メモリ
service.externalPort8080Webserviceエクスポーズされたポート
securityContext.fsGroup1000ポッドの起動に使用するグループID
securityContext.runAsUser1000ポッドの起動に使用するユーザーID
securityContext.fsGroupChangePolicyボリュームの所有権と許可を変更するためのポリシー(Kubernetes 1.23が必要です)
securityContext.seccompProfile.typeRuntimeDefault使用するSeccompプロファイル
containerSecurityContextコンテナが起動されるsecurityContextをオーバーライドします
containerSecurityContext.runAsUser1000コンテナが起動される特定のセキュリティコンテキストユーザーIDを上書きできます
containerSecurityContext.allowPrivilegeEscalationfalseGitalyコンテナのプロセスがその親プロセスよりも多くの特権を取得できるかどうかを制御します
containerSecurityContext.runAsNonRoottrueGitalyコンテナを非rootユーザーで実行するかどうかを制御します
containerSecurityContext.capabilities.drop[ "ALL" ]GitalyコンテナのLinuxケイパビリティを削除します
serviceAccount.automountServiceAccountTokenfalseデフォルトのServiceAccountアクセストークンをポッドにマウントするかどうかを示します
serviceAccount.createfalseServiceAccountを作成するかどうかを示します
serviceAccount.enabledfalseServiceAccountを使用するかどうかを示します
serviceAccount.nameServiceAccountの名前。設定しない場合、チャートの完全な名前が使用されます
serviceLabels{}補足サービスラベル
service.internalPort8080Webservice内部ポート
service.typeClusterIPWebserviceサービスタイプ
service.workhorseExternalPort8181Workhorseエクスポーズされたポート
service.workhorseInternalPort8181Workhorse内部ポート
service.loadBalancerIPロードバランサーに割り当てるIPアドレス(クラウドプロバイダーでサポートされている場合)
service.loadBalancerSourceRangesロードバランサーへのアクセスを許可されているIP CIDRのリスト(サポートされている場合)。service.type = ロードバランサーに必要
shell.authToken.keysecretShellシークレット内のShellトークンへのキー
shell.authToken.secret{Release.Name}-gitlab-shell-secretShellトークンシークレット
shell.portnilUIで生成されたSSH URIで使用するポート番号
shutdown.blackoutSeconds10シャットダウンを受信した後、Webserviceを実行し続ける秒数。これはdeployment.terminationGracePeriodSecondsより短くする必要があります
tls.enabledfalseWebservice TLSが有効
tls.secretName{Release.Name}-webservice-tlsWebservice TLSシークレット。secretNameは、Kubernetes TLSシークレットを指している必要があります。
tolerations[]ポッドの割り当てに使用するTolerationラベル
trusted_proxies[]詳細については、GitLabドキュメントを参照してください
workhorse.logFormatjsonログ形式。有効な形式: jsonstructuredtext
workerProcesses2Webserviceワーカー数
workhorse.keywatchertrueRedisにWorkhorseをサブスクライブします。これは、/api/*へのリクエストを処理するすべてのデプロイメントで必須ですが、他のデプロイメントでは安全に無効にできます
workhorse.shutdownTimeoutglobal.webservice.workerTimeout + 1(秒)すべてのWebリクエストがWorkhorseからクリアされるまで待機する時間。例: 1min65s
workhorse.adoptCfRayHeaderfalse着信Cf-Rayヘッダーが存在する場合、相関IDとして採用します。詳細については、Workhorseドキュメントを参照してください。
workhorse.trustedCIDRsForPropagation相関IDの伝播を信頼できるCIDRブロックのリスト。これが機能するには、-propagateCorrelationIDオプションもworkhorse.extraArgsで使用する必要があります。詳細については、Workhorseドキュメントを参照してください。
workhorse.trustedCIDRsForXForwardedForX-Forwarded-For HTTPヘッダーを介して実際のクライアントIPを解決するために使用できるCIDRブロックのリスト。これは、workhorse.trustedCIDRsForPropagationと共に使用されます。詳細については、Workhorseドキュメントを参照してください。
workhorse.metadata.zipReaderLimitByteszipリーダーを制限するオプションのバイト数。GitLab 16.9で導入されました。詳細については、Workhorseドキュメントを参照してください。
workhorse.containerSecurityContextコンテナが起動されるsecurityContextをオーバーライドします
workhorse.containerSecurityContext.runAsUser1000コンテナを起動するユーザーID
workhorse.containerSecurityContext.allowPrivilegeEscalationfalseコンテナのプロセスがその親プロセスよりも多くの特権を取得できるかどうかを制御します
workhorse.containerSecurityContext.runAsNonRoottrueコンテナを非ルートユーザーで実行するかどうかを制御します
workhorse.containerSecurityContext.capabilities.drop[ "ALL" ]GitalyコンテナのLinuxケイパビリティを削除します
workhorse.livenessProbe.initialDelaySeconds20livenessプローブが開始されるまでの遅延
workhorse.livenessProbe.periodSeconds60livenessプローブを実行する頻度
workhorse.livenessProbe.timeoutSeconds30livenessプローブがタイムアウトになるタイミング
workhorse.livenessProbe.successThreshold1livenessプローブが失敗した後、成功したと見なされるための最小連続成功数
workhorse.livenessProbe.failureThreshold3livenessプローブが成功した後、失敗したと見なされるための最小連続失敗数
workhorse.monitoring.exporter.enabledfalsePrometheusメトリクスをエクスポーズするためにWorkhorseを有効にします。これは、workhorse.metrics.enabledによってオーバーライドされます
workhorse.monitoring.exporter.port9229Workhorse Prometheusメトリクスに使用するポート番号
workhorse.monitoring.exporter.tls.enabledfalsetrueに設定すると、メトリクスエンドポイントで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プローブが開始されるまでの遅延
workhorse.readinessProbe.periodSeconds10readinessプローブを実行する頻度
workhorse.readinessProbe.timeoutSeconds2readinessプローブがタイムアウトになるタイミング
workhorse.readinessProbe.successThreshold1readinessプローブが失敗した後、成功したと見なされるための最小連続成功数
workhorse.readinessProbe.failureThreshold3成功後に、readiness probeが失敗したと見なされるまでの最小連続失敗回数
workhorse.imageScaler.maxProcs2同時に実行できるイメージスケールプロセスの最大数
workhorse.imageScaler.maxFileSizeBytes250000スケーラによって処理されるイメージのバイト単位の最大ファイルサイズ
workhorse.tls.verifytruetrueに設定すると、NGINX IngressはWorkhorseのTLS証明書を強制的に検証します。カスタムCAの場合は、workhorse.tls.caSecretNameも設定する必要があります。自己署名証明書の場合は、falseに設定する必要があります。
workhorse.tls.secretName{Release.Name}-workhorse-tlsTLSキーと証明書のペアを含むTLSシークレットの名前。これは、Workhorse TLSが有効になっている場合に必要です。
workhorse.tls.caSecretNameCA証明書を含むシークレットの名前。これは等しくないTLSシークレットではありません。ca.crtキーのみが必要です。これは、NGINXによるTLS検証に使用されます。
workhorse.circuitBreaker.enabledfalseサーキットブレーカーを有効にするかどうか
workhorse.circuitBreaker.timeout60オープン時にサーキットブレーカーをハーフオープンに移行するまでの時間(秒)
workhorse.circuitBreaker.interval180クローズ時にサーキットブレーカーが連続エラーをクリアするまでの時間(秒)
workhorse.circuitBreaker.maxRequests1ハーフオープン時にサーキットブレーカーを開くための失敗したリクエスト数
workhorse.circuitBreaker.consecutiveFailures5クローズ時にサーキットブレーカーを開くための連続して失敗したリクエストの数
webServerpumaリクエスト処理に使用するWebサーバー(Webservice/Puma)を選択します
priorityClassName""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_value

extraEnvFrom

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

image.pullSecrets

pullSecretsを使用すると、プライベートレジストリに対して認証を行い、ポッドのイメージをプルできます。

プライベートレジストリとその認証方法の詳細については、Kubernetesドキュメントを参照してください。

pullSecretsの使用例を以下に示します:

image:
  repository: my.webservice.repository
  pullPolicy: Always
  pullSecrets:
  - name: my-secret-name
  - name: my-secondary-secret-name

serviceAccount

このセクションでは、サービスアカウントを作成するかどうか、およびポッドにデフォルトのアクセストークンをマウントするかどうかを制御します。

名前デフォルト説明
annotationsマップ{}サービスアカウント注釈。
automountServiceAccountTokenブール値falseデフォルトのServiceAccountアクセストークンをポッドにマウントする必要があるかどうかを制御します。これは、特定のサイドカーが正常に機能するために必要という場合(Istioなど)を除き、有効にしないようにしてください。
createブール値falseサービスアカウントを作成するかどうかを示します。
enabledブール値falseサービスアカウントを使用するかどうかを示します。
name文字列サービスアカウントの名前。設定されていない場合は、チャート名がフルで使用されます。

tolerations

tolerationsを使用すると、taintされたワーカーノードでポッドをスケジュールできます

tolerationsの使用例を以下に示します:

tolerations:
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoSchedule"
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoExecute"

annotations

annotationsを使用すると、Webserviceポッドに注釈を追加できます。例:

annotations:
  kubernetes.io/example-annotation: annotation-value

strategy

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は、WebおよびメトリクスのエンドポイントでTLSをサポートしています。これにより、Workhorseと他のコンポーネント(特にnginx-ingressgitlab-shell、およびgitaly)間の通信が保護されます。TLS証明書には、共通名(CN)またはサブジェクト代替名(SAN)にWorkhorseサービスホスト名(例: 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.secretNameおよびglobal.certificates.customCAsにそれぞれ渡すことができます。

gitlab.webservice.workhorse.tls.verifytrue(デフォルト)の場合、CA証明書シークレット名もgitlab.webservice.workhorse.tls.caSecretNameに渡す必要があります。これは、自己署名証明書とカスタム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を構成するを参照してください。

設定gitlab.webservice.tls.enabledにより、webserviceコンテナでTLSを有効にできます:

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

このチャートのCommunity Editionを使用する

デフォルトの場合、HelmチャートではGitLabのEnterprise Editionを使用します。必要に応じて、Community Editionを代わりに使用できます。2つのエディションの違いについて詳しくは、こちらをご覧ください。

Community Editionを使用するには、image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ceに、workhorse.imageregistry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ceに設定します。

グローバル設定

いくつかの一般的なグローバル設定をチャート間で共有します。GitLabやレジストリホスト名など、一般的な構成オプションについては、グローバルドキュメントを参照してください。

デプロイ設定

このチャートには、複数のデプロイオブジェクトとそれらに関連するリソースを作成する機能があります。この機能を使用すると、パスベースのルーティングを使用して、GitLabアプリケーションへのリクエストをポッドの複数のセット間で分散させることができます。

このマップのキー(この例ではdefault)は、それぞれの「名前」です。defaultには、RELEASE-webservice-defaultで作成された、デプロイ、サービス、HorizontalPodAutoscaler、PodDisruptionBudget、およびオプションのIngressがあります。

指定されていないプロパティは、gitlab-webserviceチャートのデフォルトから継承されます。

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`
    priorityClassName: # inherits `priorityClassName`

デプロイIngress

deploymentsエントリは、チャート全体の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オブジェクトを作成するかどうかを制御する設定。falseの場合、global.ingress.enabled設定値が使用されます。
ingress.proxyBodySize文字列512m下記を参照
ingress.serviceUpstreamブール値true下記を参照
ingress.tls.enabledブール値truefalseに設定すると、GitLab WebserviceのTLSが無効になります。これは、IngressレベルでTLSターミネーションを使用できない場合(TLSターミネーションプロキシがIngressコントローラーの前にある場合など)に役立ちます。
ingress.tls.secretName文字列(空)GitLab URIの有効な証明書とキーを含むKubernetes TLSシークレットの名前。設定しない場合は、代わりにglobal.ingress.tls.secretName値が使用されます。
ingress.tls.smardcardSecretName文字列(空)有効になっている場合、GitLabスマートカードURIの有効な証明書とキーを含むKubernetes TLSシークレットの名前。設定しない場合は、代わりにglobal.ingress.tls.secretName値が使用されます。
ingress.tls.useGeoClassブール値falseIngressClassをGeo Ingressクラス(global.geo.ingressClass)でオーバーライドします。プライマリGeoサイトに必須。

注釈

annotationsは、Webservice Ingressに注釈を設定するために使用されます。

serviceUpstream

これにより、NGINXにアップストリームとしてサービス自体に直接連絡するように指示することで、Webserviceポッドへのトラフィックのバランスがより均等になります。詳細については、NGINXドキュメントを参照してください。

これをオーバーライドするには、次のように設定します:

gitlab:
  webservice:
    ingress:
      serviceUpstream: "false"

proxyBodySize

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"

追加のIngress

extraIngress.enabled=trueを設定すると、追加のIngressをデプロイできます。Ingressには、-extraサフィックスが付いたデフォルトIngressという名前が付けられ、デフォルト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ドキュメントは、グローバルページに統合されました。最新のRedis構成オプションについては、このページを参照してください。

PostgreSQL

PostgreSQLドキュメントは、グローバルページに統合されました。最新のPostgreSQL構成オプションについては、このページを参照してください。

Webserviceデプロイのdependencies initContainerは、次のことを確認するスクリプトを実行します:

  • GitLabの依存関係が利用可能かどうか。
  • PostgreSQLのデータベース移行が実行されたかどうか。

これらのスクリプトの動作を制御するには、WebserviceチャートのextraEnv構成キーを使用できます。2つの環境変数がサポートされています:

  • BYPASS_POST_DEPLOYMENT=true: すべての通常の移行が実行され、デプロイ後の移行のみが保留されている場合、依存関係チェックは合格します
  • BYPASS_SCHEMA_VERSION=true(推奨されません): 通常の移行が実行されていない場合でも、依存関係チェックは合格します。この環境変数を使用すると、データベーススキーマがアプリケーションコードの期待値と一致しないため、起動後にRailsデプロイがエラーになる可能性があります。

Gitaly

Gitalyは、グローバル設定によって構成されます。Gitaly構成ドキュメントを参照してください。

MinIO

minio:
  serviceName: 'minio-svc'
  port: 9000
名前デフォルト説明
port整数9000MinIO Serviceに到達するためのポート番号。
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が存在しない場合、チャートは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 Documentationのドキュメントを参照してください。
port整数ホスト名で使用される外部ポート。80または443ポートを使用すると、URIがhttp/httpsで形成されます。他のポートはすべてhttpを使用し、ホスト名の最後にポートを追加します(たとえば、http://registry.example.com:8443)。
tokenIssuer文字列gitlab-issuer認証トークン発行者の名前。これは、送信時にトークンに組み込まれるため、レジストリの構成で使用されている名前と一致している必要があります。gitlab-issuerのデフォルトは、レジストリチャートで使用するのと同じデフォルトです。

チャート設定

次の値は、Webserviceポッドの構成に使用されます。

名前デフォルト説明
workerProcesses整数2ポッドごとに実行するWebserviceワーカーの数。GitLabが適切に機能するためには、クラスタリングで少なくとも2つのワーカーを使用できる必要があります。workerProcessesを増やすと、ワーカーごとに約400MBだけ必要なメモリが増加するため、それに応じてポッドのresourcesを更新する必要があります。
minReplicas整数2レプリカの最小数
maxReplicas整数10レプリカの最大数
maxUnavailable整数1利用できないポッドの最大数の制限

メトリクス

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 Shell

GitLab Shellは、Webserviceとの通信で認証トークンを使用します。共有シークレットを使用して、トークンをGitLab ShellおよびWebserviceと共有します。

shell:
  authToken:
    secret: gitlab-shell-secret
    key: secret
  port:
名前デフォルト説明
authToken.key文字列は、上記のシークレットのうちトークンを含むキーの名前を定義します。
authToken.secret文字列Secretは、プル元のシークレットの名前を定義します。
port整数22GitLab UI内でSSH URLの生成に使用するポート番号。global.shell.portによって制御されます。

WebServerオプション

現在のチャートのバージョンは、Puma Webサーバーをサポートしています。

Puma固有のオプション:

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

networkpolicyの設定

このセクションでは、NetworkPolicyを制御します。この設定はオプションであり、特定のエンドポイントへのポッドのエグレスおよびイングレスを制限するために使用されます。

名前デフォルト説明
enabledブール値falseこの設定により、NetworkPolicyが有効になります。
ingress.enabledブール値falsetrueに設定すると、Ingressネットワークポリシーがアクティブになります。ルールが指定されていない限り、これにより、すべてのイングレス接続がブロックされます。
ingress.rules配列[]イングレスポリシーのルール。詳細については、https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resourceと以下の例を参照してください
egress.enabledブール値falsetrueに設定すると、Egressネットワークポリシーがアクティブになります。これにより、ルールが指定されていない限り、すべてのエグレス接続がブロックされます。
egress.rules配列[]エグレスポリシーのルール。詳細については、https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resourceと以下の例を参照してください

ネットワークポリシーの例

webserviceサービスには、Prometheusエクスポーターが有効になっている場合、イングレス接続、NGINXイングレスからのトラフィック、およびいくつかのGitLabポッドが必要です。通常、さまざまな場所へのエグレス接続が必要です。この例では、次のネットワークポリシーを追加します:

  • イングレスリクエストを許可:
    • ポッドgitalygitlab-pagesgitlab-shellkasmailroom、およびnginx-ingressからポート8181
    • Prometheusポッドからポート80808083、および9229
  • エグレスリクエストを許可:
    • gitalyポッドからポート8075
    • kasポッドからポート8153
    • kube-dnsからポート53
    • registryポッドからポート5000
    • 外部データベース172.16.0.10/32からポート5432
    • 外部Redis 172.16.0.11/32からポート6379
    • インターネット0.0.0.0/0からポート443
    • S3またはSTSのAWS VPCエンドポイントのようなエンドポイントからポート443 172.16.1.0/24

提供されている例は単なる例であり、完全ではない可能性があります

ウェブサービスには、オブジェクトストレージ上のイメージへの送信接続が必要であることに注意してください

この例は、kube-dnsがネームスペースkube-systemに、prometheusがネームスペースmonitoringに、nginx-ingressがネームスペースnginx-ingressにデプロイされたという前提に基づいています。

networkpolicy:
  enabled: true
  ingress:
    enabled: true
    rules:
      - from:
          - podSelector:
              matchLabels:
                app: gitaly
        ports:
          - port: 8181
      - from:
          - podSelector:
              matchLabels:
                app: gitlab-pages
        ports:
          - port: 8181
      - from:
          - podSelector:
              matchLabels:
                app: gitlab-shell
        ports:
          - port: 8181
      - from:
          - podSelector:
              matchLabels:
                app: kas
        ports:
          - port: 8181
      - from:
          - podSelector:
              matchLabels:
                app: mailroom
        ports:
          - port: 8181
      - from:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: nginx-ingress
            podSelector:
              matchLabels:
                app: nginx-ingress
                component: controller
        ports:
          - port: 8181
      - from:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: monitoring
            podSelector:
              matchLabels:
                app: prometheus
                component: server
                release: gitlab
        ports:
          - port: 9229
          - port: 8080
          - port: 8083
  egress:
    enabled: true
    rules:
      - to:
          - podSelector:
              matchLabels:
                app: gitaly
        ports:
          - port: 8075
      - to:
          - podSelector:
              matchLabels:
                app: kas
        ports:
          - port: 8153
      - to:
          - ipBlock:
              cidr: 0.0.0.0/0
              except:
                - 10.0.0.0/8
        ports:
          - port: 443
      - to:
          - ipBlock:
              cidr: 172.16.0.10/32
        ports:
          - port: 5432
      - to:
          - ipBlock:
              cidr: 172.16.0.11/32
        ports:
          - port: 6379
      - to:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: kube-system
            podSelector:
              matchLabels:
                k8s-app: kube-dns
        ports:
          - port: 53
            protocol: UDP

LoadBalancerLoadBalancerサービス

service.typeLoadBalancerに設定されている場合、オプションでservice.loadBalancerIPを指定して、ユーザー指定のIPでLoadBalancerを作成できます(クラウドプロバイダーがサポートしている場合)。

service.typeLoadBalancerに設定されている場合は、service.loadBalancerSourceRangesを設定して、LoadBalancerにアクセスできるCIDR範囲を制限する必要があります(クラウドプロバイダーがサポートしている場合)。現在、メトリクスポートが公開されている問題により、これは必須です。

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ブール値falseHorizontalPodAutoscalersの代わりにKEDA ScaledObjectsを使用します
pollingInterval整数30各トリガーをチェックする間隔
cooldownPeriod整数300リソースを0にスケールバックする前に、最後トリガーがアクティブとレポートされてから待機する期間
minReplicaCount整数minReplicasKEDAがリソースをスケールダウンする最小レプリカ数。
maxReplicaCount整数maxReplicasKEDAがリソースをスケールアップする最大レプリカ数。
fallbackマップKEDAのフォールバック設定については、ドキュメントを参照してください
hpaName文字列keda-hpa-{scaled-object-name}KEDAが作成するHPAリソースの名前。
restoreToOriginalReplicaCountブール値ターゲットリソースを、ScaledObjectの削除後に元のレプリカ数にスケールバックするかどうかを指定します
behaviorマップhpa.behaviorアップスケールとダウンスケールの動作の仕様。
triggers配列ターゲットリソースのスケールをアクティブにするトリガーのリスト。hpa.cpuhpa.memoryから計算されたトリガーにデフォルト設定されています