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

GitLab-Sidekiqチャートの使用

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

sidekiqサブチャートは、Sidekiqワーカーの設定可能なデプロイを提供し、個々のスケーラビリティと設定を備えた複数のDeployment間のキューの分離を提供するように明示的に設計されています。

このチャートはpods:のデフォルトの宣言を提供しますが、空の定義を提供すると、noワーカーが表示されます。

要件

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

設計上の選択

このチャートは、複数のDeploymentとそれに関連付けられたConfigMapを作成します。コマンド長に関する懸念を回避するために、environment属性またはコンテナのcommandへの追加の引数を使用する代わりに、ConfigMapの動作を利用する方が明確であると判断されました。この選択により、多数のConfigMapが生成されますが、各ポッドが何をする必要があるかという非常に明確な定義が提供されます。

設定

sidekiqチャートは、チャート全体の外部サービスチャート全体のデフォルト 、およびポッドごとの定義の3つの部分で構成されています。

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

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

パラメータデフォルト説明
annotationsポッドの注釈
podLabels補足的なポッドのラベル。セレクターには使用されません。
common.labelsこのチャートによって作成されたすべてのオブジェクトに適用される補足的なラベル。
concurrency20Sidekiqのデフォルトの並行処理
deployment.strategy{}デプロイで使用される更新戦略を構成できます
deployment.terminationGracePeriodSeconds30ポッドが正常に終了するために必要な、秒単位のオプションの期間。
enabledtrueSidekiqが有効なフラグ
extraContainers含めるコンテナのリストを含む複数行のリテラルスタイルの文字列
extraInitContainers含める追加のinitコンテナのリスト
extraVolumeMounts構成する追加のボリュームマウントの文字列テンプレート
extraVolumes構成する追加のボリュームの文字列テンプレート
extraEnv公開する追加の環境変数のリスト
extraEnvFrom公開する他のデータソースからの追加の環境変数のリスト
gitaly.serviceNamegitalyGitalyサービス名
health_checks.port3808ヘルスチェックサーバーのポート
health_checks.listenAddr*ヘルスチェックリッスンアドレス。
hpa.behaviour{scaleDown: {stabilizationWindowSeconds: 300 }}動作には、アップスケールとダウンスケールの動作の仕様が含まれています(autoscaling/v2beta2以上が必要です)
hpa.customMetrics[]カスタムメトリクスには、目的のレプリカ数を計算するために使用する仕様が含まれています(targetAverageUtilizationで構成された平均CPU使用率のデフォルトの使用をオーバーライドします)
hpa.cpu.targetTypeAverageValueオートスケールCPUターゲットタイプを設定します。UtilizationまたはAverageValueのいずれかである必要があります
hpa.cpu.targetAverageValue350mオートスケールCPUターゲット値を設定します
hpa.cpu.targetAverageUtilizationオートスケールCPUターゲット使用率を設定します
hpa.memory.targetTypeオートスケールメモリターゲットタイプを設定します。UtilizationまたはAverageValueのいずれかである必要があります
hpa.memory.targetAverageValueオートスケールメモリターゲット値を設定します
hpa.memory.targetAverageUtilizationオートスケールメモリターゲット使用率を設定します
hpa.targetAverageValue非推奨 オートスケールCPUターゲット値を設定します
keda.enabledfalseHorizontalPodAutoscalersの代わりにKEDA ScaledObjectsを使用します
keda.pollingInterval30各トリガーをチェックする間隔
keda.cooldownPeriod300リソースを0にスケールバックする前に、最後トリガーがアクティブとレポートされてから待機する期間
keda.minReplicaCountKEDAがリソースをスケールダウンするレプリカの最小数。minReplicasがデフォルトです
keda.maxReplicaCountKEDAがリソースをスケールアップするレプリカの最大数。maxReplicasがデフォルトです
keda.fallbackKEDAフォールバック構成については、ドキュメントを参照してください
keda.hpaNameKEDAが作成するHPAリソースの名前。keda-hpa-{scaled-object-name}がデフォルトです
keda.restoreToOriginalReplicaCountScaledObjectが削除された後、ターゲットリソースを元のレプリカ数にスケールバックするかどうかを指定します
keda.behaviorアップスケールおよびダウンスケール動作の仕様。hpa.behaviorがデフォルトです
keda.triggersターゲットリソースのスケーリングをアクティブ化するトリガーのリスト。hpa.cpuおよびhpa.memoryから計算されたトリガーがデフォルトです
minReplicas2レプリカの最小数
maxReplicas10レプリカの最大数
maxUnavailable1使用できなくなるポッドの最大数の制限
image.pullPolicyAlwaysSidekiqイメージのプルポリシー
image.pullSecretsイメージリポジトリのシークレット
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-eeSidekiqイメージリポジトリ
image.tagSidekiqイメージタグ付け
init.image.repositoryinitコンテナイメージ
init.image.taginitコンテナイメージタグ付け
init.containerSecurityContextinitコンテナ固有のsecurityContext
init.containerSecurityContext.runAsUser1000initコンテナ固有: コンテナを開始するユーザーID
init.containerSecurityContext.allowPrivilegeEscalationfalseinitコンテナ固有: プロセスが親プロセスよりも多くの特権を取得できるかどうかを制御します
init.containerSecurityContext.runAsNonRoottrueinitコンテナ固有: コンテナを非rootユーザーで実行するかどうかを制御します
init.containerSecurityContext.capabilities.drop[ "ALL" ]initコンテナ固有: コンテナのLinuxケイパビリティを削除します
logging.formatjsonJSON以外のログの場合は、textに設定します
metrics.enabledtrueメトリクスのエンドポイントをスクレイピングに使用できるようにするかどうか
metrics.port3807メトリクスエンドポイントポート
metrics.listenAddr*メトリクスエンドポイントのリッスンアドレス。
metrics.path/metricsメトリクスエンドポイントパス
metrics.log_enabledfalsesidekiq_exporter.logに書き込まれるメトリクスサーバーログを有効または無効にします
metrics.podMonitor.enabledfalseメトリクスのスクレイピングを管理するために、ポッドモニターを作成してPrometheus Operatorを有効にする必要があるかどうか
metrics.podMonitor.additionalLabels{}ポッドモニターに追加する追加のラベル
metrics.podMonitor.endpointConfig{}ポッドモニターの追加のエンドポイント構成
metrics.annotations非推奨 明示的なメトリクス注釈を設定します。テンプレートコンテンツに置き換えられました。
metrics.tls.enabledfalsemetrics/sidekiq_exporterエンドポイントに対してTLSが有効
metrics.tls.secretName{Release.Name}-sidekiq-metrics-tlsmetrics/sidekiq_exporterエンドポイントTLS証明書とキーのシークレット
psql.password.keypsql-passwordpsqlシークレット内のpsqlパスワードへのキー
psql.password.secretgitlab-postgrespsqlパスワードシークレット
psql.portPostgreSQLサーバーのポートを設定します。これは、global.psql.portより優先されます。
redis.serviceNameredisRedisサービス名
resources.requests.cpu900mSidekiqに必要な最小CPU
resources.requests.memory2GSidekiqに必要な最小メモリ
resources.limits.memorySidekiqで許可される最大メモリ
timeout25Sidekiqジョブのタイムアウト
tolerations[]ポッド割り当てのTolerationラベル
memoryKiller.daemonModetruefalseの場合、従来のメモリキラーモードを使用します
memoryKiller.maxRss2000000遅延シャットダウンがトリガーされる前の最大RSS(キロバイト単位)
memoryKiller.graceTime900トリガーされたシャットダウンの前に待機する時間(秒単位)
memoryKiller.shutdownWait30既存のジョブが完了するためにトリガーされたシャットダウン後の時間(秒単位)
memoryKiller.hardLimitRssデーモンモードで、即時シャットダウンがトリガーされる前の最大RSS(キロバイト単位)
memoryKiller.checkInterval3メモリチェックの間隔時間
livenessProbe.initialDelaySeconds20Livenessプローブを開始するまでの遅延
livenessProbe.periodSeconds60Livenessプローブの実行頻度
livenessProbe.timeoutSeconds30Livenessプローブがタイムアウトしたとき
livenessProbe.successThreshold1Livenessプローブが失敗した後、成功したと見なされるための最小連続成功回数
livenessProbe.failureThreshold3Livenessプローブが成功した後、失敗したと見なされるための最小連続失敗回数
readinessProbe.initialDelaySeconds0Readinessプローブを開始するまでの遅延
readinessProbe.periodSeconds10Readinessプローブの実行頻度
readinessProbe.timeoutSeconds2Readinessプローブがタイムアウトしたとき
readinessProbe.successThreshold1Readinessプローブが失敗した後、成功したと見なされるための最小連続成功回数
readinessProbe.failureThreshold3Readinessプローブが成功した後、失敗したと見なされるための最小連続失敗回数
securityContext.fsGroup1000ポッドを開始するグループID
securityContext.runAsUser1000ポッドを開始するユーザーID
securityContext.fsGroupChangePolicyボリュームの所有権とアクセス許可を変更するためのポリシー(Kubernetes 1.23が必要です)
securityContext.seccompProfile.typeRuntimeDefault使用するSeccompプロファイル
containerSecurityContextコンテナを開始するオーバーライドコンテナのsecurityContext
containerSecurityContext.runAsUser1000コンテナを開始する特定のセキュリティコンテキストを上書きすることを許可します
containerSecurityContext.allowPrivilegeEscalationfalseコンテナのプロセスが親プロセスよりも多くの特権を取得できるかどうかを制御します
containerSecurityContext.runAsNonRoottrueコンテナを非rootユーザーで実行するかどうかを制御します
containerSecurityContext.capabilities.drop[ "ALL" ]GitalyコンテナのLinuxケイパビリティを削除します
serviceAccount.annotations{}ServiceAccountの注釈
serviceAccount.automountServiceAccountTokenfalseデフォルトのServiceAccountアクセストークンをポッドにマウントするかどうかを示します
serviceAccount.createfalseServiceAccountを作成するかどうかを示します
serviceAccount.enabledfalseServiceAccountを使用するかどうかを示します
serviceAccount.nameServiceAccountの名前。設定されていない場合、チャートのフルネームが使用されます
priorityClassName""ポッドのpriorityClassNameを構成できるようにします。これは、削除の場合にポッドの優先度を制御するために使用されます

チャート構成の例

リソース

resourcesを使用すると、Sidekiqポッドが消費できるリソース(メモリとCPU)の最小量と最大量を構成できます。

Sidekiqポッドのワークロードは、デプロイによって大きく異なります。一般的に言って、各Sidekiqプロセスは約1つのvCPUと2 GBのメモリを消費すると理解されています。垂直方向のスケーリングは、通常、vCPU:Memoryのこの1:2の比率に合わせる必要があります。

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

resources:
  limits:
    memory: 5G
  requests:
    memory: 2G
    cpu: 900m

extraEnv

extraEnvを使用して、依存関係コンテナで追加の環境変数を公開します。

たとえば、SOME_KEYおよびSOME_OTHER_KEYの環境変数を公開するには、次のようにします:

extraEnv:
  SOME_KEY: some_value
  SOME_OTHER_KEY: some_other_value

コンテナが起動したら、envコマンドを実行し、変数の名前をgrepして、環境変数が公開されていることを確認します。例:

env | grep SOME
SOME_KEY=some_value
SOME_OTHER_KEY=some_other_value

特定のポッドに対してextraEnvを設定することもできます。例:

extraEnv:
  SOME_KEY: some_value
  SOME_OTHER_KEY: some_other_value
pods:
  - name: mailers
    queues: mailers
    extraEnv:
      SOME_POD_KEY: some_pod_value
  - name: catchall

これにより、mailersポッドのアプリケーションコンテナに対してのみSOME_POD_KEYが設定されます。ポッドレベルのextraEnv設定は、initコンテナに追加されません。

extraEnvFrom

extraEnvFromを使用すると、ポッド内のすべてのコンテナで、他のデータソースからの追加の環境変数を公開できます。後続の変数は、Sidekiqポッドごとにオーバーライドできます。

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
pods:
  - name: immediate
    extraEnvFrom:
      CONFIG_STRING:
        configMapKeyRef:
          name: useful-config
          key: some-string
          # optional: boolean

extraVolumes

extraVolumesを使用すると、チャート全体の追加ボリュームを構成できます。

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

extraVolumes: |
  - name: example-volume
    persistentVolumeClaim:
      claimName: example-pvc

extraVolumeMounts

extraVolumeMountsを使用すると、チャート全体のすべてのコンテナで追加のvolumeMountsを構成できます。

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

extraVolumeMounts: |
  - name: example-volume-mount
    mountPath: /etc/example

image.pullSecrets

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

プライベートレジストリとその認証方法に関する追加の詳細は、Kubernetesドキュメントにあります。

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

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

serviceAccount

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

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

tolerations

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

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

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

annotations

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

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

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

このチャートのCommunity Editionの使用

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

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

外部サービス

このチャートは、Webserviceチャートと同じRedis、PostgreSQL、およびGitalyインスタンスにアタッチする必要があります。外部サービスの値は、すべてのSidekiqポッド間で共有されるConfigMapに入力されたます。

Redis

redis:
  host: rank-racoon-redis
  port: 6379
  sentinels:
    - host: sentinel1.example.com
      port: 26379
  password:
    secret: gitlab-redis
    key: redis-password
名前デフォルト説明
host文字列使用するデータベースが格納されているRedisサーバーのホスト名。serviceNameの代わりとして省略できます。Redis Sentinelを使用している場合、host属性は、sentinel.confで指定されているクラスタ名に設定する必要があります。
password.key文字列Redisのpassword.key属性は、パスワードを含むシークレット(下記)内のキーの名前を定義します。
password.secret文字列Redisのpassword.secret属性は、プル元のKubernetes Secretの名前を定義します。
port整数6379Redisサーバーへの接続に使用するポート。
serviceName文字列redisRedisデータベースを操作しているserviceの名前。これが存在し、hostが存在しない場合、チャートはhost値の代わりにサービスのホスト名(および現在の.Release.Name)をテンプレート処理します。これは、RedisをGitLabチャート全体の一部として使用する場合に便利です。
sentinels.[].host文字列Redis HA設定用のRedis Sentinelサーバーのホスト名。
sentinels.[].port整数26379Redis Sentinelサーバーへの接続に使用するポート。

現在のRedis Sentinelサポートは、GitLabチャートとは別にデプロイされたSentinelのみをサポートしています。そのため、redis.install=falseに設定して、GitLabチャートによるRedisのデプロイを無効にする必要があります。また、Redisのパスワードを含むKubernetesシークレットを、GitLabチャートをデプロイする前に手動で作成しておく必要があります。

PostgreSQL

psql:
  host: rank-racoon-psql
  serviceName: pgbouncer
  port: 5432
  database: gitlabhq_production
  username: gitlab
  preparedStatements: false
  password:
    secret: gitlab-postgres
    key: psql-password
名前デフォルト説明
host文字列使用するデータベースを持つPostgreSQLサーバーのホスト名。これは、postgresql.install=trueの場合に省略できます(デフォルトは非本番環境)。
serviceName文字列PostgreSQLデータベースを操作しているserviceの名前。これが存在し、hostが存在しない場合、チャートはhost値の代わりにサービスのホスト名をテンプレート処理します。
database文字列gitlabhq_productionPostgreSQLサーバーで使用するデータベースの名前。
password.key文字列PostgreSQLのpassword.key属性は、パスワードを含むシークレット(下記)内のキーの名前を定義します。
password.secret文字列PostgreSQLのpassword.secret属性は、プル元のKubernetes Secretの名前を定義します。
port整数5432PostgreSQLサーバーへの接続に使用するポート。
username文字列gitlabデータベースへの認証に使用するユーザー名。
preparedStatementsブール値falsePostgreSQLサーバーとの通信時にプリペアドステートメントを使用するかどうか。

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

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

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

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

Gitaly

gitaly:
  internal:
    names:
      - default
      - default2
  external:
    - name: node1
      hostname: node1.example.com
      port: 8079
  authToken:
    secret: gitaly-secret
    key: token
名前デフォルト説明
host文字列使用するGitalyサーバーのホスト名。serviceNameの代わりとして省略できます。
serviceName文字列gitalyGitalyサーバーを操作しているserviceの名前。これが存在し、hostが存在しない場合、チャートはhost値の代わりにサービスのホスト名(および現在の.Release.Name)をテンプレート処理します。これは、GitalyをGitLabチャート全体の一部として使用する場合に便利です。
port整数8075Gitalyサーバーへの接続に使用するポート。
authToken.key文字列authTokenを含む下のシークレット内のキーの名前。
authToken.secret文字列Secretは、プル元のKubernetesシークレットの名前を定義します。

メトリクス

デフォルトでは、ポッドごとにPrometheusメトリクスエクスポーターが有効になっています。メトリクスは、GitLab Prometheusメトリクスが管理者エリアで有効になっている場合にのみ使用できます。エクスポーターは、ポート3807/metricsエンドポイントを公開します。メトリクスが有効になっている場合、Prometheusサーバーが公開されたメトリクスを検出してスクレイプできるように、各ポッドに注釈が追加されます。

チャート全体のデフォルト

ポッドごとに値が表示されない場合、次の値がチャート全体で使用されます。

名前デフォルト説明
concurrency整数25同時に処理するタスクの数。
timeout整数4Sidekiqシャットダウンタイムアウト。SidekiqがTERMシグナルを受信してから、プロセスを強制的にシャットダウンするまでの秒数。
memoryKiller.checkInterval整数3メモリチェックの間隔時間(秒単位)
memoryKiller.maxRss整数2000000遅延シャットダウンがトリガーされる前の最大RSS(キロバイト単位)
memoryKiller.graceTime整数900トリガーされたシャットダウンの前に待機する時間(秒単位)
memoryKiller.shutdownWait整数30既存のジョブを完了するために、トリガーされたシャットダウン後の時間を秒単位で表します
minReplicas整数2最小レプリカ数
maxReplicas整数10最大レプリカ数
maxUnavailable整数1使用不能にするポッドの最大数の制限

Sidekiqメモリーキラーの詳細なドキュメントを利用できます Linuxパッケージのドキュメントに記載されています。

ポッドごとの設定

pods宣言は、ワーカーポッドのすべての属性の宣言を提供します。これらはDeploymentにテンプレート化され、Sidekiq Redisインスタンスの個々のConfigMapが設定されます。

この設定は、すべてのキューを監視するように設定された単一のポッドを含めるようにデフォルト設定されています。ポッドセクションを変更すると、デフォルトのポッドを上書きして、別のポッドの構成に置き換えられます。デフォルトに加えて、新しいポッドが追加されることはありません。

名前デフォルト説明
concurrency整数同時に処理するタスクの数。指定されていない場合は、チャート全体のデフォルトからプルされます。
name文字列このポッドのDeploymentConfigMapの名前を指定するために使用されます。短く保ち、2つのエントリ間で複製しないでください。
queues文字列下記を参照
timeout整数Sidekiqシャットダウンタイムアウト。SidekiqがTERMシグナルを受信してから、プロセスを強制的にシャットダウンするまでの秒数。指定されていない場合は、チャート全体のデフォルトからプルされます。この値は、terminationGracePeriodSecondsより小さくする必要があります
resources各ポッドは独自のresources要件を示すことができ、存在する場合は、それに対して作成されたDeploymentに追加されます。これらはKubernetesドキュメントと一致します。
nodeSelector各ポッドはnodeSelector属性で構成でき、存在する場合は、それに対して作成されたDeploymentに追加されます。これらの定義はKubernetesドキュメントと一致します。
memoryKiller.checkInterval整数3メモリーチェックの間隔時間
memoryKiller.maxRss整数2000000指定されたポッドの最大RSSをオーバーライドします。
memoryKiller.graceTime整数900指定されたポッドのトリガーされたシャットダウンまでの待機時間をオーバーライドします
memoryKiller.shutdownWait整数30指定されたポッドの既存のジョブを完了するために、トリガーされたシャットダウン後の時間をオーバーライドします
minReplicas整数2最小レプリカ数
maxReplicas整数10最大レプリカ数
maxUnavailable整数1使用不能にするポッドの最大数の制限
podLabelsマップ{}補足ポッドラベル。セレクターには使用されません。
strategy{}デプロイで使用される更新ストラテジーを構成できます
extraVolumes文字列指定されたポッドの追加のボリュームを構成します。
extraVolumeMounts文字列指定されたポッドの追加のボリュームマウントを構成します。
priorityClassName文字列""ポッドpriorityClassNameを構成できるようにします。これは、削除の場合にポッドの優先度を制御するために使用されます
hpa.customMetrics配列[]カスタムメトリクスには、目的のレプリカ数を計算するために使用する仕様が含まれています(targetAverageUtilizationで構成された平均CPU使用率のデフォルトの使用をオーバーライドします)
hpa.cpu.targetType文字列AverageValueオートスケールCPUターゲットタイプをオーバーライドします。UtilizationまたはAverageValueのいずれかである必要があります
hpa.cpu.targetAverageValue文字列350mオートスケールCPUターゲット値をオーバーライドします
hpa.cpu.targetAverageUtilization整数オートスケールCPUターゲット使用率をオーバーライドします
hpa.memory.targetType文字列オートスケールメモリーターゲットタイプをオーバーライドします。UtilizationまたはAverageValueのいずれかである必要があります
hpa.memory.targetAverageValue文字列オートスケールメモリーターゲット値をオーバーライドします
hpa.memory.targetAverageUtilization整数オートスケールメモリーターゲット使用率をオーバーライドします
hpa.targetAverageValue文字列非推奨 オートスケールCPUターゲット値をオーバーライドします
keda.enabledブール値falseKEDAの有効化をオーバーライドします
keda.pollingInterval整数30KEDAポーリングの間隔をオーバーライドします
keda.cooldownPeriod整数300KEDAクールダウン期間をオーバーライドします
keda.minReplicaCount整数KEDAの最小レプリカ数をオーバーライドします
keda.maxReplicaCount整数KEDAの最大レプリカ数をオーバーライドします
keda.fallbackマップKEDAフォールバック構成。ドキュメントを参照してください
keda.hpaName文字列KEDA HPA名をオーバーライドします
keda.restoreToOriginalReplicaCountブール値元のレプリカ数を復元できるようにするかどうかを指定しますが削除された後にカウントします
keda.behaviorマップアップスケールとダウンスケールの仕様。デフォルトはです
keda.triggers配列KEDAトリガーをオーバーライドします
extraEnvマップ公開する追加の環境変数のリスト。チャート全体の値をこれにマージし、ポッドの値が優先されます
extraEnvFromマップ公開する他のデータソースからの追加の環境変数のリスト
terminationGracePeriodSeconds整数30ポッドが正常に終了するために必要なオプションの期間(秒単位)。

キュー

queues値は、処理されるキューのコンマ区切りのリストを含む文字列です。デフォルトでは、これは設定されておらず、すべてのキューが処理されることを意味します。

文字列にスペースを含めることはできません。merge,post_receive,process_commitは機能しますが、merge, post_receive, process_commitは機能しません。

ジョブが追加されたが、少なくとも1つのポッドアイテムの一部として表されていないキューは、処理されません。すべてのキューの完全なリストについては、GitLabソースのこれらのファイルを参照してください:

  1. app/workers/all_queues.yml
  2. ee/app/workers/all_queues.yml

gitlab.sidekiq.pods[].queuesを構成することに加えて、global.appConfig.sidekiq.routingRulesも構成する必要があります。詳細については、Sidekiqルーティングルール設定を参照してください。

podエントリ

pods:
  - name: immediate
    concurrency: 10
    minReplicas: 2  # defaults to inherited value
    maxReplicas: 10 # defaults to inherited value
    maxUnavailable: 5 # defaults to inherited value
    queues: merge,post_receive,process_commit
    extraVolumeMounts: |
      - name: example-volume-mount
        mountPath: /etc/example
    extraVolumes: |
      - name: example-volume
        persistentVolumeClaim:
          claimName: example-pvc
    resources:
      limits:
        cpu: 800m
        memory: 2Gi
    hpa:
      cpu:
        targetType: Value
        targetAverageValue: 350m

Sidekiq構成の完全な例

次に示すのは、インポート関連のジョブに個別のSidekiqポッド、エクスポート関連のジョブに個別のRedisインスタンスを使用したSidekiqポッド、およびその他すべてのポッドを使用するSidekiq構成の完全な例です。

...
global:
  appConfig:
    sidekiq:
      routingRules:
      - ["feature_category=importers", "import"]
      - ["feature_category=exporters", "export", "queues_shard_extra_shard"]
      - ["*", "default"]
  redis:
    redisYmlOverride:
      queues_shard_extra_shard: ...
...
gitlab:
  sidekiq:
    pods:
    - name: import
      queues: import
    - name: export
      queues: export
      extraEnv:
        SIDEKIQ_SHARD_NAME: queues_shard_extra_shard # to match key in global.redis.redisYmlOverride
    - name: default
...

networkpolicyの構成

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

名前デフォルト説明
enabledブール値falseこの設定は、ネットワークポリシーを有効にします
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および以下の例を参照してください

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

Sidekiqサービスは、有効になっている場合はPrometheus exporterに対してのみイングレス接続を必要とし、通常はさまざまな場所へのエグレス接続を必要とします。この例では、次のネットワークポリシーを追加します:

  • イングレスリクエストを許可します:
    • Prometheusポッドからポート3807
  • エグレスリクエストを許可します:
    • kube-dnsからポート53
    • gitalyポッドからポート8075
    • registryポッドからポート5000
    • kasポッドからポート8153
    • 外部データベース172.16.0.10/32からポート5432
    • 外部Redis 172.16.0.11/32からポート6379
    • 外部Elasticsearch 172.16.0.12/32からポート443
    • メールゲートウェイ172.16.0.13/32からポート587
    • S3またはSTSのAWS VPCエンドポイントなどのエンドポイントからポート443172.16.1.0/24
    • 内部サブネット172.16.2.0/24からポート443へWebhookを送信します

提供されている例は単なる例であり、完全ではない可能性があることに注意してください

Sidekiqサービスは、ローカルエンドポイントが利用できない場合に、外部オブジェクトストレージ上のイメージに対してパブリックインターネットへの送信接続を必要とします。

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

networkpolicy:
  enabled: true
  ingress:
    enabled: true
    rules:
      - from:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: monitoring
            podSelector:
              matchLabels:
                app: prometheus
                component: server
                release: gitlab
        ports:
          - port: 3807
  egress:
    enabled: true
    rules:
      - to:
          - podSelector:
              matchLabels:
                app: gitaly
        ports:
          - port: 8075
      - to:
          - podSelector:
              matchLabels:
                app: kas
        ports:
          - port: 8153
      - to:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: kube-system
            podSelector:
              matchLabels:
                k8s-app: kube-dns
        ports:
          - port: 53
            protocol: UDP
      - to:
          - ipBlock:
              cidr: 172.16.0.10/32
        ports:
          - port: 5432
      - to:
          - ipBlock:
              cidr: 172.16.0.11/32
        ports:
          - port: 6379
      - to:
          - ipBlock:
              cidr: 172.16.0.12/32
        ports:
          - port: 25
      - to:
          - ipBlock:
              cidr: 172.16.0.13/32
        ports:
          - port: 443
      - to:
          - ipBlock:
              cidr: 172.16.1.0/24
        ports:
          - port: 443
      - to:
          - ipBlock:
              cidr: 172.16.2.0/24
        ports:
          - port: 443

KEDAの構成

このkedaセクションでは、通常のHorizontalPodAutoscalersの代わりにKEDA ScaledObjectsのインストールを有効にします。この構成はオプションであり、カスタムメトリクスまたは外部メトリクスに基づいてオートスケールが必要な場合に使用できます。

ほとんどの設定は、該当する場合、hpaセクションで設定された値にデフォルト設定されます。

次が当てはまる場合、CPUおよびメモリートリガーは、hpaセクションで設定されたCPUおよびメモリーのしきい値に基づいて自動的に追加されます:

  • triggersが設定されていません。
  • 対応するrequest.cpu.requestまたはrequest.memory.request設定もゼロ以外の値に設定されています。

トリガーが設定されていない場合、ScaledObjectは作成されません。

これらの設定の詳細については、KEDAドキュメントを参照してください。

名前デフォルト説明
enabledブール値falseHorizontalPodAutoscalersの代わりにKEDA ScaledObjectsを使用します
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から計算されるトリガーです