GitLab kas 차트 사용

Tier: Free, Premium, Ultimate Offering: Self-Managed

kas 서브차트는 GitLab agent server (KAS)의 구성 가능한 배포를 제공합니다. 에이전트 서버는 GitLab과 함께 설치하는 컴포넌트로, GitLab agent for Kubernetes를 관리하는 데 필요합니다.

이 차트는 GitLab API 및 Gitaly 서버에 액세스해야 합니다. 이 차트를 활성화하면 Ingress가 배포됩니다.

kas 컨테이너는 Distroless 이미지를 사용하여 최소한의 리소스를 소비합니다. 배포된 서비스는 통신을 위해 WebSocket 프록시를 사용하는 Ingress에 의해 노출됩니다. 이 프록시를 통해 외부 컴포넌트와의 장기 연결이 가능하며, agentk(Kubernetes 클러스터 측 에이전트)를 사용할 수 있습니다.

서비스에 액세스하는 경로는 Ingress 구성에 따라 달라집니다.

자세한 정보는 GitLab agent for Kubernetes architecture를 참조하십시오.

에이전트 서버 비활성화

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 Ingressglobal.hosts.domain과 다른 도메인을 사용할 수 있습니다.

예시:

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

이 예시는 kas.my-other-domain.com을 KAS Ingress만의 도메인으로 사용합니다. 나머지 서비스(예: GitLab, Registry, MinIO 등)는 global.hosts.domain에 지정된 도메인을 사용합니다.

설치 명령줄 옵션

helm install 명령에 이러한 매개변수를 --set 플래그를 사용하여 전달할 수 있습니다.

매개변수 기본값 설명
annotations {} Pod 주석
common.labels {} 이 차트에 의해 생성된 모든 객체에 적용되는 보조 라벨
containerSecurityContext.runAsUser 65532 컨테이너가 시작될 때 컨테이너를 실행하는 사용자를 재정의합니다. (securityContext 참조)
extraContainers   포함할 추가 컨테이너 디렉터리
extraEnv   노출할 추가 환경 변수 디렉터리
extraEnvFrom   다른 데이터 원본에서 노출할 추가 환경 변수 디렉터리
init.containerSecurityContext {} 초기화 컨테이너 영역에서 보안 컨텍스트를 재정의합니다.
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   DEPRECATED 오토스케일링 CPU 대상 값 설정
ingress.enabled true if global.kas.enabled=true 명시적으로 켜거나 끌 Ingress를 사용하려면 kas.ingress.enabled를 사용할 수 있습니다. 설정되지 않은 경우 동일한 목적으로 global.ingress.enabled를 선택적으로 사용할 수 있습니다.
ingress.apiVersion   apiVersion 필드에 사용할 값을 설정합니다.
ingress.annotations {} Ingress 주석
ingress.tls {} Ingress TLS 구성
ingress.agentPath / 에이전트 API 엔드포인트의 Ingress 경로
ingress.k8sApiPath /k8s-proxy Kubernetes API 엔드포인트의 Ingress 경로
keda.enabled false KEDAScaledObjects 대신 HorizontalPodAutoscalers를 사용
keda.pollingInterval 30 각 트리거를 확인하는 간격
keda.cooldownPeriod 300 마지막 트리거가 활성 상태를 보고한 후 리소스를 0으로 다시 축소하는데 대기할 기간
keda.minReplicaCount   KEDA가 리소스를 축소할 최소 복제본 수로, 기본값은 minReplicas
keda.maxReplicaCount   KEDA가 리소스를 확장할 최대 복제본 수로, 기본값은 maxReplicas
keda.fallback   KEDA 후행 구성, documentation 참조
keda.hpaName   KEDA가 생성할 HPA 리소스의 이름으로, 기본값은 keda-hpa-{scaled-object-name}
keda.restoreToOriginalReplicaCount   ScaledObject가 삭제된 후 대상 리소스를 원래 복제본 수로 축소해야 하는지 여부를 지정합니다
keda.behavior   업-다운 스케일링 동작 사항으로, 기본값은 hpa.behavior
keda.triggers   대상 리소스의 스케일링을 활성화할 트리거 디렉터리으로, 기본값은 hpa.cpuhpa.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 HPA의 maxReplicas
maxUnavailable 1 HPA의 maxUnavailable
minReplicas 2 HPA의 maxReplicas
nodeSelector   DeploymentPods에 대한 nodeSelector를 정의하는 경우
observability.port 8151 오픈 서비스를 위한 포트
observability.livenessProbe.path /liveness 라이브니스 프로브 엔드포인트의 URI로, KAS 서비스 구성에서 지정된 observability.liveness_probe.url_path 값과 일치해야 합니다.
observability.readinessProbe.path /readiness 레디니스 프로브 엔드포인트의 URI로, KAS 서비스 구성에서 지정된 observability.readiness_probe.url_path 값과 일치해야 합니다.
serviceAccount.annotations {} 서비스 계정 주석
podLabels {} 보조 Pod 라벨. 선택기로 사용되지 않습니다.
serviceLabels {} 보조 서비스 라벨
common.labels   이 차트에 의해 생성된 모든 객체에 적용되는 보조 라벨
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.typeLoadBalancer인 경우 사용자 정의 로드 밸런서 IP
service.loadBalancerSourceRanges nil service.typeLoadBalancer인 경우 사용자 정의 로드 밸런서 소스 범위 디렉터리
service.kubernetesApiPort 8154 프록시된 Kubernetes API를 공개하기 위한 외부 포트
service.privateApiPort 8155 kas에서 kas로 통신하기 위해 kas의 개인 API를 노출하기 위한 내부 포트
privateApi.secret 자동 생성됨 데이터베이스와 인증하기 위해 사용할 시크릿의 이름
privateApi.key 자동 생성됨 privateApi.secret의 키 이름
global.kas.service.apiExternalPort 8153 내부 API를 위한 외부 포트(GitLab 백엔드용)
service.type ClusterIP 서비스 유형
tolerations [] 포드 할당을 위한 사용할 수 있는 Pod 허용 라벨
customConfig {} 지정된 경우 기본 kas 구성과 여기서 정의된 값을 Merge합니다. 여기서 정의된 값이 우선합니다.
deployment.minReadySeconds 0 kas Pod가 준비 상태로 간주되기 전에 경과해야 하는 최소 시간(초)
deployment.strategy {} 배포에서 사용하는 업데이트 전략을 구성할 수 있습니다.
deployment.terminationGracePeriodSeconds 300 SIGTERM 수신 후 Pod가 종료하는 데 허용되는 시간(초)
priorityClassName   pod에 할당된 우선 순위 클래스

TLS 통신 활성화

kas pod과 기타 GitLab 차트 컴포넌트 간의 TLS 통신을 활성화하려면 전역 KAS 속성을 통해 설정하세요.

kas 차트 테스트

차트를 설치하려면:

  1. 자체 Kubernetes 클러스터를 생성하세요.
  2. Merge Request의 작업 브랜치를 확인하세요.
  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 섹션에 설정된 값으로 기본 설정됩니다.

다음 사항이 사실인 경우 CPU 및 메모리 트리거가 자동으로 추가됩니다:

  • triggers가 설정되지 않은 경우.
  • 해당하는 request.cpu.request 또는 request.memory.request 설정도 0이 아닌 값으로 설정되어 있는 경우.

트리거가 설정되지 않으면 ScaledObject가 생성되지 않습니다.

이러한 설정에 대한 자세한 내용은 KEDA 문서를 참조하세요.

이름 유형 기본값 설명
enabled 불리언 false HorizontalPodAutoscalers 대신 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에서 계산된 트리거입니다.