GitLab kas
차트 사용하기
kas
서브 차트는
GitLab 에이전트 서버(KAS)의
구성 가능한 배포를 제공합니다.
에이전트 서버는 GitLab과 함께 설치하는 구성 요소로,
Kubernetes용 GitLab 에이전트를
관리하는 데 필요합니다.
이 차트는 GitLab API 및 Gitaly 서버에 대한 액세스에 의존합니다.
이 차트를 활성화하면 Ingress가 배포됩니다.
최소한의 리소스를 소비하기 위해 kas
컨테이너는
디스트롤레스 이미지를 사용합니다.
배포된 서비스는 Ingress에 의해 공개되며, 이는
WebSocket 프록싱을 통해
통신합니다.
이 프록시는 외부 구성 요소인
agentk
와
오래 지속되는 연결을 가능하게 합니다.
agentk
는 Kubernetes 클러스터 측의 에이전트입니다.
서비스에 접근하는 경로는 Ingress 구성에 따라 달라집니다.
자세한 내용은
Kubernetes용 GitLab 에이전트 아키텍처를
참고하십시오.
에이전트 서버 비활성화
GitLab 에이전트 서버(kas
)는 기본적으로 활성화되어 있습니다.
GitLab 인스턴스에서 이를 비활성화하려면 헬름 속성
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
을 설정하십시오:
global.hosts.kas.name: kas.my-other-domain.com
이 예시는 KAS Ingress 전용으로 kas.my-other-domain.com
을 호스트로 사용합니다.
다른 서비스(GitLab, Registry, MinIO 등)는
global.hosts.domain
에 지정된 도메인을 사용합니다.
설치 명령줄 옵션
helm install
명령에 이러한 매개변수를 --set
플래그를 사용하여
전달할 수 있습니다.
매개변수 | 기본값 | 설명 |
---|---|---|
affinity |
{} |
Affinity 규칙 for pod assignment |
annotations |
{} |
Pod 주석입니다. |
common.labels |
{} |
이 차트로 생성되는 모든 객체에 적용되는 보조 레이블입니다. |
securityContext.runAsUser |
65532 |
Pod가 시작될 사용자 ID입니다. |
securityContext.runAsGroup |
65534 |
Pod가 시작될 그룹 ID입니다. |
securityContext.fsGroup |
65532 |
Pod가 시작될 그룹 ID입니다. |
securityContext.fsGroupChangePolicy |
볼륨 소유권 및 권한 변경을 위한 정책(쿠버네티스 1.23 필요) | |
securityContext.seccompProfile.type |
RuntimeDefault |
사용해야 할 Seccomp 프로필입니다. |
containerSecurityContext.runAsUser |
65532 |
컨테이너 securityContext의 사용자 ID를 재정의합니다. |
containerSecurityContext.allowPrivilegeEscalation |
false |
컨테이너 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지 여부를 제어합니다. |
containerSecurityContext.runAsNonRoot |
true |
컨테이너가 비루트 사용자로 실행되는지 여부를 제어합니다. |
containerSecurityContext.capabilities.drop |
[ "ALL" ] |
Gitaly 컨테이너의 Linux capabilities를 제거합니다. |
extraContainers |
포함할 추가 컨테이너 목록입니다. | |
extraEnv |
노출할 추가 환경 변수를 목록화합니다. | |
extraEnvFrom |
노출할 다른 데이터 소스에서의 추가 환경 변수를 목록화합니다. | |
init.containerSecurityContext |
init 컨테이너 securityContext 재정의 | |
init.containerSecurityContext.allowPrivilegeEscalation |
false |
initContainer 특정: 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지 여부를 제어합니다. |
init.containerSecurityContext.runAsNonRoot |
true |
initContainer 특정: 컨테이너가 비루트 사용자로 실행되는지 여부를 제어합니다. |
init.containerSecurityContext.capabilities.drop |
[ "ALL" ] |
initContainer 특정: 컨테이너의 Linux capabilities를 제거합니다. |
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
|
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를 사용하여 HorizontalPodAutoscalers 대신 ScaledObjects 를 사용합니다. |
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 |
ServiceMonitor를 생성하여 Prometheus Operator가 메트릭 스크래핑을 관리할 수 있도록 할지 여부입니다. 활성화하면 prometheus.io 스크래핑 주석이 제거됩니다. metrics.podMonitor.enabled 와 함께 활성화할 수 없습니다. |
metrics.serviceMonitor.additionalLabels |
{} |
ServiceMonitor에 추가할 추가 레이블입니다. |
metrics.serviceMonitor.endpointConfig |
{} |
ServiceMonitor에 대한 추가 엔드포인트 구성입니다. |
metrics.podMonitor.enabled |
false |
PodMonitor를 생성하여 Prometheus Operator가 메트릭 스크래핑을 관리할 수 있도록 할지 여부입니다. 활성화하면 prometheus.io 스크래핑 주석이 제거됩니다. metrics.serviceMonitor.enabled 와 함께 활성화할 수 없습니다. |
metrics.podMonitor.additionalLabels |
{} |
PodMonitor에 추가할 추가 레이블입니다. |
metrics.podMonitor.endpointConfig |
{} |
PodMonitor에 대한 추가 엔드포인트 구성입니다. |
maxReplicas |
10 |
HPA maxReplicas 입니다. |
maxUnavailable |
1 |
HPA maxUnavailable 입니다. |
minReplicas |
2 |
HPA maxReplicas 입니다. |
nodeSelector |
이 Deployment 의 Pod 에 대한 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 의 수익 API를 노출할 내부 포트입니다( kas -> kas 통신용). |
serviceAccount.annotations |
{} |
ServiceAccount 주석입니다. |
serviceAccount.automountServiceAccountToken |
false |
기본 ServiceAccount 액세스 토큰이 pods에 장착될지 여부를 나타냅니다. |
serviceAccount.create |
false |
ServiceAccount를 생성할지 여부를 나타냅니다. |
serviceAccount.enabled |
false |
ServiceAccount를 사용할지 여부를 나타냅니다. |
serviceAccount.name |
ServiceAccount의 이름입니다. 설정하지 않으면 전체 차트 이름이 사용됩니다. | |
privateApi.secret |
Autogenerated | 데이터베이스 인증에 사용할 비밀의 이름입니다. |
privateApi.key |
Autogenerated | 사용할 privateApi.secret 의 비밀 내 키 이름입니다. |
global.kas.service.apiExternalPort |
8153 |
내부 API( GitLab 백엔드 )용 외부 포트입니다. |
service.type |
ClusterIP |
서비스 유형입니다. |
tolerations |
[] |
Pod 할당을 위한 관용 레이블입니다. |
customConfig |
{} |
주어지면 기본 kas 구성과 이 값을 병합하며 여기서 정의된 값에 우선권을 줍니다. |
deployment.minReadySeconds |
0 |
kas Pod가 준비 상태로 간주되기 전에 경과해야 하는 최소 초 수입니다. |
deployment.strategy |
{} |
배포에 사용되는 업데이트 전략을 구성할 수 있습니다. |
deployment.terminationGracePeriodSeconds |
300 |
SIGTERM을 수신한 후 Pod가 종료되는 데 허용된 시간(초)입니다. |
priorityClassName |
pods에 할당된 우선 클래스입니다. |
TLS 통신 활성화
귀하의 kas
포드와 기타 GitLab 차트 구성 요소 간의 TLS 통신을 활성화하려면
전역 KAS 속성을 통해 설정하세요.
kas
차트 테스트
차트를 설치하려면:
- 자신의 Kubernetes 클러스터를 생성합니다.
- 병합 요청의 작업 브랜치를 체크아웃합니다.
-
로컬 차트 브랜치에서 기본적으로
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 및 메모리 임계값에 따라 CPU 및 메모리 트리거가 자동으로 추가됩니다:
-
triggers
가 설정되지 않음. - 해당
request.cpu.request
또는request.memory.request
설정이 0이 아닌 값으로 설정됨.
트리거가 설정되지 않으면 ScaledObject
가 생성되지 않습니다.
자세한 설정 정보는 KEDA 문서를 참조하세요.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled |
Boolean | false |
KEDA ScaledObjects 를 HorizontalPodAutoscalers 대신 사용합니다. |
pollingInterval |
Integer | 30 |
각 트리거를 확인하는 간격입니다. |
cooldownPeriod |
Integer | 300 |
마지막 트리거가 활성 상태로 보고된 후 리소스를 0으로 되돌리기 전에 대기하는 기간입니다. |
minReplicaCount |
Integer | KEDA가 리소스를 축소하는 최소 복제본 수로, 기본값은 minReplicas 입니다. |
|
maxReplicaCount |
Integer | KEDA가 리소스를 확장하는 최대 복제본 수로, 기본값은 maxReplicas 입니다. |
|
fallback |
Map | KEDA 폴백 구성으로, 문서를 참조하세요. | |
hpaName |
String | KEDA가 생성할 HPA 리소스의 이름으로, 기본값은 keda-hpa-{scaled-object-name} 입니다. |
|
restoreToOriginalReplicaCount |
Boolean |
ScaledObject 가 삭제된 후 대상 리소스가 원래 복제본 수로 되돌려져야 하는지를 지정합니다. |
|
behavior |
Map | 업스케일 및 다운스케일 동작에 대한 사양으로, 기본값은 hpa.behavior 입니다. |
|
triggers |
Array | 대상 리소스의 스케일링을 활성화하는 트리거 목록으로, 기본값은 hpa.cpu 및 hpa.memory 에서 계산된 트리거입니다. |
serviceAccount
이 섹션은 ServiceAccount를 생성할지 여부와 기본 액세스 토큰이 파드에 마운트되어야 하는지를 제어합니다.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
annotations |
맵 | {} |
ServiceAccount 주석. |
automountServiceAccountToken |
부울 | false |
기본 ServiceAccount 액세스 토큰이 파드에 마운트되어야 하는지를 제어합니다. 특정 사이드카가 제대로 작동하기 위해 필요하지 않는 한 이를 활성화해서는 안 됩니다 (예: Istio). |
create |
부울 | false |
ServiceAccount를 생성해야 하는지 여부를 나타냅니다. |
enabled |
부울 | false |
ServiceAccount를 사용할지 여부를 나타냅니다. |
name |
문자열 | ServiceAccount의 이름입니다. 설정하지 않으면 전체 차트 이름이 사용됩니다. |
affinity
자세한 내용은 affinity
를 참조하세요.
디버그 로깅 활성화
KAS 서브 차트에 대한 디버그 로깅을 활성화하려면 values.yaml
파일의 kas
섹션에 다음을 추가하세요:
customConfig:
observability:
logging:
level: debug
grpc_level: debug