GitLabkas
チャートの使い方
kas
サブチャートは、GitLabエージェントサーバ(KAS) の設定可能なデプロイを提供します。エージェントサーバーはGitLabと一緒にインストールするコンポーネントです。kas
Kubernetes用の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.enabled
をfalse
に設定します。
使用例:
helm upgrade --install kas --set global.kas.enabled=false
イングレスの指定
Chartの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
コマンドに渡すことができます。
パラメータ | デフォルト | 説明 |
---|---|---|
annotations | {} | ポッドの注釈。 |
common.labels | {} | このChartで作成されたすべてのオブジェクトに適用される補助ラベル。 |
containerSecurityContext.runAsUser | 65532 | コンテナが起動するコンテナsecurityContext をオーバーライドします。 |
extraContainers | 追加コンテナのリスト。 | |
extraEnv | 公開する追加環境変数のリスト | |
extraEnvFrom | 公開する他のデータソースの追加環境変数のリスト | |
init.containerSecurityContext | {} | init コンテナ securityContext のオーバーライド。 |
image.repository | registry.gitlab.com/gitlab-org/build/cng/gitlab-kas | 画像リポジトリ。 |
image.tag | v13.7.0 | 画像タグ |
hpa.behavior | {scaleDown: {stabilizationWindowSeconds: 300 }} | ビヘイビアには、アップスケーリングとダウンスケーリングのビヘイビアの仕様が含まれています(autoscaling/v2beta2 以上が必要です)。 |
hpa.customMetrics | [] | カスタム・メトリクスには、目的のレプリカ数を計算するために使用するメトリクスの設定が含まれます(targetAverageUtilization で設定された平均CPU使用率をデフォルトで使用するよりも優先されます)。 |
hpa.cpu.targetType | AverageValue | 自動スケーリング CPU ターゲット・タイプを設定します。Utilization またはAverageValue のいずれかでなければなりません。 |
hpa.cpu.targetAverageValue | 100m | オートスケーリング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-proxy | Kubernetes APIエンドポイントのイングレスパス。 |
keda.enabled | false | の代わりにKEDA ScaledObjects を使用します。HorizontalPodAutoscalers
|
keda.pollingInterval | 30 | 各トリガーを |
keda.cooldownPeriod | 300 | リソースを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.cpu とhpa.memory
| |
metrics.enabled | true | メトリクス・エンドポイントをスクレイピングできるようにする場合。 |
metrics.path | /metrics | メトリクス・エンドポイントのパス。 |
metrics.serviceMonitor.enabled | false | Prometheus Operator がメトリクス・スクレイピングを管理できるように ServiceMonitor を作成する必要がある場合。有効にすると、prometheus.io スクレイピング注釈が削除されます。 |
metrics.serviceMonitor.additionalLabels | {} | ServiceMonitor に追加するラベル。 |
metrics.serviceMonitor.endpointConfig | {} | ServiceMonitorに追加するエンドポイント設定。 |
maxReplicas | 10 | HPAmaxReplicas 。 |
maxUnavailable | 1 | HPAmaxUnavailable 。 |
minReplicas | 2 | HPAmaxReplicas 。 |
nodeSelector | 存在する場合は、このDeployment のPod s に対してnodeSelector を定義します。 | |
observability.port | 8151 | Observability エンドポイント・ポート。メトリクスおよびプローブ・エンドポイントに使用されます。 |
observability.livenessProbe.path | /liveness | Liveness Probe エンドポイントの URI。この値は、KAS サービス設定のobservability.liveness_probe.url_path 値と一致する必要があります。 |
observability.readinessProbe.path | /readiness | Readiness Probe エンドポイントの URI。この値はKASサービス設定のobservability.readiness_probe.url_path 。 |
serviceAccount.annotations | {} | サービスアカウント注釈。 |
podLabels | {} | ポッドの補足ラベル。セレクタには使用されません。 |
serviceLabels | {} | サービスラベルの補足。 |
common.labels | このChartで作成されたすべてのオブジェクトに適用される補助ラベル。 | |
redis.enabled | true | KAS 機能に Redis を使用しないことを許可します。警告Redis はまもなくハードディペンデンシーになるため、このキーはすでに非推奨です。 |
resources.requests.cpu | 75m | GitLab Exporterの最小CPU。 |
resources.requests.memory | 100M | GitLab Exporterの最小メモリ。 |
service.externalPort | 8150 | 外部ポート(agentk 接続用). |
service.internalPort | 8150 | 内部ポート(agentk 接続用)。 |
service.apiInternalPort | 8153 | 内部API(GitLabバックエンド用)の内部ポート。 |
service.loadBalancerIP | nil |
service.type がLoadBalancer の場合のカスタムロードバランサーIP。 |
service.loadBalancerSourceRanges | nil |
service.type がLoadBalancer のときのカスタムロードバランサのソース範囲のリスト。 |
service.kubernetesApiPort | 8154 | プロキシされたKubernetes APIを公開する外部ポート。 |
service.privateApiPort | 8155 |
kas 非公開APIを kas 公開する内部ポート (->kas 通信kas 用 kas )。 |
privateApi.secret | 自動生成 | データベースとの認証に使用するシークレットの名前。 |
privateApi.key | 自動生成 |
privateApi.secret で使用するキーの名前。 |
privateApi.tls.enabled | false |
廃止予定: useglobal.kas.tls.enabled 。kas ポッドが TLS を使用して相互に通信できるようにします。 |
privateApi.tls.secretName | nil |
DEPRECATED: useglobal.kas.tls.secretName .証明書とその関連キーを含むKubernetes TLSシークレットの名前。privateApi.tls がtrue の場合は必須です。 |
global.kas.service.apiExternalPort | 8153 | 内部API(GitLabバックエンド用)の外部ポート。 |
service.type | ClusterIP | サービスタイプ |
tolerations | [] | ポッド割り当て用のトレレーションラベル。 |
customConfig | {} | 指定すると、デフォルトのkas 設定をマージし、ここで定義した値を優先します。 |
deployment.minReadySeconds | 0 |
kas ポッドが準備完了とみなされるまでの最小経過秒数。 |
deployment.strategy | {} | デプロイで使用される更新ストラテジーを設定できます。 |
deployment.terminationGracePeriodSeconds | 300 | SIGTERMを受信した後にポッドがシャットダウンする時間を秒単位で指定します。 |
priorityClassName | ポッドに割り当てられる優先度クラス。 |
TLS通信の有効化
gitlab.kas.privateApi.tls.enabled
とgitlab.kas.privateApi.tls.secretName
属性はGitLab 15.8で非推奨となり、GitLab 17.0で削除される予定です。代わりにグローバルKAS属性でTLSを有効にしてください。
グローバルKAS属性を通して、kas
ポッドと他のGitLab Chartコンポーネント間のTLS通信を有効にします。
gitlab.kas.privateApi
属性を通してTLS通信を有効にします(非推奨)。
gitlab.kas.privateApi.tls.enabled
とgitlab.kas.privateApi.tls.secretName
属性はGitLab 15.8で非推奨となり、GitLab 17.0で削除される予定です。代わりにグローバルKAS属性を通してTLSを有効にしてください。前提条件:
-
GitLab 15.5.1以降を使用してください。GitLabのバージョンは
global.gitlabVersion: <version>
で設定できます。 最初のデプロイ後に強制的にイメージを更新する必要がある場合は、global.image.pullPolicy: Always
も設定してください。
-
kas
ポッドが信頼する認証局と証明書を作成します。 - 信頼された証明書を使用するようにChartを設定します。
- オプション。TLS用にRedisを設定します。
作成した証明書を使用するようにkas
を設定するには、以下の値を設定します。
値 | 説明 |
---|---|
global.certificates.customCAs | GitLabコンポーネントとCAを共有します。 |
global.appConfig.gitlab_kas.internalUrl | GitLab 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をインストールします:
- Kubernetesクラスターを作成します。
- マージリクエストのワーキングブランチをチェックしてください。
-
ローカルの 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
-
GDKを使用して、Kubernetes用のGitLabエージェントを設定・使用するプロセスを実行します: (手動でエージェントを設定・使用する手順を実行することもできます)。
- GDKのGitLabリポジトリから、QAフォルダに移動します:
cd qa
. -
以下のコマンドを実行して、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
- GDKのGitLabリポジトリから、QAフォルダに移動します:
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.cpu とhpa.memory
|