GitLab Webservice 차트 사용하기

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

webservice 서브 차트는 GitLab Rails 웹 서버에 두 개의 Webservice 작업자를 제공하며, 이는 단일 포드가 GitLab에서 모든 웹 요청을 처리할 수 있게 하기 위한 최소 요구 사항입니다.

이 차트의 포드는 두 개의 컨테이너: gitlab-workhorsewebservice를 사용합니다.
GitLab Workhorse는 포트 8181에서 수신하며, 항상 포드로 들어오는 트래픽의 목적지가 되어야 합니다.
webservice는 GitLab Rails 코드베이스를 보유하고 있으며, 8080에서 수신하고 메트릭 수집을 위해 접근할 수 있습니다.
webservice는 일반 트래픽을 직접 수신해서는 안 됩니다.

필수 조건

이 차트는 Redis, PostgreSQL, Gitaly 및 Registry 서비스에 의존하며, 이는 완전한 GitLab 차트의 일부로 제공되거나 이 차트를 배포하는 Kubernetes 클러스터에서 접근 가능한 외부 서비스로 제공됩니다.

구성

webservice 차트는 다음과 같이 구성됩니다: Global settings,
Deployments settings, Ingress settings,
External services, 그리고 Chart settings.

설치 명령줄 옵션

아래 표는 --set 플래그를 사용하여 helm install 명령에 제공할 수 있는 모든 가능한 차트 구성을 포함합니다.

매개변수 기본값 설명
annotations   포드 주석
podLabels   보충 포드 레이블. 선택자에는 사용되지 않습니다.
common.labels   이 차트에 의해 생성된 모든 객체에 적용되는 보충 레이블.
deployment.terminationGracePeriodSeconds 30 Kubernetes가 포드가 종료될 때까지 기다리는 초, 이 값은 shutdown.blackoutSeconds보다 길어야 합니다.
deployment.livenessProbe.initialDelaySeconds 20 생존성 프로브가 시작되기 전의 지연
deployment.livenessProbe.periodSeconds 60 생존성 프로브를 수행하는 빈도
deployment.livenessProbe.timeoutSeconds 30 생존성 프로브가 타임아웃될 때
deployment.livenessProbe.successThreshold 1 생존성 프로브가 실패한 뒤 성공으로 간주되는 최소 연속 성공 수
deployment.livenessProbe.failureThreshold 3 생존성 프로브가 성공한 뒤 실패로 간주되는 최소 연속 실패 수
deployment.readinessProbe.initialDelaySeconds 0 준비 상태 프로브가 시작되기 전의 지연
deployment.readinessProbe.periodSeconds 10 준비 상태 프로브를 수행하는 빈도
deployment.readinessProbe.timeoutSeconds 2 준비 상태 프로브가 타임아웃될 때
deployment.readinessProbe.successThreshold 1 준비 상태 프로브가 실패한 뒤 성공으로 간주되는 최소 연속 성공 수
deployment.readinessProbe.failureThreshold 3 준비 상태 프로브가 성공한 뒤 실패로 간주되는 최소 연속 실패 수
deployment.strategy {} 배포에 사용될 업데이트 전략을 구성할 수 있습니다. 제공되지 않을 경우, 클러스터의 기본값이 사용됩니다.
enabled true Webservice 활성화 플래그
extraContainers   포함할 추가 컨테이너 목록
extraInitContainers   포함할 추가 init 컨테이너 목록
extras.google_analytics_id nil 프론트엔드를 위한 Google Analytics ID
extraVolumeMounts   사용할 추가 볼륨 마운트 목록
extraVolumes   생성할 추가 볼륨 목록
extraEnv   노출할 추가 환경 변수 목록
extraEnvFrom   다른 데이터 소스에서 노출할 추가 환경 변수 목록
gitlab.webservice.workhorse.image registry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ee Workhorse 이미지 리포지토리
gitlab.webservice.workhorse.tag   Workhorse 이미지 태그
hpa.behavior {scaleDown: {stabilizationWindowSeconds: 300 }} 동간섭 및 하강 동작의 사양을 포함합니다(방정식: autoscaling/v2beta2 또는 그 이상 필요)
hpa.customMetrics [] 사용자 정의 지표는 원하는 복제 수를 계산하는 데 사용할 사양을 포함합니다 (기본적으로 targetAverageUtilization에서 구성한 평균 CPU 사용률 사용 오버라이드)
hpa.cpu.targetType AverageValue 자동 확장 CPU 목표 유형을 설정하며, Utilization 또는 AverageValue이어야 합니다.
hpa.cpu.targetAverageValue 1 자동 확장 CPU 목표 값을 설정합니다.
hpa.cpu.targetAverageUtilization   자동 확장 CPU 목표 활용도를 설정합니다.
hpa.memory.targetType   자동 확장 메모리 목표 유형을 설정합니다. Utilization 또는 AverageValue이어야 합니다.
hpa.memory.targetAverageValue   자동 확장 메모리 목표 값을 설정합니다.
hpa.memory.targetAverageUtilization   자동 확장 메모리 목표 활용도를 설정합니다.
hpa.targetAverageValue   DEPRECATED 자동 확장 CPU 목표 값을 설정합니다.
sshHostKeys.mount false GitLab Shell 비공개 SSH 키를 포함하는 비공식 공개 키를 마운트할지 여부.
sshHostKeys.mountName ssh-host-keys 마운트된 볼륨의 이름.
sshHostKeys.types [dsa,rsa,ecdsa,ed25519] 마운트할 SSH 키 유형 목록.
image.pullPolicy Always Webservice 이미지 풀 정책
image.pullSecrets   이미지 리포지토리를 위한 비밀
image.repository registry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ee Webservice 이미지 리포지토리
image.tag   Webservice 이미지 태그
init.image.repository   initContainer 이미지
init.image.tag   initContainer 이미지 태그
init.containerSecurityContext.runAsUser 1000 initContainer 특정: 컨테이너가 시작될 사용자 ID
init.containerSecurityContext.allowPrivilegeEscalation false initContainer 특정: 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지 여부를 제어합니다.
init.containerSecurityContext.runAsNonRoot true initContainer 특정: 컨테이너가 비루트 사용자로 실행될지 여부를 제어합니다.
init.containerSecurityContext.capabilities.drop [ "ALL" ] initContainer 특정: 컨테이너에 대한 Linux capabilities를 제거합니다.
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.cpuhpa.memory에서 계산된 트리거입니다.
metrics.enabled true 메트릭 엔드포인트가 스크래핑을 위해 제공되어야 하는지 여부
metrics.port 8083 메트릭 엔드포인트 포트
metrics.path /metrics 메트릭 엔드포인트 경로
metrics.serviceMonitor.enabled false ServiceMonitor를 생성하여 Prometheus Operator가 메트릭 스크래핑을 관리할 수 있게 하기로 설정된 경우, 이를 활성화하면 prometheus.io 스크래핑 주석이 제거됩니다.
metrics.serviceMonitor.additionalLabels {} ServiceMonitor에 추가할 추가 레이블
metrics.serviceMonitor.endpointConfig {} ServiceMonitor에 대한 추가 엔드포인트 구성
metrics.annotations   DEPRECATED 명시적 메트릭 주석을 설정합니다. 템플릿 콘텐츠로 대체됨.
metrics.tls.enabled   메트릭/web_exporter 엔드포인트에 대한 TLS가 활성화됩니다. 기본값은 tls.enabled.
metrics.tls.secretName   메트릭/web_exporter 엔드포인트 TLS 인증서와 키를 포함한 비밀. 기본값은 tls.secretName.
minio.bucket git-lfs MinIO를 사용할 때의 스토리지 버킷 이름
minio.port 9000 MinIO 서비스의 포트
minio.serviceName minio-svc MinIO 서비스의 이름
monitoring.ipWhitelist [0.0.0.0/0] 모니터링 엔드포인트에 대한 허용된 IP 목록
monitoring.exporter.enabled false 웹 서버가 Prometheus 메트릭을 노출할 수 있게 설정하며, 메트릭 포트가 모니터링 내보내기 포트로 설정된 경우 이를 재정의합니다.
monitoring.exporter.port 8083 메트릭 내보내기를 위해 사용할 포트 번호
psql.password.key psql-password psql 비밀번호를 얻을 psql 비밀의 키
psql.password.secret gitlab-postgres psql 비밀 이름
psql.port   PostgreSQL 서버 포트를 설정합니다. global.psql.port보다 우선합니다.
puma.disableWorkerKiller true Puma 작업자 메모리 킬러 비활성화
puma.workerMaxMemory   Puma 작업자 킬러를 위한 최대 메모리(메가바이트 단위)
puma.threads.min 4 Puma 스레드의 최소 수
puma.threads.max 4 Puma 스레드의 최대 수
rack_attack.git_basic_auth {} 자세한 내용을 보려면 GitLab 문서를 참조하세요.
redis.serviceName redis Redis 서비스 이름
global.registry.api.port 5000 레지스트리 포트
global.registry.api.protocol http 레지스트리 프로토콜
global.registry.api.serviceName registry 레지스트리 서비스 이름
global.registry.enabled true 모든 프로젝트 메뉴에서 레지스트리 링크를 추가/제거합니다.
global.registry.tokenIssuer gitlab-issuer 레지스트리 토큰 발급자
replicaCount 1 Webservice 복제 수
resources.requests.cpu 300m Webservice 최소 CPU
resources.requests.memory 1.5G Webservice 최소 메모리
service.externalPort 8080 노출된 Webservice 포트
securityContext.fsGroup 1000 포드가 시작될 그룹 ID
securityContext.runAsUser 1000 포드가 시작될 사용자 ID
securityContext.fsGroupChangePolicy   볼륨의 소유권과 권한 변경 정책(1.23 이상의 Kubernetes 요구됨)
securityContext.seccompProfile.type RuntimeDefault 사용되는 Seccomp 프로필
containerSecurityContext   컨테이너가 시작될 때 사용할 securityContext를 재정의합니다.
containerSecurityContext.runAsUser 1000 컨테이너가 시작될 특정 보안 컨텍스트 사용자 ID를 재정의할 수 있습니다.
containerSecurityContext.allowPrivilegeEscalation false Gitaly 컨테이너의 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지 여부를 제어합니다.
containerSecurityContext.runAsNonRoot true Gitaly 컨테이너가 비루트 사용자로 실행되는지 여부를 제어합니다.
containerSecurityContext.capabilities.drop [ "ALL" ] Gitaly 컨테이너에 대한 Linux capabilities를 제거합니다.
serviceAccount.automountServiceAccountToken false 기본 서비스 계정 액세스 토큰이 포드에 마운트되어야 하는지 여부를 나타냅니다.
serviceAccount.create false 서비스 계정을 생성할지 여부를 나타냅니다.
serviceAccount.enabled false 서비스 계정을 사용할지 여부를 나타냅니다.
serviceAccount.name   서비스 계정의 이름. 설정되지 않은 경우 전체 차트 이름이 사용됩니다.
serviceLabels {} 보충 서비스 레이블
service.internalPort 8080 Webservice 내부 포트
service.type ClusterIP Webservice 서비스 유형
service.workhorseExternalPort 8181 Workhorse 노출 포트
service.workhorseInternalPort 8181 Workhorse 내부 포트
service.loadBalancerIP   LoadBalancer에 할당할 IP 주소(클라우드 공급자가 지원하는 경우)
service.loadBalancerSourceRanges   LoadBalancer에 허용된 IP CIDR 목록(클라우드 공급자가 지원하는 경우) 서비스 유형 = LoadBalancer에 필수
shell.authToken.key secret 셸 비밀의 셸 토큰에 대한 키
shell.authToken.secret {Release.Name}-gitlab-shell-secret 셸 토큰 비밀
shell.port nil UI에서 생성된 SSH URL에 사용할 포트 번호
shutdown.blackoutSeconds 10 종료 수신 후 Webservice를 실행 중으로 유지하기 위한 초 수, 이 값은 deployment.terminationGracePeriodSeconds보다 짧아야 합니다.
tls.enabled false Webservice TLS 활성화
tls.secretName {Release.Name}-webservice-tls Webservice TLS 비밀. secretNameKubernetes TLS 비밀을 가리켜야 합니다.
tolerations [] 포드 할당을 위한 내성 라벨
trusted_proxies [] 자세한 내용을 보려면 GitLab 문서를 참조하세요.
workhorse.logFormat json 로깅 포맷. 유효한 포맷: json, structured, text
workerProcesses 2 Webservice 작업자 수
workhorse.keywatcher true Redis에 대해 Workhorse를 구독합니다. 이는 /api/*에 대한 요청을 서비스하는 모든 배포에 필수이며, 다른 배포에는 안전하게 비활성화할 수 있습니다.
workhorse.shutdownTimeout global.webservice.workerTimeout + 1 (초) Workhorse에서 모든 웹 요청이 처리되기를 기다리는 시간. 예: 1min, 65s.
workhorse.trustedCIDRsForPropagation   상관 관계 ID 전파를 위해 신뢰할 수 있는 CIDR 블록의 목록. 이 기능이 작동하려면 workhorse.extraArgs에서 -propagateCorrelationID 옵션도 사용해야 합니다. 자세한 내용은 Workhorse 문서를 참조하세요.
workhorse.trustedCIDRsForXForwardedFor   실제 클라이언트 IP를 X-Forwarded-For HTTP 헤더를 통해 확인하는 데 사용할 수 있는 신뢰할 수 있는 CIDR 블록의 목록. 이는 workhorse.trustedCIDRsForPropagation와 함께 사용됩니다. 자세한 내용은 Workhorse 문서를 참조하세요.
workhorse.containerSecurityContext   컨테이너가 시작될 때 사용할 securityContext를 재정의합니다.
workhorse.containerSecurityContext.runAsUser 1000 컨테이너가 시작될 사용자 ID
workhorse.containerSecurityContext.allowPrivilegeEscalation false 컨테이너의 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지 여부를 제어합니다.
workhorse.containerSecurityContext.runAsNonRoot true 컨테이너가 비루트 사용자로 실행되는지 여부를 제어합니다.
workhorse.containerSecurityContext.capabilities.drop [ "ALL" ] Gitaly 컨테이너에 대한 Linux capabilities를 제거합니다.
workhorse.livenessProbe.initialDelaySeconds 20 생존성 프로브가 시작되기 전의 지연
workhorse.livenessProbe.periodSeconds 60 생존성 프로브를 수행하는 빈도
workhorse.livenessProbe.timeoutSeconds 30 생존성 프로브가 타임아웃될 때
workhorse.livenessProbe.successThreshold 1 생존성 프로브가 실패한 뒤 성공으로 간주되는 최소 연속 성공 수
workhorse.livenessProbe.failureThreshold 3 생존성 프로브가 성공한 뒤 실패로 간주되는 최소 연속 실패 수
workhorse.monitoring.exporter.enabled false Workhorse가 Prometheus 메트릭을 노출할 수 있게 설정하며, 이는 workhorse.metrics.enabled로 재정의됩니다.
workhorse.monitoring.exporter.port 9229 Workhorse Prometheus 메트릭을 위해 사용할 포트 번호
workhorse.monitoring.exporter.tls.enabled false true로 설정되면 메트릭 엔드포인트에서 TLS를 활성화합니다. 이는 Workhorse에 대해 TLS가 활성화되어야 합니다.
workhorse.metrics.enabled true Workhorse 메트릭 엔드포인트가 스크래핑을 위해 제공되어야 하는지 여부
workhorse.metrics.port 8083 Workhorse 메트릭 엔드포인트 포트
workhorse.metrics.path /metrics Workhorse 메트릭 엔드포인트 경로
workhorse.metrics.serviceMonitor.enabled false ServiceMonitor를 생성하여 Prometheus Operator가 Workhorse 메트릭 스크래핑을 관리할 수 있게 하기로 설정된 경우, 이를 활성화하면 prometheus.io 스크래핑 주석이 제거됩니다.
workhorse.metrics.serviceMonitor.additionalLabels {} Workhorse ServiceMonitor에 추가할 추가 레이블
workhorse.metrics.serviceMonitor.endpointConfig {} Workhorse ServiceMonitor에 대한 추가 엔드포인트 구성
workhorse.readinessProbe.initialDelaySeconds 0 준비 상태 프로브가 시작되기 전의 지연
workhorse.readinessProbe.periodSeconds 10 준비 상태 프로브를 수행하는 빈도
workhorse.readinessProbe.timeoutSeconds 2 준비 상태 프로브가 타임아웃될 때
workhorse.readinessProbe.successThreshold 1 준비 상태 프로브가 실패한 뒤 성공으로 간주되는 최소 연속 성공 수
workhorse.readinessProbe.failureThreshold 3 준비 상태 프로브가 성공한 뒤 실패로 간주되는 최소 연속 실패 수
workhorse.imageScaler.maxProcs 2 동시에 실행될 수 있는 이미지 스케일링 프로세스의 최대 수
workhorse.imageScaler.maxFileSizeBytes 250000 스케일러가 처리할 이미지의 최대 파일 크기(바이트 단위)
workhorse.tls.verify true true로 설정되면 NGINX Ingress가 Workhorse의 TLS 인증서를 검증하도록 강제합니다. 사용자 CA에 대해 workhorse.tls.caSecretName도 설정해야 합니다. self-signed 인증서에 대해 false로 설정해야 합니다.
workhorse.tls.secretName {Release.Name}-workhorse-tls TLS 키와 인증서 쌍을 포함하는 TLS Secret의 이름입니다. Workhorse TLS가 활성화될 때 필요합니다.
workhorse.tls.caSecretName   CA 인증서를 포함하는 비밀의 이름. 이는 TLS Secret가 아니며, ca.crt 키만 포함해야 합니다. 이는 NGINX에 의해 TLS 검증에 사용됩니다.
webServer puma 요청 처리를 위해 사용될 웹 서버(Webservice/Puma)를 선택합니다.
priorityClassName "" 포드의 priorityClassName을 구성할 수 있게 하여, 퇴출 시 포드 우선 순위를 제어하는 데 사용됩니다.

차트 구성 예제

extraEnv

extraEnv는 모든 컨테이너에서 추가 환경 변수를 노출할 수 있도록 합니다.

다음은 extraEnv의 예제 사용법입니다:

extraEnv:
  SOME_KEY: some_value
  SOME_OTHER_KEY: some_other_value

컨테이너가 시작되면 환경 변수가 노출되었는지 확인할 수 있습니다:

env | grep SOME
SOME_KEY=some_value
SOME_OTHER_KEY=some_other_value

extraEnvFrom

extraEnvFrom은 다른 데이터 소스에서 모든 컨테이너에 추가 환경 변수를 노출할 수 있도록 합니다.

후속 변수는 각 deployment마다 덮어 쓸 수 있습니다.

다음은 extraEnvFrom의 예제 사용법입니다:

extraEnvFrom:
  MY_NODE_NAME:
    fieldRef:
      fieldPath: spec.nodeName
  MY_CPU_REQUEST:
    resourceFieldRef:
      containerName: test-container
      resource: requests.cpu
  SECRET_THING:
    secretKeyRef:
      name: special-secret
      key: special_token
      # 선택 사항: boolean
deployments:
  default:
    extraEnvFrom:
      CONFIG_STRING:
        configMapKeyRef:
          name: useful-config
          key: some-string
          # 선택 사항: boolean

image.pullSecrets

pullSecrets는 개인 레지스트리에 인증하여 파드의 이미지를 가져올 수 있도록 합니다.

개인 레지스트리 및 해당 인증 방법에 대한 추가 세부 정보는 Kubernetes 문서를 참조하세요.

다음은 pullSecrets의 예제 사용법입니다:

image:
  repository: my.webservice.repository
  pullPolicy: Always
  pullSecrets:
  - name: my-secret-name
  - name: my-secondary-secret-name

serviceAccount

이 섹션은 ServiceAccount를 생성할지 여부와 기본 액세스 토큰을 파드에 마운트할지 여부를 제어합니다.

이름 유형 기본값 설명
annotations {} ServiceAccount 주석.
automountServiceAccountToken 부울 false 기본 ServiceAccount 액세스 토큰이 파드에 마운트될지 여부를 제어합니다. 특정 사이드카가 제대로 작동하는 데 필요하지 않으면 활성화하지 않아야 합니다 (예: Istio).
create 부울 false ServiceAccount를 생성할지 여부를 나타냅니다.
enabled 부울 false ServiceAccount를 사용할지 여부를 나타냅니다.
name 문자열   ServiceAccount의 이름입니다. 설정하지 않으면 전체 차트 이름이 사용됩니다.

tolerations

tolerations는 오염된 워커 노드에서 파드를 예약할 수 있게 합니다.

다음은 tolerations의 예제 사용법입니다:

tolerations:
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoSchedule"
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoExecute"

annotations

annotations는 Webservice 파드에 주석을 추가할 수 있게 합니다. 예를 들어:

annotations:
  kubernetes.io/example-annotation: annotation-value

strategy

deployment.strategy는 배포 업데이트 전략을 변경할 수 있게 합니다. 이는 배포가 업데이트될 때 파드가 어떻게 재생성될지를 정의합니다. 제공되지 않는 경우 클러스터 기본값이 사용됩니다.

예를 들어, 롤링 업데이트가 시작될 때 추가 파드를 생성하지 않으려면 max unavailable pods를 50%로 변경하세요:

deployment:
  strategy:
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 50%

업데이트 전략의 유형을 Recreate로 변경할 수도 있지만, 이 경우 모든 파드를 제외한 후 새로운 파드를 예약할 것이므로 주의해야 하며, 새로운 파드가 시작될 때까지 웹 UI를 사용할 수 없습니다. 이 경우 rollingUpdate를 정의할 필요는 없으며, type만 정의하면 됩니다:

deployment:
  strategy:
    type: Recreate

자세한 내용은 Kubernetes 문서를 참조하세요.

TLS

Webservice 포드는 두 개의 컨테이너를 실행합니다:

  • gitlab-workhorse
  • webservice

gitlab-workhorse

Workhorse는 웹 및 메트릭 엔드포인트 모두에 대해 TLS를 지원합니다. 이는 Workhorse와 다른 구성 요소 간의 통신을 보호하며, 특히 nginx-ingress, gitlab-shellgitaly와의 통신입니다. TLS 인증서는 Common Name (CN) 또는 Subject Alternate Name (SAN)에서 Workhorse 서비스 호스트 이름(예: RELEASE-webservice-default.default.svc)을 포함해야 합니다.

여러 Webservice 배포가 존재할 수 있으므로, 다양한 서비스 이름에 대한 TLS 인증서를 준비해야 합니다. 이는 여러 개의 SAN 또는 와일드카드 인증서를 통해 달성할 수 있습니다.

TLS 인증서가 생성되면, 이를 위해 Kubernetes TLS 비밀을 생성합니다. 또한 ca.crt 키가 있는 TLS 인증서의 CA 인증서만 포함된 다른 비밀을 생성해야 합니다.

gitlab-workhorse 컨테이너에 대해 TLS를 활성화하려면 global.workhorse.tls.enabledtrue로 설정합니다. 사용자 지정 비밀 이름을 gitlab.webservice.workhorse.tls.secretNameglobal.certificates.customCAs에 맞게 전달할 수 있습니다.

gitlab.webservice.workhorse.tls.verifytrue일 때(기본값으로 해당) CA 인증서 비밀 이름을 gitlab.webservice.workhorse.tls.caSecretName에 전달해야 합니다. 이는 자체 서명된 인증서 및 사용자 지정 CA에 필요합니다. 이 비밀은 NGINX가 Workhorse의 TLS 인증서를 검증하는 데 사용됩니다.

global:
  workhorse:
    tls:
      enabled: true
  certificates:
    customCAs:
      - secret: gitlab-workhorse-ca
gitlab:
  webservice:
    workhorse:
      tls:
        verify: true
        # secretName: gitlab-workhorse-tls
        caSecretName: gitlab-workhorse-ca
      monitoring:
        exporter:
          enabled: true
          tls:
            enabled: true

gitlab-workhorse 컨테이너의 메트릭 엔드포인트에서의 TLS는 global.workhorse.tls.enabled에서 상속됩니다. 메트릭 엔드포인트의 TLS는 Workhorse에 대해 TLS가 활성화되어 있을 때만 사용할 수 있습니다. 메트릭 리스너는 gitlab.webservice.workhorse.tls.secretName에 의해 지정된 동일한 TLS 인증서를 사용합니다.

메트릭 엔드포인트에 사용되는 TLS 인증서는 포함된 주체 대체 이름(SAN)에 대해 추가 고려 사항이 필요할 수 있습니다. 특히 포함된 Prometheus Helm 차트를 사용할 경우 말입니다. 자세한 내용은 TLS가 활성화된 엔드포인트를 스크랩하도록 Prometheus 구성하기를 참조하세요.

webservice

TLS를 활성화하는 주요 사용 사례는 Prometheus 메트릭 스크랩을 위해 HTTPS를 통한 암호화를 제공하는 것입니다.

Prometheus가 HTTPS를 사용하여 /metrics/ 엔드포인트를 스크랩하려면 인증서의 CommonName 속성 또는 SubjectAlternativeName 항목에 대한 추가 구성이 필요합니다. 이에 대한 요구 사항은 TLS가 활성화된 엔드포인트를 스크랩하도록 Prometheus 구성하기를 참조하세요.

webservice 컨테이너에서 TLS는 gitlab.webservice.tls.enabled 설정으로 활성화할 수 있습니다:

gitlab:
  webservice:
    tls:
      enabled: true
      # secretName: gitlab-webservice-tls

secretNameKubernetes TLS 비밀을 가리켜야 합니다. 예를 들어, 로컬 인증서와 키로 TLS 비밀을 생성하는 방법은 다음과 같습니다:

kubectl create secret tls <secret name> --cert=path/to/puma.crt --key=path/to/puma.key

이 차트의 커뮤니티 에디션 사용하기

기본적으로 Helm 차트는 GitLab의 엔터프라이즈 에디션을 사용합니다. 필요한 경우, 커뮤니티 에디션을 대신 사용할 수 있습니다. 두 에디션 간의 차이점에 대해 알아보세요.

커뮤니티 에디션을 사용하려면 image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-webservice-ce로 설정하고 workhorse.imageregistry.gitlab.com/gitlab-org/build/cng/gitlab-workhorse-ce로 설정하세요.

전역 설정

우리는 차트 간에 몇 가지 공통 전역 설정을 공유합니다. GitLab 및 레지스트리 호스트 이름과 같은 공통 구성 옵션에 대해서는 Globals Documentation를 참조하세요.

배포 설정

이 차트는 여러 Deployment 객체와 관련 리소스를 생성할 수 있는 기능을 제공합니다. 이 기능은 GitLab 애플리케이션에 대한 요청을 경로 기반 라우팅을 사용하여 여러 세트의 Pod 사이에 분배할 수 있게 합니다.

이 맵의 키(default 예제) 각각에 대한 “이름”입니다. defaultRELEASE-webservice-default로 생성된 Deployment, Service, HorizontalPodAutoscaler, PodDisruptionBudget 및 선택적 Ingress를 가집니다.

제공되지 않은 속성은 gitlab-webservice 차트 기본값을 상속받습니다.

deployments:
  default:
    ingress:
      path: # 상속받지 않거나 기본값 없음. 비워두면 Ingress가 비활성화됩니다.
      pathType: Prefix
      provider: nginx
      annotations:
        # `ingress.anntoations` 상속
      proxyConnectTimeout: # `ingress.proxyConnectTimeout` 상속
      proxyReadTimeout:    # `ingress.proxyReadTimeout` 상속
      proxyBodySize:       # `ingress.proxyBodySize` 상속
    deployment:
      annotations: # 맵
      labels: # 맵
      # `deployment` 상속
    pod:
      labels: # 추가 라벨들 .podLabels
      annotations: # 맵
        # .Values.annotations에서 상속
    service:
      labels: # 추가 라벨들 .serviceLabels
      annotations: # 추가 주석들 .service.annotations
        # `service.annotations` 상속
    hpa:
      minReplicas: # 기본값은 .minReplicas
      maxReplicas: # 기본값은 .maxReplicas
      metrics: # 선택적 HPA 지표 정의 대체
      # `hpa` 상속
    pdb:
      maxUnavailable: # `maxUnavailable` 상속
    resources: # `webservice` 컨테이너에 대한 `resources`
      # `resources` 상속
    workhorse: # 맵
      # `workhorse` 상속
    extraEnv: #
      # `extraEnv` 상속
    extraEnvFrom: #
      # `extraEnvFrom` 상속
    puma: # 맵
      # `puma` 상속
    workerProcesses: # `workerProcesses` 상속
    shutdown:
      # `shutdown` 상속
    nodeSelector: # 맵
      # `nodeSelector` 상속
    tolerations: # 배열
      # `tolerations` 상속

배포 Ingress

deployments 항목은 차트 전체 Ingress 설정에서 상속받습니다. 여기에서 제공된 모든 값은 거기에서 제공된 값을 재정의합니다. path를 제외하고 모든 설정은 동일합니다.

webservice:
  deployments:
    default:
      ingress:
        path: /
   api:
     ingress:
       path: /api

path 속성은 Ingress의 path 속성에 직접 채워지며, 각 서비스로 전달되는 URI 경로를 제어할 수 있습니다. 위의 예에서, default는 모든 경로를 포함하는 역할을 하고, api/api 아래의 모든 트래픽을 수신합니다.

주어진 Deployment가 관련 Ingress 리소스를 생성하지 않도록 하려면 path를 비워주세요. 아래에서 internal-api는 외부 트래픽을 수신하지 않을 것입니다.

webservice:
  deployments:
    default:
      ingress:
        path: /
   api:
     ingress:
       path: /api
   internal-api:
     ingress:
       path:

인그레스 설정

이름 유형 기본값 설명
ingress.apiVersion 문자열   apiVersion 필드에 사용할 값입니다.
ingress.annotations 아래 참조 이러한 주석은 모든 인그레스에 사용됩니다. 예: ingress.annotations."nginx\.ingress\.kubernetes\.io/enable-access-log"=true.
ingress.configureCertmanager 불리언   인그레스 주석 cert-manager.io/issueracme.cert-manager.io/http01-edit-in-place를 토글합니다. 자세한 내용은 GitLab Pages의 TLS 요구 사항을 참조하세요.
ingress.enabled 불리언 false 서비스를 위한 인그레스 객체 생성을 제어하는 설정입니다. false로 설정하면 global.ingress.enabled 설정 값이 사용됩니다.
ingress.proxyBodySize 문자열 512m 아래 참조.
ingress.tls.enabled 불리언 true false로 설정하면 GitLab 웹서비스에 대한 TLS를 비활성화합니다. 이는 인그레스 수준에서 TLS 종료를 사용할 수 없는 경우에 유용합니다. 예를 들어, 인그레스 컨트롤러 전에 TLS 종료 프록시가 있을 경우입니다.
ingress.tls.secretName 문자열 (비어 있음) GitLab URL에 대한 유효한 인증서와 키가 포함된 Kubernetes TLS 비밀의 이름입니다. 설정되지 않으면 global.ingress.tls.secretName 값이 대신 사용됩니다.
ingress.tls.smardcardSecretName 문자열 (비어 있음) 활성화된 경우 GitLab 스마트카드 URL에 대한 유효한 인증서 및 키가 포함된 Kubernetes TLS 비밀의 이름입니다. 설정되지 않으면 global.ingress.tls.secretName 값이 대신 사용됩니다.
ingress.tls.useGeoClass 불리언 false Geo Ingress 클래스(global.geo.ingressClass)로 인그레스 클래스를 재정의합니다. 주요 Geo 사이트에 필요합니다.

주석

annotations는 웹서비스 인그레스에 대한 주석을 설정하는 데 사용됩니다.

기본적으로 하나의 주석을 설정합니다: nginx.ingress.kubernetes.io/service-upstream: "true".

이 설정은 NGINX에게 서비스 자체를 업스트림으로 직접 연락하도록 지시하여 웹서비스 포드에 대한 트래픽을 더 고르게 분산하는 데 도움을 줍니다. 자세한 내용은 NGINX 문서를 참조하세요.

이를 재정의하려면 다음을 설정하십시오:

gitlab:
  webservice:
    ingress:
      annotations:
        nginx.ingress.kubernetes.io/service-upstream: "false"

proxyBodySize

proxyBodySize는 NGINX 프록시 최대 본문 크기를 설정하는 데 사용됩니다. 이는 일반적으로 기본값보다 큰 Docker 이미지를 허용하기 위해 필요합니다.

이는 리눅스 패키지 설치에서 nginx['client_max_body_size'] 구성과 같습니다. 대안으로, 본문 크기를 다음 두 매개변수 중 하나로 설정할 수 있습니다:

  • gitlab.webservice.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-body-size"
  • global.ingress.annotations."nginx\.ingress\.kubernetes\.io/proxy-body-size"

추가 Ingress

extraIngress.enabled=true로 설정하여 추가 Ingress를 배포할 수 있습니다. Ingress는 기본 Ingress와 같은 이름에 -extra 접미사가 추가되며 기본 Ingress와 동일한 설정을 지원합니다.

리소스

메모리 요청/제한

각 팟은 workerProcesses와 동일한 수의 작업자를 생성하며, 각 작업자는 기본 메모리 양을 사용합니다. 우리는 다음을 권장합니다:

  • 작업자당 최소 1.25GB (requests.memory)
  • 작업자당 최대 1.5GB, 기본 작업자에 대해 1GB 추가 (limits.memory)

필요한 리소스는 사용자에 의해 생성된 워크로드에 따라 달라지며, GitLab 애플리케이션의 변경이나 업그레이드에 따라 향후 변경될 수 있습니다.

기본값:

workerProcesses: 2
resources:
  requests:
    memory: 2.5G # = 2 * 1.25G
# limits:
#   memory: 4G   # = (2 * 1.5G) + 950M

작업자를 4개로 구성한 경우:

workerProcesses: 4
resources:
  requests:
    memory: 5G   # = 4 * 1.25G
# limits:
#   memory: 7G   # = (4 * 1.5G) + 950M

외부 서비스

Redis

Redis 문서는 globals 페이지에 통합되었습니다. 최신 Redis 구성 옵션은 이 페이지를 참조하십시오.

PostgreSQL

PostgreSQL 문서는 globals 페이지에 통합되었습니다. 최신 PostgreSQL 구성 옵션은 이 페이지를 참조하십시오.

Gitaly

Gitaly는 global settings로 구성됩니다. Gitaly 구성 문서를 참조하십시오.

MinIO

minio:
  serviceName: 'minio-svc'
  port: 9000
이름 유형 기본값 설명
port 정수 9000 MinIO Service에 도달하기 위한 포트 번호.
serviceName 문자열 minio-svc MinIO 팟에 의해 노출된 Service의 이름.

레지스트리

registry:
  host: registry.example.com
  port: 443
  api:
    protocol: http
    host: registry.example.com
    serviceName: registry
    port: 5000
  tokenIssuer: gitlab-issuer
  certificate:
    secret: gitlab-registry
    key: registry-auth.key
이름 유형 기본값 설명
api.host 문자열   사용할 레지스트리 서버의 호스트 이름입니다. 이는 api.serviceName 대신 생략할 수 있습니다.
api.port 정수 5000 레지스트리 API에 연결하는 포트입니다.
api.protocol 문자열   웹 서비스가 레지스트리 API에 도달하기 위해 사용할 프로토콜입니다.
api.serviceName 문자열 registry 레지스트리 서버를 운영하는 service의 이름입니다. 이것이 존재하고 api.host가 없는 경우, 차트는 서비스 (및 현재 .Release.Name)의 호스트 이름을 api.host 값 대신 템플릿화합니다. 이는 레지스트리를 전체 GitLab 차트의 일부로 사용할 때 유용합니다.
certificate.key 문자열   registry 컨테이너에 auth.token.rootcertbundle로 제공될 인증서 번들을 보유하고 있는 Secretkey입니다.
certificate.secret 문자열   GitLab 인스턴스에서 생성된 토큰을 확인하는 데 사용될 인증서 번들을 보유하고 있는 Kubernetes Secret의 이름입니다.
host 문자열   GitLab UI에서 사용자에게 Docker 명령을 제공하기 위해 사용할 외부 호스트 이름입니다. 이는 registry.hostname 템플릿에서 설정된 값으로 되돌아갑니다. 이는 global.hosts에 설정된 값을 기반으로 레지스트리 호스트 이름을 결정합니다. Globals Documentation에서 자세한 내용을 확인하십시오.
port 정수   호스트 이름에서 사용되는 외부 포트입니다. 포트 80 또는 443을 사용하면 URL이 http/https로 형성됩니다. 다른 포트를 사용하면 모두 http를 사용하고 포트를 호스트 이름 끝에 추가합니다. 예를 들어 http://registry.example.com:8443와 같이 됩니다.
tokenIssuer 문자열 gitlab-issuer 인증 토큰 발행자의 이름입니다. 이는 레지스트리의 구성에서 사용된 이름과 일치해야 하며, 이는 토큰에 통합되어 전송될 때 사용됩니다. 기본값인 gitlab-issuer는 레지스트리 차트에서 사용하는 동일한 기본값입니다.

차트 설정

다음 값들은 Webservice Pods 구성을 위해 사용됩니다.

이름 유형 기본값 설명
replicaCount Integer 1 배포에서 생성할 Webservice 인스턴스의 수입니다.
workerProcesses Integer 2 포드당 실행할 Webservice 작업자의 수입니다. GitLab이 제대로 작동하려면 클러스터에 적어도 2개의 작업자가 있어야 합니다. workerProcesses를 증가시키면 작업자당 약 400MB의 메모리가 추가로 필요하므로 포드 resources를 적절히 업데이트해야 합니다.

메트릭스

metrics.enabled 값을 통해 메트릭스를 활성화하고 GitLab 모니터링 익스포터를 사용하여 메트릭스 포트를 노출합니다. 포드에는 Prometheus 주석이 부여되거나, metrics.serviceMonitor.enabledtrue일 경우 Prometheus Operator ServiceMonitor가 생성됩니다. 메트릭스는 /-/metrics 엔드포인트에서 수집할 수도 있지만, 이것은 관리자 영역에서 GitLab Prometheus 메트릭스를 활성화해야 합니다. GitLab Workhorse 메트릭스는 workhorse.metrics.enabled를 통해 노출할 수도 있지만, 이는 Prometheus 주석을 사용하여 수집할 수 없으므로 workhorse.metrics.serviceMonitor.enabledtrue로 설정하거나 외부 Prometheus 구성이 필요합니다.

GitLab 셸

GitLab Shell은 Webservice와의 통신에서 Auth Token을 사용합니다. 공유된 비밀을 사용하여 GitLab Shell과 Webservice에 토큰을 공유합니다.

shell:
  authToken:
    secret: gitlab-shell-secret
    key: secret
  port:
이름 유형 기본값 설명
authToken.key String   authToken이 포함된 비밀(아래)의 키 이름을 정의합니다.
authToken.secret String   가져올 Kubernetes Secret의 이름을 정의합니다.
port Integer 22 GitLab UI 내에서 SSH URL을 생성하는 데 사용할 포트 번호입니다. global.shell.port에 의해 제어됩니다.

웹 서버 옵션

현재 버전의 차트는 Puma 웹 서버를 지원합니다.

Puma 고유 옵션:

이름 유형 기본값 설명
puma.workerMaxMemory Integer   Puma 작업자 킬러에 대한 최대 메모리(메가바이트 단위)
puma.threads.min Integer 4 Puma 스레드의 최소 수입니다.
puma.threads.max Integer 4 Puma 스레드의 최대 수입니다.

networkpolicy 구성

이 섹션은 NetworkPolicy를 제어합니다.

이 구성은 선택 사항이며, Pods의 Egress와 Ingress를 특정 엔드포인트로 제한하는 데 사용됩니다.

이름 유형 기본값 설명
enabled Boolean false 이 설정은 NetworkPolicy를 활성화합니다.
ingress.enabled Boolean false true로 설정하면 Ingress 네트워크 정책이 활성화됩니다. 이는 규칙이 지정되지 않는 한 모든 Ingress 연결을 차단합니다.
ingress.rules Array [] Ingress 정책을 위한 규칙으로, 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource와 아래의 예를 참조하세요.
egress.enabled Boolean false true로 설정하면 Egress 네트워크 정책이 활성화됩니다. 이는 규칙이 지정되지 않는 한 모든 Egress 연결을 차단합니다.
egress.rules Array [] Egress 정책을 위한 규칙으로, 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource와 아래의 예를 참조하세요.

예제 네트워크 정책

웹 서비스는 Prometheus exporter가 활성화된 경우에만 Ingress 연결을 필요로 하며, NGINX Ingress에서 오는 트래픽을 수신하고, 일반적으로 다양한 장소로 Egress 연결이 필요합니다. 이 예제는 다음 네트워크 정책을 추가합니다:

  • TCP 10.0.0.0/8 포트 8080에서 네트워크의 모든 Ingress 요청이 메트릭 내보내기 및 NGINX Ingress를 위해 허용됩니다.
  • 포트 8181로의 모든 Ingress 요청은 일반 서비스 운영을 위해 허용됩니다.
  • UDP 10.0.0.0/8 포트 53에서 네트워크로의 모든 Egress 요청이 DNS를 위해 허용됩니다.
  • TCP 10.0.0.0/8 포트 5432에서 네트워크로의 모든 Egress 요청이 PostgreSQL을 위해 허용됩니다.
  • TCP 10.0.0.0/8 포트 6379에서 네트워크로의 모든 Egress 요청이 Redis를 위해 허용됩니다.
  • TCP 10.0.0.0/8 포트 8075에서 네트워크로의 모든 Egress 요청이 Gitaly를 위해 허용됩니다.
  • 10.0.0.0/8의 로컬 네트워크로의 다른 Egress 요청은 제한됩니다.
  • 10.0.0.0/8 외부의 Egress 요청은 허용됩니다.

제공된 예제는 단지 예일 뿐이며 완전하지 않을 수 있습니다.

웹 서비스는 외부 오브젝트 스토리지에서 이미지를 위해 공용 인터넷으로의 아웃바운드 연결이 필요합니다.

networkpolicy:
  enabled: true
  ingress:
    enabled: true
    rules:
      - from:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 8080
      - from:
        ports:
        - port: 8181
  egress:
    enabled: true
    rules:
      - to:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 53
          protocol: UDP
      - to:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 5432
          protocol: TCP
      - to:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 6379
          protocol: TCP
      - to:
        - ipBlock:
            cidr: 10.0.0.0/8
        ports:
        - port: 8075
          protocol: TCP
      - to:
        - ipBlock:
            cidr: 0.0.0.0/0
            except:
            - 10.0.0.0/8

LoadBalancer 서비스

service.typeLoadBalancer로 설정되면, 클라우드 공급자가 지원하는 경우 사용자 지정 IP를 사용하여 LoadBalancer를 생성하기 위해 선택적으로 service.loadBalancerIP를 지정할 수 있습니다.

service.typeLoadBalancer로 설정되면, 클라우드 공급자가 지원하는 경우 LoadBalancer에 접근할 수 있는 CIDR 범위를 제한하기 위해 service.loadBalancerSourceRanges도 설정해야 합니다. 이는 현재 메트릭 포트가 노출되는 문제 때문에 필요합니다.

LoadBalancer 서비스 유형에 대한 추가 정보는 Kubernetes 문서에서 찾을 수 있습니다.

service:
  type: LoadBalancer
  loadBalancerIP: 1.2.3.4
  loadBalancerSourceRanges:
  - 10.0.0.0/8

KEDA 구성

keda 섹션은 일반 HorizontalPodAutoscalers 대신 KEDA ScaledObjects의 설치를 가능하게 합니다.

이 구성은 선택 사항이며 사용자 정의 또는 외부 메트릭을 기반으로 자동 확장에서 필요할 때 사용할 수 있습니다.

대부분의 설정은 해당하는 경우 hpa 섹션에 설정된 값으로 기본값을 설정합니다.

다음이 true인 경우, CPU 및 메모리 임계값에 따라 CPU 및 메모리 트리거가 자동으로 추가됩니다:

  • triggers가 설정되지 않음.
  • 해당 request.cpu.request 또는 request.memory.request 설정도 0이 아닌 값으로 설정됨.

트리거가 설정되지 않은 경우 ScaledObject가 생성되지 않습니다.

자세한 내용은 KEDA 문서를 참조하세요.

Name Type Default Description
enabled Boolean false KEDA ScaledObjectsHorizontalPodAutoscalers 대신 사용합니다.
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.cpuhpa.memory에서 계산된 트리거입니다.