GitLab-Gitaly 차트 사용하기

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

gitaly 서브 차트는 Gitaly 서버의 조정 가능한 배포를 제공합니다.

요구 사항

이 차트는 Workhorse 서비스에 대한 액세스에 따라 다릅니다.
완전한 GitLab 차트의 일부이거나 이 차트가 배포되는 Kubernetes 클러스터에서 접근할 수 있는 외부 서비스로 제공됩니다.

설계 선택

이 차트에서 사용되는 Gitaly 컨테이너는 Gitaly로 아직 포팅되지 않은 Git 저장소에서 작업을 수행하기 위해 GitLab Shell 코드베이스를 포함합니다.
Gitaly 컨테이너에는 GitLab Shell 컨테이너의 복사본이 포함되어 있으며, 그 결과 이 차트 내에서 GitLab Shell을 구성해야 합니다.

구성

gitaly 차트는 두 부분으로 구성됩니다: 외부 서비스차트 설정.

Gitaly는 기본적으로 GitLab 차트를 배포할 때 구성 요소로 배포됩니다.
Gitaly를 별도로 배포하는 경우, global.gitaly.enabledfalse로 설정해야 하며, 외부 Gitaly 문서에 설명된 추가 구성을 수행해야 합니다.

설치 명령줄 옵션

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

매개변수 기본값 설명
annotations   Pod 주석
backup.goCloudUrl   서버 측 Gitaly 백업을 위한 개체 저장소 URL.
common.labels {} 이 차트에서 생성된 모든 객체에 적용되는 보조 레이블.
podLabels   보조 Pod 레이블. 선택자에는 사용되지 않습니다.
external[].hostname - "" 외부 노드의 호스트 이름
external[].name - "" 외부 노드 저장소의 이름
external[].port - "" 외부 노드의 포트
extraContainers   포함할 추가 컨테이너 목록
extraInitContainers   포함할 추가 초기화 컨테이너 목록
extraVolumeMounts   수행할 추가 볼륨 마운트 목록
extraVolumes   생성할 추가 볼륨 목록
extraEnv   노출할 추가 환경 변수 목록
extraEnvFrom   다른 데이터 소스에서 노출할 추가 환경 변수 목록
gitaly.serviceName   생성된 Gitaly 서비스의 이름. global.gitaly.serviceName를 재정의하며, 기본값은 <RELEASE-NAME>-gitaly입니다.
gpgSigning.enabled false Gitaly GPG 서명을 사용할지 여부.
gpgSigning.secret   Gitaly GPG 서명에 사용되는 비밀의 이름.
gpgSigning.key   Gitaly의 GPG 서명 키를 포함하는 GPG 비밀의 키.
image.pullPolicy Always Gitaly 이미지 풀 정책
image.pullSecrets   이미지 저장소에 대한 비밀
image.repository registry.gitlab.com/gitlab-org/build/cng/gitaly Gitaly 이미지 저장소
image.tag master Gitaly 이미지 태그
init.image.repository   initContainer 이미지
init.image.tag   initContainer 이미지 태그
init.containerSecurityContext   initContainer 특정 securityContext
init.containerSecurityContext.allowPrivilegeEscalation false initContainer 특정: 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지의 여부를 제어합니다.
init.containerSecurityContext.runAsNonRoot true initContainer 특정: 컨테이너가 비루트 사용자로 실행되는지의 여부를 제어합니다.
init.containerSecurityContext.capabilities.drop [ "ALL" ] initContainer 특정: 컨테이너에 대한 Linux capabilities를 제거합니다.
internal.names[] - default StatefulSet 스토리지의 순서 지정된 이름 목록
serviceLabels {} 보조 서비스 레이블
service.externalPort 8075 Gitaly 서비스 노출 포트
service.internalPort 8075 Gitaly 내부 포트
service.name gitaly Gitaly가 서비스 객체에서 뒤에 있는 서비스 포트의 이름.
service.type ClusterIP Gitaly 서비스 유형
service.clusterIP None 서비스 생성 요청의 일환으로 고유한 클러스터 IP 주소를 지정할 수 있습니다. 이는 Kubernetes의 Service 객체 clusterIP와 동일한 규칙을 따릅니다. service.type이 LoadBalancer이면 설정할 수 없습니다.
service.loadBalancerIP   설정되지 않으면 임시 IP 주소가 생성됩니다. 이는 Kubernetes의 Service 객체 loadbalancerIP 구성의 동일한 규칙을 따릅니다.
serviceAccount.annotations {} ServiceAccount 주석
serviceAccount.automountServiceAccountToken false 기본 ServiceAccount 액세스 토큰이 Pods에 마운트되어야 하는지 여부를 나타냅니다.
serviceAccount.create false ServiceAccount를 생성해야 하는지 여부를 나타냅니다.
serviceAccount.enabled false ServiceAccount를 사용할지 여부를 나타냅니다.
serviceAccount.name   ServiceAccount의 이름. 설정되지 않으면 전체 차트 이름이 사용됩니다.
securityContext.fsGroup 1000 Pod가 시작되어야 하는 그룹 ID
securityContext.fsGroupChangePolicy   볼륨의 소유권 및 권한 변경을 위한 정책 (Kubernetes 1.23 필요)
securityContext.runAsUser 1000 Pod가 시작되어야 하는 사용자 ID
securityContext.seccompProfile.type RuntimeDefault 사용할 Seccomp 프로필
containerSecurityContext   Gitaly 컨테이너가 시작되는 securityContext를 재정의합니다.
containerSecurityContext.runAsUser 1000 Gitaly 컨테이너가 시작되는 특정 보안 컨텍스트 사용자 ID를 재정의하도록 허용합니다.
containerSecurityContext.allowPrivilegeEscalation false Gitaly 컨테이너의 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지 여부를 제어합니다.
containerSecurityContext.runAsNonRoot true Gitaly 컨테이너가 비루트 사용자로 실행되는지의 여부를 제어합니다.
containerSecurityContext.capabilities.drop [ "ALL" ] Gitaly 컨테이너에 대한 Linux capabilities를 제거합니다.
tolerations [] Pod 할당을 위한 허용 라벨
affinity {} Pod 할당을 위한 Affinity 규칙
persistence.accessMode ReadWriteOnce Gitaly 지속성 액세스 모드
persistence.annotations   Gitaly 지속성 주석
persistence.enabled true Gitaly 지속성 활성화 플래그
persistance.labels   Gitaly 지속성 레이블
persistence.matchExpressions   바인딩을 위한 레이블 표현식 일치
persistence.matchLabels   바인딩을 위한 레이블-값 일치
persistence.size 50Gi Gitaly 지속성 볼륨 크기
persistence.storageClass   프로비저닝을 위한 storageClassName
persistence.subPath   Gitaly 지속성 볼륨 마운트 경로
priorityClassName   Gitaly StatefulSet priorityClassName
logging.level   로그 수준
logging.format json 로그 형식
logging.sentryDsn   Sentry DSN URL - Go 서버의 예외
logging.sentryEnvironment   로그에 사용할 Sentry 환경
shell.concurrency[]   각 RPC 엔드포인트의 동시성. rpcmaxPerRepo 키를 사용하여 지정됩니다.
packObjectsCache.enabled false Gitaly pack-objects 캐시 활성화
packObjectsCache.dir /home/git/repositories/+gitaly/PackObjectsCache 캐시 파일이 저장되는 디렉터리
packObjectsCache.max_age 5m 캐시 항목 수명
packObjectsCache.min_occurrences 1 캐시 항목을 생성하는 데 필요한 최소 카운트
git.catFileCacheSize   Git cat-file 프로세스에서 사용하는 캐시 크기
git.config[] [] Gitaly가 Git 명령을 실행할 때 설정해야 하는 Git 구성
prometheus.grpcLatencyBuckets   Gitaly에서 기록할 GRPC 메서드 호출의 지연 시간에 해당하는 버킷. 배열의 문자열 형식 (예: "[1.0, 1.5, 2.0]")이 입력으로 필요합니다.
statefulset.strategy {} StatefulSet의 업데이트 전략을 구성할 수 있도록 해줍니다.
statefulset.livenessProbe.initialDelaySeconds 0 생존성 프로브가 시작되기 전에 지연됩니다. startupProbe가 활성화되면 이 값은 0으로 설정됩니다.
statefulset.livenessProbe.periodSeconds 10 생존성 프로브를 수행하는 빈도
statefulset.livenessProbe.timeoutSeconds 3 생존성 프로브 타임아웃 시간
statefulset.livenessProbe.successThreshold 1 생존성 프로브가 실패한 후 성공으로 간주되기 위한 최소 연속 성공 횟수
statefulset.livenessProbe.failureThreshold 3 생존성 프로브가 성공한 후 실패한 것으로 간주되기 위한 최소 연속 실패 횟수
statefulset.readinessProbe.initialDelaySeconds 0 준비 상태 프로브가 시작되기 전에 지연됩니다. startupProbe가 활성화되면 이 값은 0으로 설정됩니다.
statefulset.readinessProbe.periodSeconds 5 준비 상태 프로브를 수행하는 빈도
statefulset.readinessProbe.timeoutSeconds 3 준비 상태 프로브 타임아웃 시간
statefulset.readinessProbe.successThreshold 1 준비 상태 프로브가 실패한 후 성공으로 간주되기 위한 최소 연속 성공 횟수
statefulset.readinessProbe.failureThreshold 3 준비 상태 프로브가 성공한 후 실패한 것으로 간주되기 위한 최소 연속 실패 횟수
statefulset.startupProbe.enabled true 시작 프로브가 활성화되어 있는지 여부.
statefulset.startupProbe.initialDelaySeconds 1 시작 프로브가 시작되기 전에 지연됩니다.
statefulset.startupProbe.periodSeconds 1 시작 프로브를 수행하는 빈도
statefulset.startupProbe.timeoutSeconds 1 시작 프로브 타임아웃 시간
statefulset.startupProbe.successThreshold 1 시작 프로브가 실패한 후 성공으로 간주되기 위한 최소 연속 성공 횟수
statefulset.startupProbe.failureThreshold 60 시작 프로브가 성공한 후 실패한 것으로 간주되기 위한 최소 연속 실패 횟수
metrics.enabled false 메트릭 엔드포인트를 수집을 위해 사용해야 하는지 여부
metrics.port 9236 메트릭 엔드포인트 포트
metrics.path /metrics 메트릭 엔드포인트 경로
metrics.serviceMonitor.enabled false 메트릭 수집을 관리하기 위해 Prometheus Operator를 활성화하기 위해 ServiceMonitor를 생성해야 하는지 여부입니다. 활성화하면 prometheus.io 스크랩 주석이 제거됩니다.
metrics.serviceMonitor.additionalLabels {} ServiceMonitor에 추가할 추가 레이블
metrics.serviceMonitor.endpointConfig {} ServiceMonitor를 위한 추가 엔드포인트 구성
metrics.metricsPort   DEPRECATED metrics.port를 사용하세요.
gomemlimit.enabled true 이는 Gitaly 컨테이너에 대해 GOMEMLIMIT 환경 변수를 resources.limits.memory로 자동으로 설정합니다. 해당 제한이 설정된 경우 사용자 는 이를 false로 설정하고 GOMEMLIMITextraEnv에서 설정하여 값을 재정의할 수 있습니다. 이는 문서화된 형식 기준을 충족해야 합니다.
cgroups.enabled false Gitaly에는 내장된 cgroups 제어 기능이 있습니다. 구성되면 Gitaly는 Git 명령이 작동하는 저장소에 따라 Git 프로세스를 cgroup에 할당합니다. 이 매개변수는 저장소 cgroups를 활성화합니다. 활성화되면 cgroups v2만 지원됩니다.
cgroups.initContainer.image.repository registry.com/gitlab-org/build/cng/gitaly-init-cgroups Gitaly 이미지 저장소
cgroups.initContainer.image.tag master Gitaly 이미지 태그
cgroups.initContainer.image.pullPolicy IfNotPresent Gitaly 이미지 풀 정책
cgroups.mountpoint /etc/gitlab-secrets/gitaly-pod-cgroup 부모 cgroup 디렉토리가 마운트되는 위치.
cgroups.hierarchyRoot gitaly Gitaly의 그룹을 생성하는 부모 cgroup이며, Gitaly가 실행되는 사용자와 그룹이 소유해야 합니다.
cgroups.memoryBytes   Gitaly에서 생성하는 모든 Git 프로세스에 대해 집합적으로 부여되는 총 메모리 제한입니다. 0은 제한이 없음을 의미합니다.
cgroups.cpuShares   Gitaly에서 생성하는 모든 Git 프로세스에 대해 집합적으로 부여되는 CPU 제한입니다. 0은 제한이 없음을 의미합니다. 최대는 1024 shares이며, 이는 CPU의 100%를 나타냅니다.
cgroups.cpuQuotaUs   cgroups의 프로세스가 이 할당값을 초과할 경우 제한하는 데 사용됩니다. 우리는 100ms로 cpuQuotaUs를 설정하므로 1 코어는 100000입니다. 0은 제한이 없음을 의미합니다.
cgroups.repositories.count   cgroups 풀에서 cgroups의 수입니다. 새로운 Git 명령이 생성될 때마다 Gitaly는 이 cgroups 중 하나에 할당합니다. 순환 해싱 알고리즘이 Git 명령을 이 cgroups에 할당하므로 특정 저장소에 대한 Git 명령이 항상 동일한 cgroup에 할당됩니다.
cgroups.repositories.memoryBytes   저장소 cgroup에 포함된 모든 Git 프로세스에 부여되는 총 메모리 제한입니다. 0은 제한이 없음을 의미합니다. 이 값은 최고 수준 memoryBytes를 초과할 수 없습니다.
cgroups.repositories.cpuShares   저장소 cgroup에 포함된 모든 Git 프로세스에 부여되는 CPU 제한입니다. 0은 제한이 없음을 의미합니다. 최대는 1024 shares이며, 이는 CPU의 100%를 나타냅니다. 이 값은 최고 수준 cpuShares를 초과할 수 없습니다.
cgroups.repositories.cpuQuotaUs   저장소 cgroup에 포함된 모든 Git 프로세스에 부여되는 cpuQuotaUs입니다. Git 프로세스는 주어진 할당량을 초과해서 사용할 수 없습니다. 우리는 100ms로 cpuQuotaUs를 설정하므로 1 코어는 100000입니다. 0은 제한이 없음을 의미합니다.
cgroups.repositories.maxCgroupsPerRepo 1 Git 프로세스가 특정 저장소를 대상으로 하는 경우 분산될 수 있는 저장소 cgroups의 수입니다. 이를 통해 저장소 cgroups에 대해 보다 보수적인 CPU 및 메모리 제한을 구성할 수 있지만 여전히 급증하는 작업을 허용합니다. 예를 들어, maxCgroupsPerRepo2이고 memoryBytes 제한이 10GB인 경우, 특정 저장소에 대한 독립적인 Git 작업은 최대 20GB의 메모리를 소비할 수 있습니다.
gracefulRestartTimeout 25 Gitaly 종료 유예 기간으로, 비행 중인 요청이 완료되기를 기다리는 시간(초). Pod terminationGracePeriodSeconds는 이 값 + 5초로 설정됩니다.

차트 구성 예시

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은 다른 데이터 소스에서 모든 컨테이너에 추가 환경 변수를 노출할 수 있도록 합니다.

아래는 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
      # 선택: 불리언
  CONFIG_STRING:
    configMapKeyRef:
      name: useful-config
      key: some-string
      # 선택: 불리언

image.pullSecrets

pullSecrets는 private registry에 인증하여 팟을 위한 이미지를 가져올 수 있도록 합니다.

private registries 및 인증 방법에 대한 추가 세부정보는 Kubernetes 문서에서 확인할 수 있습니다.

아래는 pullSecrets의 사용 예시입니다:

image:
  repository: my.gitaly.repository
  tag: latest
  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"

affinity

자세한 내용은 affinity를 참조하세요.

annotations

annotations는 Gitaly 팟에 주석을 추가할 수 있도록 합니다.

아래는 annotations의 사용 예시입니다:

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

priorityClassName

priorityClassName은 Gitaly 팟에 PriorityClass를 할당할 수 있도록 합니다.

아래는 priorityClassName의 사용 예시입니다:

priorityClassName: persistence-enabled

git.config

git.config는 Gitaly에서 생성된 모든 Git 명령어에 구성을 추가할 수 있게 해줍니다. 아래와 같이 key / value 쌍으로 구성된 설정을 git-config(1)에 문서화된 대로 허용합니다.

git:
  config:
    - key: "pack.threads"
      value: 4
    - key: "fsck.missingSpaceBeforeDate"
      value: ignore

cgroups

소모를 방지하기 위해, Gitaly는 작업 중인 저장소에 따라 Git 프로세스를 cgroup에 할당하기 위해 cgroups를 사용합니다. 각 cgroup은 메모리 및 CPU 한계를 가지고 있어 시스템 안정성을 보장하고 자원 포화 상태를 방지합니다.

Gitaly가 시작되기 전에 실행되는 initContainerroot로 실행되어야 합니다. 이 컨테이너는 Gitaly가 cgroups를 관리할 수 있도록 권한을 설정합니다. 따라서, /sys/fs/cgroup에 쓰기 액세스 권한을 가지기 위해 파일 시스템에 볼륨을 마운트합니다.

과다 구독의 예

cgroups:
  enabled: true
  # 모든 저장소 cgroups에 대한 총 한계
  memoryBytes: 64424509440 # 60GiB
  cpuShares: 1024
  cpuQuotaUs: 1200000 # 12 cores
  # 저장소별 한계, 1000 저장소 cgroups
  repositories:
    count: 1000
    memoryBytes: 32212254720 # 30GiB
    cpuShares: 512
    cpuQuotaUs: 400000 # 4 cores

External Services

이 차트는 Workhorse 서비스에 첨부되어야 합니다.

Workhorse

workhorse:
  host: workhorse.example.com
  serviceName: webservice
  port: 8181
Name Type Default Description
host String   Workhorse 서버의 호스트명입니다. serviceName 대신 생략할 수 있습니다.
port Integer 8181 Workhorse 서버에 연결하는 포트입니다.
serviceName String webservice Workhorse 서버를 운영하는 service의 이름입니다. 이 값이 존재하고 host가 없으면, 차트는 host 값을 위해 서비스의 호스트 이름(및 현재 .Release.Name)을 템플릿화합니다. 이는 Workhorse를 전체 GitLab 차트의 일부로 사용할 때 편리합니다.

Chart settings

다음 값은 Gitaly Pods를 구성하는 데 사용됩니다.

note
Gitaly는 Workhorse 및 Sidekiq 서비스와 인증하기 위해 Auth Token을 사용합니다. Auth Token 비밀 및 키는 global.gitaly.authToken 값에서 가져옵니다. 또한, Gitaly 컨테이너는 GitLab Shell의 사본을 가지고 있으며, 일부 구성을 설정할 수 있습니다. Shell authToken은 global.shell.authToken 값에서 가져옵니다.

Git Repository Persistence

이 차트는 PersistentVolumeClaim을 프로비저닝하고 Git 저장소 데이터를 위한 해당 지속 볼륨을 마운트합니다. 이를 위해 Kubernetes 클러스터 내에 물리적 저장소가 필요합니다. 대신 emptyDir를 사용하고 싶다면 PersistentVolumeClaim을 비활성화하십시오: persistence.enabled: false.

note
Gitaly의 지속성 설정은 모든 Gitaly 포드에 대해 유효해야 하는 volumeClaimTemplate에서 사용됩니다. 특정 단일 볼륨을 참조하기 위한 설정(volumeName 등)을 포함하면 안 됩니다. 특정 볼륨을 참조하고 싶다면 PersistentVolumeClaim을 수동으로 생성해야 합니다.
note
배포한 후에는 이러한 설정을 변경할 수 없습니다. StatefulSet에서 VolumeClaimTemplate은 변경할 수 없습니다.
persistence:
  enabled: true
  storageClass: standard
  accessMode: ReadWriteOnce
  size: 50Gi
  matchLabels: {}
  matchExpressions: []
  subPath: "data"
  annotations: {}
Name Type Default Description
accessMode String ReadWriteOnce PersistentVolumeClaim에서 요청된 accessMode를 설정합니다. 자세한 내용은 Kubernetes Access Modes Documentation를 참조하세요.
enabled Boolean true 저장소 데이터에 PersistentVolumeClaims를 사용할지 여부를 설정합니다. false이면 emptyDir 볼륨이 사용됩니다.
matchExpressions Array   볼륨을 바인딩할 때 일치시킬 레이블 조건 객체 배열을 허용합니다. 이는 PersistentVolumeClaimselector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요.
matchLabels Map   바인딩할 볼륨을 선택할 때 일치시킬 레이블 이름 및 레이블 값의 맵을 허용합니다. 이는 PersistentVolumeClaimselector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요.
size String 50Gi 데이터 지속성을 위해 요청할 최소 볼륨 크기를 설정합니다.
storageClass String   동적 프로비저닝을 위한 Volume Claim에 storageClassName을 설정합니다. 비어 있거나 null로 설정하면 기본 프로비저너가 사용됩니다. 하이픈으로 설정하면 동적 프로비저닝이 비활성화됩니다.
subPath String   볼륨의 루트 대신 마운트할 볼륨 내 경로를 설정합니다. subPath가 비어 있으면 루트가 사용됩니다.
annotations Map   동적 프로비저닝을 위한 Volume Claim에 주석을 설정합니다. 자세한 내용은 Kubernetes Annotations Documentation를 참조하세요.

Gitaly의 TLS 실행

참고: 이 섹션은 Helm 차트를 사용하여 클러스터 내에서 Gitaly를 실행하는 것과 관련이 있습니다. 외부 Gitaly 인스턴스를 사용하고 이를 통해 TLS로 통신하려는 경우 외부 Gitaly 문서를 참조하세요.

Gitaly는 다른 구성 요소와 TLS를 통해 통신하는 것을 지원합니다. 이는 global.gitaly.tls.enabledglobal.gitaly.tls.secretName 설정에 의해 제어됩니다.

TLS를 통해 Gitaly를 실행하는 단계는 다음과 같습니다:

  1. Helm 차트는 Gitaly와 TLS를 통해 통신하기 위해 제공할 인증서를 기대합니다. 이 인증서는 존재하는 모든 Gitaly 노드에 적용되어야 합니다. 따라서 이러한 Gitaly 노드 각각의 모든 호스트 이름은 인증서에 Subject Alternate Name(SAN)으로 추가되어야 합니다.

    사용해야 할 호스트 이름을 알기 위해서는 Toolbox 포드의 /srv/gitlab/config/gitlab.yml 파일을 확인하고, 그 안의 repositories.storages 키 아래에 지정된 다양한 gitaly_address 필드를 확인하세요.

    kubectl exec -it <Toolbox pod> -- grep gitaly_address /srv/gitlab/config/gitlab.yml
    

참고: 내부 Gitaly 포드에 대한 사용자 서명 인증서를 생성하기 위한 기본 스크립트는 이 리포지토리에서 찾을 수 있습니다. 사용자는 적절한 SAN 속성으로 인증서를 생성하기 위해 해당 스크립트를 참조하거나 사용할 수 있습니다.

  1. 생성된 인증서를 사용하여 k8s TLS 비밀을 생성합니다.

    kubectl create secret tls gitaly-server-tls --cert=gitaly.crt --key=gitaly.key
    
  2. --set global.gitaly.tls.enabled=true를 전달하여 Helm 차트를 다시 배포합니다.

전역 서버 후크

Gitaly StatefulSet은 전역 서버 후크를 지원합니다. 후크 스크립트는 Gitaly 포드에서 실행되므로 Gitaly 컨테이너에서 사용할 수 있는 도구로 제한됩니다.

후크는 ConfigMaps를 사용하여 채워지며, 적절한 값으로 설정하여 사용할 수 있습니다:

  1. global.gitaly.hooks.preReceive.configmap
  2. global.gitaly.hooks.postReceive.configmap
  3. global.gitaly.hooks.update.configmap

ConfigMap을 채우기 위해 kubectl을 스크립트 디렉토리로 지정할 수 있습니다:

kubectl create configmap MAP_NAME --from-file /PATH/TO/SCRIPT/DIR

GitLab에서 생성된 커밋의 GPG 서명

Gitaly는 GitLab UI를 통해 생성된 모든 커밋을 GPG로 서명할 수 있는 기능이 있습니다. 예를 들어, WebIDE와 GitLab에 의해 생성된 커밋, 병합 커밋 및 스쿼시도 포함됩니다.

  1. GPG 개인 키를 사용하여 k8s 비밀을 생성합니다.

    kubectl create secret generic gitaly-gpg-signing-key --from-file=signing_key=/path/to/gpg_signing_key.gpg
    
  2. values.yaml에서 GPG 서명을 활성화합니다.

    gitlab:
      gitaly:
        gpgSigning:
          enabled: true
          secret: gitaly-gpg-signing-key
          key: signing_key
    

서버 측 백업

차트는 Gitaly 서버 측 백업을 지원합니다.

사용하려면:

  1. 백업을 저장할 버킷을 생성합니다.

  2. 객체 저장소 자격 증명 및 저장소 URL을 구성합니다.

    gitlab:
      gitaly:
        extraEnvFrom:
           # 예상되는 환경 변수에 기존 객체 저장소 비밀을 마운트합니다.
           AWS_ACCESS_KEY_ID:
             secretKeyRef:
               name: <Rails 객체 저장소 비밀>
               key: aws_access_key_id
           AWS_SECRET_ACCESS_KEY:
             secretKeyRef:
               name: <Rails 객체 저장소 비밀>
               key: aws_secret_access_key
        backup:
          # 이것은 Gitaly 서버 측 백업을 위한 연결 문자열입니다.
          goCloudUrl: <객체 저장소 연결 URL>
    

    객체 저장소 백엔드에 대한 예상 환경 변수 및 저장소 URL 형식은 Gitaly 문서를 참조하세요.

  3. backup-utility로 서버 측 백업 활성화.