GitLab kas
차트 사용
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.enabled
를 false
로 설정하십시오.
예시:
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: 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
|
KEDA의 ScaledObjects 대신 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.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
| HPA의 maxReplicas
|
maxUnavailable
| 1
| HPA의 maxUnavailable
|
minReplicas
| 2
| HPA의 maxReplicas
|
nodeSelector
| 이 Deployment 의 Pod s에 대한 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.type 이 LoadBalancer 인 경우 사용자 정의 로드 밸런서 IP
|
service.loadBalancerSourceRanges
| nil
|
service.type 이 LoadBalancer 인 경우 사용자 정의 로드 밸런서 소스 범위 디렉터리
|
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
차트 테스트
차트를 설치하려면:
- 자체 Kubernetes 클러스터를 생성하세요.
- Merge Request의 작업 브랜치를 확인하세요.
-
로컬 차트 브랜치에서
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
섹션에 설정된 값으로 기본 설정됩니다.
다음 사항이 사실인 경우 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.cpu 및 hpa.memory 에서 계산된 트리거입니다.
|