GitLabkas チャートの使い方

kas サブチャートは、GitLabエージェントサーバ(KAS) の設定可能なデプロイを提供します。エージェントサーバーはGitLabと一緒にインストールするコンポーネントです。kasKubernetes用のGitLabエージェントをkas管理するために必要です。

このChartはGitLab APIとGitalyサーバーへのアクセスに依存します。このChartを有効にすると、Ingressがデプロイされます。

最小限のリソースを消費するために、kas コンテナはディストロなしのイメージを使用します。デプロイされたサービスは、通信にWebSocketプロキシを使用するIngressによって公開されます。このプロキシは、外部コンポーネントであるagentk との長期間の接続を可能にします。agentk は、Kubernetes クラスターサイドエージェントのカウンターパートです。

サービスへのアクセス経路はIngressの設定に依存します。

詳細については、GitLab agent for Kubernetesアーキテクチャを参照してください。

エージェントサーバーの無効化

GitLabエージェントサーバー(kas)はデフォルトで有効になっています。GitLabインスタンスでこれを無効にするには、Helmプロパティglobal.kas.enabledfalse に設定します。

使用例:

helm upgrade --install kas --set global.kas.enabled=false

イングレスの指定

ChartのIngressをデフォルト設定で使用する場合、エージェントサーバのサービスはサブドメイン上で到達可能です。例えば、global.hosts.domain: example.com の場合、エージェントサーバはkas.example.com に到達可能です。

KAS Ingressglobal.hosts.domain とは異なるドメインを使用できます。

例えばglobal.hosts.kas.name を設定します:

global.hosts.kas.name: kas.my-other-domain.com

この例では、KAS Ingressのホストとしてkas.my-other-domain.com 。残りのサービス(GitLab、レジストリ、MinIOなど)は、global.hosts.domain で指定されたドメインを使用します。

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

--set フラグを使用して、これらのパラメータをhelm install コマンドに渡すことができます。

パラメータデフォルト説明
annotations{}ポッドの注釈。
common.labels{}このChartで作成されたすべてのオブジェクトに適用される補助ラベル。
containerSecurityContext.runAsUser65532コンテナが起動するコンテナsecurityContext をオーバーライドします。
extraContainers 追加コンテナのリスト。
extraEnv 公開する追加環境変数のリスト
extraEnvFrom 公開する他のデータソースの追加環境変数のリスト
init.containerSecurityContext{}init コンテナ securityContext のオーバーライド。
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-kas画像リポジトリ。
image.tagv13.7.0画像タグ
hpa.behavior{scaleDown: {stabilizationWindowSeconds: 300 }}ビヘイビアには、アップスケーリングとダウンスケーリングのビヘイビアの仕様が含まれています(autoscaling/v2beta2 以上が必要です)。
hpa.customMetrics[]カスタム・メトリクスには、目的のレプリカ数を計算するために使用するメトリクスの設定が含まれます(targetAverageUtilization で設定された平均CPU使用率をデフォルトで使用するよりも優先されます)。
hpa.cpu.targetTypeAverageValue自動スケーリング CPU ターゲット・タイプを設定します。Utilization またはAverageValue のいずれかでなければなりません。
hpa.cpu.targetAverageValue100mオートスケーリングCPUターゲット値を設定します。
hpa.cpu.targetAverageUtilization オートスケーリングCPUターゲット使用率を設定します。
hpa.memory.targetType  Utilization またはAverageValue のいずれかを指定します。
hpa.memory.targetAverageValue オートスケーリング・メモリ・ターゲット値を設定します。
hpa.memory.targetAverageUtilization オートスケーリングメモリの目標使用率を設定します。
hpa.targetAverageValue 自動スケーリングCPU目標値の設定
ingress.enabled true もしglobal.kas.enabled=true kas.ingress.enabled を使って明示的にオンまたはオフにすることができます。設定されていない場合は、オプションでglobal.ingress.enabled を使って同じことができます。
ingress.apiVersion  apiVersion フィールドで使用する値。
ingress.annotations{}イングレスの注釈。
ingress.tls{}イングレスのTLS設定。
ingress.agentPath/エージェントAPIエンドポイントのイングレスパス。
ingress.k8sApiPath/k8s-proxyKubernetes APIエンドポイントのイングレスパス。
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.path/metricsメトリクス・エンドポイントのパス。
metrics.serviceMonitor.enabledfalsePrometheus Operator がメトリクス・スクレイピングを管理できるように ServiceMonitor を作成する必要がある場合。有効にすると、prometheus.io スクレイピング注釈が削除されます。
metrics.serviceMonitor.additionalLabels{}ServiceMonitor に追加するラベル。
metrics.serviceMonitor.endpointConfig{}ServiceMonitorに追加するエンドポイント設定。
maxReplicas10HPAmaxReplicas
maxUnavailable1HPAmaxUnavailable
minReplicas2HPAmaxReplicas
nodeSelector 存在する場合は、このDeploymentPods に対してnodeSelector を定義します。
observability.port8151Observability エンドポイント・ポート。メトリクスおよびプローブ・エンドポイントに使用されます。
observability.livenessProbe.path/livenessLiveness Probe エンドポイントの URI。この値は、KAS サービス設定のobservability.liveness_probe.url_path 値と一致する必要があります。
observability.readinessProbe.path/readinessReadiness Probe エンドポイントの URI。この値はKASサービス設定のobservability.readiness_probe.url_path
serviceAccount.annotations{}サービスアカウント注釈。
podLabels{}ポッドの補足ラベル。セレクタには使用されません。
serviceLabels{}サービスラベルの補足。
common.labels このChartで作成されたすべてのオブジェクトに適用される補助ラベル。
redis.enabledtrueKAS 機能に Redis を使用しないことを許可します。警告Redis はまもなくハードディペンデンシーになるため、このキーはすでに非推奨です。
resources.requests.cpu75mGitLab Exporterの最小CPU。
resources.requests.memory100MGitLab Exporterの最小メモリ。
service.externalPort8150外部ポート(agentk 接続用).
service.internalPort8150内部ポート(agentk 接続用)。
service.apiInternalPort8153内部API(GitLabバックエンド用)の内部ポート。
service.loadBalancerIPnil service.typeLoadBalancer の場合のカスタムロードバランサーIP。
service.loadBalancerSourceRangesnil service.typeLoadBalancer のときのカスタムロードバランサのソース範囲のリスト。
service.kubernetesApiPort8154プロキシされたKubernetes APIを公開する外部ポート。
service.privateApiPort8155 kas非公開APIを kas公開する内部ポート (->kas 通信kaskas)。
privateApi.secret自動生成データベースとの認証に使用するシークレットの名前。
privateApi.key自動生成 privateApi.secret で使用するキーの名前。
privateApi.tls.enabledfalse 廃止予定: useglobal.kas.tls.enabledkas ポッドが TLS を使用して相互に通信できるようにします。
privateApi.tls.secretNamenil DEPRECATED: useglobal.kas.tls.secretName.証明書とその関連キーを含むKubernetes TLSシークレットの名前。privateApi.tlstrueの場合は必須です。
global.kas.service.apiExternalPort8153内部API(GitLabバックエンド用)の外部ポート。
service.typeClusterIPサービスタイプ
tolerations[]ポッド割り当て用のトレレーションラベル。
customConfig{}指定すると、デフォルトのkas 設定をマージし、ここで定義した値を優先します。
deployment.minReadySeconds0 kas ポッドが準備完了とみなされるまでの最小経過秒数。
deployment.strategy{}デプロイで使用される更新ストラテジーを設定できます。
deployment.terminationGracePeriodSeconds300SIGTERMを受信した後にポッドがシャットダウンする時間を秒単位で指定します。
priorityClassName ポッドに割り当てられる優先度クラス

TLS通信の有効化

  • gitlab.kas.privateApi.tls.enabledgitlab.kas.privateApi.tls.secretName 属性はGitLab 15.8で非推奨となり、GitLab 17.0で削除される予定です。代わりにグローバルKAS属性でTLSを有効にしてください。

グローバルKAS属性を通して、kas ポッドと他のGitLab Chartコンポーネント間のTLS通信を有効にします。

gitlab.kas.privateApi 属性を通してTLS通信を有効にします(非推奨)。

caution
gitlab.kas.privateApi.tls.enabledgitlab.kas.privateApi.tls.secretName 属性はGitLab 15.8で非推奨となり、GitLab 17.0で削除される予定です。代わりにグローバルKAS属性を通してTLSを有効にしてください。

前提条件:

  • GitLab 15.5.1以降を使用してください。GitLabのバージョンはglobal.gitlabVersion: <version> で設定できます。 最初のデプロイ後に強制的にイメージを更新する必要がある場合は、global.image.pullPolicy: Always も設定してください。
  1. kas ポッドが信頼する認証局と証明書を作成します。
  2. 信頼された証明書を使用するようにChartを設定します。
  3. オプション。TLS用にRedisを設定します。

作成した証明書を使用するようにkas を設定するには、以下の値を設定します。

説明
global.certificates.customCAsGitLabコンポーネントとCAを共有します。
global.appConfig.gitlab_kas.internalUrlGitLab Webservice とkas の間のgrpcs 通信を可能にします。
gitlab.kas.privateApi.tls.enabled証明書ボリュームをマウントし、kas ポッド間の TLS 通信を有効にします。
gitlab.kas.privateApi.tls.secretName証明書を格納するKubernetes TLSシークレットを指定します。
gitlab.kas.customConfig grpcs を使用してポートを公開するようにkas を設定します。
gitlab.kas.ingress kas Ingress がプロキシされた SSL 証明書を検証するように設定します。

例えば、このvalues.yaml ファイルを使って Chart をデプロイすることができます:

.internal-ca: &internal-ca gitlab-internal-tls-ca # The secret name you used to share your TLS CA.
.internal-tls: &internal-tls gitlab-internal-tls # The secret name you used to share your TLS certificate.

global:
  certificates:
    customCAs:
    - secret: *internal-ca
  hosts:
    domain: gitlab.example.com # Your gitlab domain
  appConfig:
    gitlab_kas:
      internalUrl: "grpcs://RELEASE-kas.NAMESPACE.svc:8153" # Replace RELEASE and NAMESPACE with your chart's release and namespace

gitlab:
  kas:
    privateApi:
      tls:
        enabled: true
        secretName: *internal-tls
    customConfig:
      api:
        listen:
          certificate_file: /etc/kas/tls.crt
          key_file: /etc/kas/tls.key
      agent:
        listen:
          certificate_file: /etc/kas/tls.crt
          key_file: /etc/kas/tls.key
        kubernetes_api:
          listen:
            certificate_file: /etc/kas/tls.crt
            key_file: /etc/kas/tls.key
    ingress:
      annotations:
        nginx.ingress.kubernetes.io/backend-protocol: https
        nginx.ingress.kubernetes.io/proxy-ssl-name: RELEASE-kas.NAMESPACE.svc # Replace RELEASE and NAMESPACE with your chart's release and namespace
        nginx.ingress.kubernetes.io/proxy-ssl-secret: NAMESPACE/CA-SECRET-NAME # Replace NAMESPACE and CA-SECRET-NAME with your chart's namespace and CA secret name. The same you used for &internal-ca.
        nginx.ingress.kubernetes.io/proxy-ssl-verify: on

kas チャートのテスト

Chartをインストールします:

  1. Kubernetesクラスターを作成します。
  2. マージリクエストのワーキングブランチをチェックしてください。
  3. ローカルの Chart ブランチから、デフォルトでkas が有効になっている GitLab をインストール(またはアップグレード)します:

    helm upgrade --force --install gitlab . \
      --timeout 600s \
      --set global.hosts.domain=your.domain.com \
      --set global.hosts.externalIP=XYZ.XYZ.XYZ.XYZ \
      --set certmanager-issuer.email=your@email.com
    
  4. GDKを使用して、Kubernetes用のGitLabエージェントを設定・使用するプロセスを実行します: (手動でエージェントを設定・使用する手順を実行することもできます)。

    1. GDKのGitLabリポジトリから、QAフォルダに移動します:cd qa.
    2. 以下のコマンドを実行して、QAテストを実行します:

      GITLAB_USERNAME=$ROOT_USER
      GITLAB_PASSWORD=$ROOT_PASSWORD
      GITLAB_ADMIN_USERNAME=$ROOT_USER
      GITLAB_ADMIN_PASSWORD=$ROOT_PASSWORD
      bundle exec bin/qa Test::Instance::All https://your.gitlab.domain/ -- --tag orchestrated --tag quarantine qa/specs/features/ee/api/7_configure/kubernetes/kubernetes_agent_spec.rb
      

      環境変数でインストールするagentk のバージョンをカスタマイズすることもできます:GITLAB_AGENTK_VERSION=v13.7.1

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