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

GitLab kas チャートの使用

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

kasサブチャートは、構成可能なKubernetes向けGitLabエージェントサーバー (KAS)のデプロイを提供します。エージェントサーバーは、GitLabと共にインストールするコンポーネントです。Kubernetes向けGitLabエージェントの管理に必要です。

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

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

サービスにアクセスするためのルートは、Ingress設定によって異なります。

詳しくは、Kubernetes向けGitLabエージェントのアーキテクチャをご覧ください。

エージェントサーバーを無効にする

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

例:

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

Ingressの指定

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

KAS Ingressは、global.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コマンドに渡すことができます。

パラメータデフォルト説明
affinity{}ポッドの割り当てに関するアフィニティルール
annotations{}ポッドの注釈。
common.labels{}このチャートによって作成されたすべてのオブジェクトに適用される補助ラベル。
securityContext.runAsUser65532ポッドが起動されるユーザーID
securityContext.runAsGroup65534ポッドが起動されるグループID
securityContext.fsGroup65532ポッドが起動されるグループID
securityContext.fsGroupChangePolicyボリュームの所有権と許可を変更するためのポリシー(Kubernetes 1.23が必要です)
securityContext.seccompProfile.typeRuntimeDefault使用するSeccompプロファイル
containerSecurityContext.runAsUser65532コンテナが起動されるsecurityContextユーザーIDのオーバーライド
containerSecurityContext.allowPrivilegeEscalationfalseコンテナのプロセスが、親プロセスよりも多くの特権を取得できるかどうかを制御します
containerSecurityContext.runAsNonRoottrueコンテナを非rootユーザーで実行するかどうかを制御します
containerSecurityContext.capabilities.drop[ "ALL" ]GitalyコンテナのLinuxケイパビリティを削除します
extraContainers含めるコンテナのリストを含む複数行のリテラルスタイル文字列。
extraEnv公開する追加の環境変数のリスト
extraEnvFrom公開する他のデータソースからの追加の環境変数のリスト
init.containerSecurityContextinitコンテナsecurityContextオーバーライド
init.containerSecurityContext.allowPrivilegeEscalationfalseinitContainer固有: プロセスが親プロセスよりも多くの特権を取得できるかどうかを制御します
init.containerSecurityContext.runAsNonRoottrueinitContainer固有: コンテナを非rootユーザーで実行するかどうかを制御します
init.containerSecurityContext.capabilities.drop[ "ALL" ]initContainer固有: コンテナのLinuxケイパビリティを削除します
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.enabledglobal.kas.enabled=trueの場合truekas.ingress.enabledを使用して、明示的にオンまたはオフにすることができます。設定されていない場合は、オプションでglobal.ingress.enabledを同じ目的で使用できます。
ingress.apiVersionapiVersionフィールドで使用する値。
ingress.annotations{}Ingressの注釈。
ingress.tls{}Ingress TLS設定。
ingress.agentPath/エージェントAPIエンドポイントのIngressパス。
ingress.k8sApiPath/k8s-proxyKubernetes APIエンドポイントのIngressパス。
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から計算されたトリガーがデフォルトです
metrics.enabledtrueメトリクスエンドポイントをスクレイプするために使用可能にする必要がある場合。
metrics.path/metricsメトリクスエンドポイントのパス。
metrics.serviceMonitor.enabledfalsePrometheus Operatorがメトリクスのスクレイプを管理できるようにServiceMonitorを作成する必要がある場合。有効にすると、prometheus.ioスクレイプ注釈が削除されます。metrics.podMonitor.enabledと一緒に有効にすることはできません。
metrics.serviceMonitor.additionalLabels{}ServiceMonitorに追加する追加のラベル。
metrics.serviceMonitor.endpointConfig{}ServiceMonitorの追加のエンドポイント設定。
metrics.podMonitor.enabledfalsePrometheus Operatorがメトリクスのスクレイプを管理できるようにPodMonitorを作成する必要がある場合。有効にすると、prometheus.ioスクレイプ注釈が削除されます。metrics.serviceMonitor.enabledと一緒に有効にすることはできません。
metrics.podMonitor.additionalLabels{}PodMonitorに追加する追加のラベル。
metrics.podMonitor.endpointConfig{}PodMonitorの追加のエンドポイント設定。
maxReplicas10HPA maxReplicas
maxUnavailable1HPA maxUnavailable
minReplicas2HPA maxReplicas
nodeSelector存在する場合は、このDeploymentPodノードセレクターを定義します。
observability.port8151可観測性エンドポイントのポート。メトリクスおよびプローブエンドポイントに使用されます。
observability.livenessProbe.path/livenessライブネスプローブエンドポイントのURI。この値は、KASサービス設定のobservability.liveness_probe.url_path値と一致する必要があります。
observability.readinessProbe.path/readinessReadinessプローブエンドポイントのURI。この値は、KASサービス設定のobservability.readiness_probe.url_path値と一致する必要があります。
serviceAccount.annotations{}サービスアカウントの注釈。
podLabels{}補助ポッドのラベル。セレクターには使用されません。
serviceLabels{}補助サービスラベル。
common.labelsこのチャートによって作成されたすべてのオブジェクトに適用される補助ラベル。
resources.requests.cpu100mKASポッドあたりの最小CPUリクエスト
resources.requests.memory256MiKASポッドメモリあたりの最小メモリリクエスト。
service.externalPort8150外部ポート(agentk接続用)。
service.internalPort8150内部ポート(agentk接続用)。
service.apiInternalPort8153内部API(GitLabバックエンド用)の内部ポート。
service.loadBalancerIPnilservice.typeLoadBalancerの場合のカスタムロードバランサーIP。
service.loadBalancerSourceRangesnilservice.typeLoadBalancerの場合のカスタムロードバランサーソース範囲のリスト。
service.kubernetesApiPort8154プロキシされたKubernetes APIを公開するための外部ポート。
service.privateApiPort8155kasのプライベートAPIを公開する内部ポート(kas -> kas通信用)。
serviceAccount.annotations{}サービスアカウントの注釈。
serviceAccount.automountServiceAccountTokenfalseデフォルトのサービスアカウントのアクセストークンをポッドにマウントするかどうかを示します。
serviceAccount.createfalseサービスアカウントを作成するかどうかを示します。
serviceAccount.enabledfalseサービスアカウントを使用するかどうかを示します。
serviceAccount.nameサービスアカウントの名前。設定しない場合は、チャートのフルネームが使用されます。
websocketToken.secret自動生成WebSocketトークンの署名と検証に使用するシークレットの名前。
websocketToken.key自動生成使用するwebsocketToken.secretの中のキーの名前。
privateApi.secret自動生成データベースの認証に使用するシークレットの名前。
privateApi.key自動生成使用するprivateApi.secretの中のキーの名前。
global.kas.service.apiExternalPort8153内部API(GitLabバックエンド用)の外部ポート。
service.typeClusterIPサービスタイプ。
tolerations[]ポッドの割り当てに関する容認ラベル。
customConfig{}指定された場合、kasのデフォルトの設定をこれらの値とマージし、ここに定義されたものを優先します。
deployment.minReadySeconds0kasポッドが準備完了と見なされるまでに経過する必要がある最小秒数。
deployment.strategy{}デプロイで使用される更新戦略を構成できます。
deployment.terminationGracePeriodSeconds300ポッドがSIGTERMを受信した後、シャットダウンに費やすことができる時間(秒単位)。
priorityClassNameポッドに割り当てられた優先度クラス

TLS通信を有効にする

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

kasチャートをテストする

チャートをインストールするには:

  1. 独自のKubernetesクラスタを作成します。

  2. マージリクエストの作業ブランチをチェックアウトします。

  3. ローカルチャートブランチからデフォルトで有効になっている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セクションで設定された値にデフォルト設定されます。

次がtrueの場合、hpaセクションで設定されたCPUおよびメモリのしきい値に基づいて、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.cpuおよびhpa.memoryから計算されたトリガーがデフォルトです

サービスアカウント

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

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

affinity

詳細については、affinityを参照してください。

デバッグログを有効にする

KASサブチャートのデバッグロギングを有効にするには、values.yamlファイルのkasセクションに以下を追加します:

customConfig:
   observability:
      logging:
         level: debug
         grpc_level: debug