GitLab-Sidekiqチャートの使い方

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

このChartはデフォルトのpods: 宣言を提供しますが、空の定義を提供した場合、ワーカーは存在しません。

要件

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

設計の選択

このChartでは、複数のDeploymentsと関連するConfigMapsが ConfigMap作成さConfigMapれます。 ConfigMapコマンドの長さに関する懸念を避けるために、environment 属性やコンテナ用のcommand への追加引数を使用する代わりに、ビヘイビアをConfigMap使用する方が明確 ConfigMapであると判断されました。この選択により、ConfigMapsの数は多くなりますが、各ポッドが何をすべきかの定義が非常に明確になります。

設定

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

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

以下の表は、--set フラグを使用してhelm install コマンドに提供できるすべての可能な Chart 設定です:

パラメータデフォルト説明
annotations ポッド注釈
podLabels ポッドラベルの補足。セレクタには使用されません。
common.labels このChartで作成されたすべてのオブジェクトに適用される補助ラベル。
concurrency20Sidekiqデフォルトの同時実行数
deployment.strategy{}デプロイによって使用されるアップデート戦略を設定できます。
deployment.terminationGracePeriodSeconds30ポッドが優雅に終了するのに必要な秒数をオプションで指定します。
enabledtrueSidekiq有効フラグ
extraContainers 追加コンテナのリスト
extraInitContainers 追加コンテナのリスト
extraVolumeMounts 設定する追加ボリュームマウントの文字列テンプレート
extraVolumes 設定する追加ボリュームの文字列テンプレート
extraEnv 公開する追加環境変数のリスト
extraEnvFrom 公開する他のデータソースの追加環境変数のリスト
gitaly.serviceNamegitalyGitalyサービス名
health_checks.port3808ヘルスチェックサーバーポート
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.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
minReplicas2最小レプリカ数
maxReplicas10最大レプリカ数
maxUnavailable1利用できないポッド数の上限
image.pullPolicyAlwaysSidekiqイメージプルポリシー
image.pullSecrets 画像リポジトリのシークレット
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-eeSidekiqイメージリポジトリ
image.tag Sidekiq画像タグ
init.image.repository initContainer 画像
init.image.tag initContainer画像タグ
init.containerSecurityContext initContainer コンテナ固有のsecurityContext
logging.formatjsonJSON以外のログにはtext
metrics.enabledtrueメトリクスエンドポイントをスクレイピングのために利用可能にする場合
metrics.port3807メトリクス・エンドポイント・ポート
metrics.path/metricsメトリクスエンドポイントパス
metrics.log_enabledfalseに書き込まれるメトリクス・サーバのログを有効または無効にします。sidekiq_exporter.log
metrics.podMonitor.enabledfalsePrometheus Operatorがメトリクスのスクレイピングを管理できるようにPodMonitorを作成する場合
metrics.podMonitor.additionalLabels{}PodMonitorに追加するラベル
metrics.podMonitor.endpointConfig{}PodMonitorの追加エンドポイント設定
metrics.annotations  廃止明示的なメトリクス・アノテーションを設定します。テンプレート・コンテンツに置き換えられました。
metrics.tls.enabledfalse metrics/sidekiq_exporter エンドポイントで TLS を有効にします。
metrics.tls.secretName{Release.Name}-sidekiq-metrics-tls metrics/sidekiq_exporter エンドポイントのシークレット TLS 証明書とキー
psql.password.keypsql-passwordpsql シークレット psql パスワード キー
psql.password.secretgitlab-postgrespsql パスワード シークレット
psql.port PostgreSQL サーバのポートを設定します。よりも優先されます。global.psql.port
redis.serviceNameredisRedis サービス名
resources.requests.cpu900mSidekiqの最小必要CPU
resources.requests.memory2GSidekiqの最小必要メモリ
resources.limits.memory Sidekiqの最大許容メモリ
timeout25Sidekiqジョブのタイムアウト
tolerations[]ポッド割り当て用のトレラベル
memoryKiller.daemonModetrue false の場合、レガシーメモリキラーモードを使用。
memoryKiller.maxRss2000000遅延シャットダウンが発生するまでの最大RSS(キロバイト単位
memoryKiller.graceTime900シャットダウンまでの待ち時間(秒単位
memoryKiller.shutdownWait30シャットダウンがトリガーされた後、既存のジョブが終了するまでの時間(秒単位
memoryKiller.hardLimitRss デーモン・モードで即時シャットダウンがトリガーされるまでの最大RSS(キロバイト単位
memoryKiller.checkInterval3メモリチェック間の時間
livenessProbe.initialDelaySeconds20Liveness Probeが開始されるまでの遅延時間
livenessProbe.periodSeconds60Livenessプローブの実行頻度
livenessProbe.timeoutSeconds30Livenessプローブがタイムアウトした場合
livenessProbe.successThreshold1一度失敗したプローブが成功したとみなされるための最小連続成功回数
livenessProbe.failureThreshold3成功した後に失敗したとみなされるための連続した失敗の最小値
readinessProbe.initialDelaySeconds0Readiness Probeが開始されるまでの遅延。
readinessProbe.periodSeconds10Readinessプローブの実行頻度
readinessProbe.timeoutSeconds2準備完了プローブがタイムアウトした場合
readinessProbe.successThreshold1Readinessプローブが失敗した後、成功したとみなされるための最小連続成功回数
readinessProbe.failureThreshold3成功した後、レディネス・プローブが失敗したとみなされるには、最低連続失敗回数が必要です。
securityContext.fsGroup1000ポッドを起動するグループID
securityContext.runAsUser1000ポッドを起動するユーザーID
securityContext.fsGroupChangePolicy ボリュームの所有権と権限を変更するためのポリシー (Kubernetes 1.23 が必要)
containerSecurityContext コンテナが起動するコンテナsecurityContext をオーバーライドします。
containerSecurityContext.runAsUser1000コンテナが起動される特定のセキュリティコンテキストを上書きできるようにします。
priorityClassName""ポッドの設定を許可priorityClassName 、これは立ち退き時にポッドの優先度を制御するために使用されます。

Chart設定例

リソース

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 を使うと、 dependencies コンテナで追加の環境変数を公開することができます。

以下は、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

特定のポッドに対して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
    negateQueues: mailers

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

追加EnvFrom

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 を使用すると、Chart 全体で追加ボリュームを設定できます。

以下は、extraVolumes の使用例です:

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

extraVolumeMounts

extraVolumeMounts を使用すると、コンテナ全体で追加の VolumeMount を設定できます。

以下は、extraVolumeMounts の使用例です:

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

画像.pullSecrets

pullSecrets を使用すると、非公開レジストリで認証してポッドのイメージをプルできるようになります。

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

以下は、pullSecrets の使用例です:

image:
  repository: my.sidekiq.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 を使用すると、Sidekiqポッドに注釈を追加できます。

以下は、annotations の使用例です:

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

このChartのCommunity Editionを使用する場合

デフォルトでは、HelmチャートはGitLabのEnterprise Editionを使用しています。必要であれば、代わりに Community Edition を使うこともできます。両者の違いについてはこちらをご覧ください。

コミュニティ版を使うには、image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-sidekiq-ce に設定します。

外部サービス

このChartは、WebサービスChartと同じ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 Sentinels を使用する場合は、host 属性にsentinel.conf で指定したクラスター名を設定する必要があります。
password.key文字列 Redis のpassword.key 属性は、パスワードを含む秘密鍵 (下記) の名前を定義します。
password.secret文字列 Redisのpassword.secret 属性は、プルするKubernetesSecret の名前を定義します。
port整数6379Redis サーバーに接続するポート。
serviceName文字列redisRedisデータベースをオペレーションしているservice の名前。これが存在し、host が存在しない場合、Chart はhost の値の代わりにサービスのホスト名(および現在の.Release.Name )をテンプレート化します。RedisをGitLabチャート全体の一部として使用する場合に便利です。
sentinels.[].host文字列 Redis HA セットアップ用の Redis Sentinel サーバーのホスト名。
sentinels.[].port整数26379Redis Sentinelサーバーに接続するポート。
note
現在のRedis Sentinelサポートは、GitLabチャートとは別にデプロイされたSentinelのみをサポートしています。そのため、GitLabチャートを通してのRedisのデプロイは、redis.install=false で無効にする必要があります。Redisのパスワードを含むシークレットは、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 の場合は省略可能です(デフォルトは non-production)。
serviceName文字列 PostgreSQLデータベースをオペレーションしているservice 。これが存在し、かつhost 存在しない場合、Chartは hostこの値のhost 代わりにサービスのホスト名をテンプレート化 hostします。
database文字列gitlabhq_productionPostgreSQL サーバで使用するデータベースの名前。
password.key文字列 PostgreSQLのpassword.key 属性は、パスワードを含むsecret(以下)のキーの名前を定義します。
password.secret文字列 PostgreSQL のpassword.secret 属性は、KubernetesSecret からプルする名前を定義します。
port整数5432PostgreSQLサーバに接続するポート。
username文字列gitlabデータベースへの認証に使用するユーザ名。
preparedStatementsブール値falsePostgreSQLサーバと通信する際に準備された文を使用するかどうか。

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 が存在しない場合、Chart はhost の値の代わりにサービスのホスト名(および現在の.Release.Name)をテンプレート化します。これはGitalyをGitLabチャート全体の一部として使うときに便利です。
port整数8075Gitalyサーバーに接続するポート。
authToken.key文字列 authToken を含む以下の秘密のキーの名前。
authToken.secret文字列 プルする KubernetesSecret の名前。

メトリクス

デフォルトでは、ポッドごとにPrometheusメトリクスエクスポーターが有効になっています。管理エリアでGitLab Prometheus メトリクスが有効になっている場合のみ、メトリクスを利用できます。Exporter は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利用できないポッド数の上限
note
Sidekiqメモリキラーの詳細なドキュメントはLinuxパッケージのドキュメントにあります

ポッドごとの設定

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

note
設定のデフォルトは、すべてのキューを監視するように設定された単一のポッドです。ポッドセクションに変更を加えると、デフォルトのポッドが別のポッド設定で上書きされます。デフォルトに加えて新しいポッドが追加されることはありません。
名前種類デフォルト説明
concurrency整数 同時に処理するタスクの数。指定されない場合は、Chart 全体のデフォルト値が使用されます。
name文字列 このポッドのDeployment およびConfigMap の名前に使用します。短く、2 つのエントリの間で重複しないようにします。
queues文字列  以下を参照してください。
negateQueues文字列  DEPRECATED 下記参照
queueSelectorブール値false キューセレクタを使用します。
timeout整数 Sidekiqのシャットダウンタイムアウト。SidekiqがTERMシグナルを取得した後、プロセスを強制シャットダウンするまでの秒数。指定されていない場合、Chart全体のデフォルト値が使用されます。この値は、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 Utilization オートスケーリングCPUターゲットタイプを上書きします。AverageValue
hpa.cpu.targetAverageValue文字列350mオートスケーリングCPUターゲット値をオーバーライドします。
hpa.cpu.targetAverageUtilization整数 オートスケーリングCPUターゲット使用率をオーバーライドします。
hpa.memory.targetType文字列  Utilization オートスケーリング・メモリ・ターゲット・タイプを上書きします。AverageValue
hpa.memory.targetAverageValue文字列 オートスケーリングメモリの目標値を上書きします。
hpa.memory.targetAverageUtilization整数 オートスケーリングメモリターゲットの使用率をオーバーライドします。
hpa.targetAverageValue文字列  DEPRECATEDオートスケーリング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 HPAの動作を上書きします。
keda.triggers配列 KEDAトリガーをオーバーライドします。
extraEnvマップ 公開する追加の環境変数のリスト。Chart全体の値がマージされ、ポッドの値が優先されます。
extraEnvFromマップ 公開する他のデータソースの追加環境変数のリスト
terminationGracePeriodSeconds整数30ポッドが優雅に終了するのに必要な秒数をオプションで指定します。

キュー

queues の値は、処理すべきキューをカンマ区切りで列挙した文字列です。デフォルトではこの値は設定されておらず、すべてのキューが処理されます。

文字列はスペースを含んではいけません。merge,post_receive,process_commit は動作しますが、merge, post_receive, process_commit は動作しません。

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

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

negateQueues

negateQueuesqueues と同じ形式ですが、処理されるのではなく無視されるキューを表します。

文字列はスペースを含んではいけません。merge,post_receive,process_commit は動作しますが、merge, post_receive, process_commit は動作しません。

queues negateQueuesこれは、あるポッドが重要なキューを処理し、別のポッドが他のキューを処理している場合に便利です。これらのポッドは、同じキューのリストを使用することができます。

note
negateQueuesqueuesと一緒に提供negateQueuesすべきではありませんnegateQueues

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

設定networkpolicy

このセクションではNetworkPolicyを制御します。この設定はオプションで、ポッドの Egress および Ingress を特定のエンドポイントに制限するために使用します。

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

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

Sidekiqサービスは、有効になっている場合、PrometheusエクスポートのみにIngress接続を必要とし、通常は様々な場所にEgress接続を必要とします。この例では、次のネットワークポリシーを追加します:

  • TCP10.0.0.0/8 ポート 3807 のネットワークからのすべての 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 リクエストが許可されます。
  • 10.0.0.0/8 の内部ネットワークへのその他の Egress リクエストは制限されています。
  • 10.0.0.0/8 の外部へのリクエストは許可されます。

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

Sidekiqサービスでは、外部オブジェクトストレージ上の画像に対して公開インターネットへのアウトバウンド接続が必要です。

networkpolicy:
  enabled: true
  ingress:
    enabled: true
    rules:
      - from:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 3807
  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: 0.0.0.0/0
            except:
            - 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