GitLab-Gitaly 차트 사용하기
gitaly
서브 차트는 Gitaly 서버의 조정 가능한 배포를 제공합니다.
요구 사항
이 차트는 Workhorse 서비스에 대한 액세스에 따라 다릅니다.
완전한 GitLab 차트의 일부이거나 이 차트가 배포되는 Kubernetes 클러스터에서 접근할 수 있는 외부 서비스로 제공됩니다.
설계 선택
이 차트에서 사용되는 Gitaly 컨테이너는 Gitaly로 아직 포팅되지 않은 Git 저장소에서 작업을 수행하기 위해 GitLab Shell 코드베이스를 포함합니다.
Gitaly 컨테이너에는 GitLab Shell 컨테이너의 복사본이 포함되어 있으며, 그 결과 이 차트 내에서 GitLab Shell을 구성해야 합니다.
구성
gitaly
차트는 두 부분으로 구성됩니다: 외부 서비스와 차트 설정.
Gitaly는 기본적으로 GitLab 차트를 배포할 때 구성 요소로 배포됩니다.
Gitaly를 별도로 배포하는 경우, global.gitaly.enabled
를 false
로 설정해야 하며, 외부 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 엔드포인트의 동시성. rpc 와 maxPerRepo 키를 사용하여 지정됩니다. |
|
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로 설정하고 GOMEMLIMIT 을 extraEnv 에서 설정하여 값을 재정의할 수 있습니다. 이는 문서화된 형식 기준을 충족해야 합니다. |
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 및 메모리 제한을 구성할 수 있지만 여전히 급증하는 작업을 허용합니다. 예를 들어, maxCgroupsPerRepo 가 2 이고 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가 시작되기 전에 실행되는 initContainer
는 root로 실행되어야 합니다. 이 컨테이너는 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를 구성하는 데 사용됩니다.
global.gitaly.authToken
값에서 가져옵니다. 또한, Gitaly 컨테이너는 GitLab Shell의 사본을 가지고 있으며, 일부 구성을 설정할 수 있습니다. Shell authToken은 global.shell.authToken
값에서 가져옵니다.Git Repository Persistence
이 차트는 PersistentVolumeClaim을 프로비저닝하고 Git 저장소 데이터를 위한 해당 지속 볼륨을 마운트합니다. 이를 위해 Kubernetes 클러스터 내에 물리적 저장소가 필요합니다. 대신 emptyDir를 사용하고 싶다면 PersistentVolumeClaim을 비활성화하십시오: persistence.enabled: false
.
volumeName
등)을 포함하면 안 됩니다. 특정 볼륨을 참조하고 싶다면 PersistentVolumeClaim을 수동으로 생성해야 합니다.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 | 볼륨을 바인딩할 때 일치시킬 레이블 조건 객체 배열을 허용합니다. 이는 PersistentVolumeClaim 의 selector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요. |
|
matchLabels |
Map | 바인딩할 볼륨을 선택할 때 일치시킬 레이블 이름 및 레이블 값의 맵을 허용합니다. 이는 PersistentVolumeClaim 의 selector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요. |
|
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.enabled
및 global.gitaly.tls.secretName
설정에 의해 제어됩니다.
TLS를 통해 Gitaly를 실행하는 단계는 다음과 같습니다:
-
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 속성으로 인증서를 생성하기 위해 해당 스크립트를 참조하거나 사용할 수 있습니다.
-
생성된 인증서를 사용하여 k8s TLS 비밀을 생성합니다.
kubectl create secret tls gitaly-server-tls --cert=gitaly.crt --key=gitaly.key
-
--set global.gitaly.tls.enabled=true
를 전달하여 Helm 차트를 다시 배포합니다.
전역 서버 후크
Gitaly StatefulSet은 전역 서버 후크를 지원합니다. 후크 스크립트는 Gitaly 포드에서 실행되므로 Gitaly 컨테이너에서 사용할 수 있는 도구로 제한됩니다.
후크는 ConfigMaps를 사용하여 채워지며, 적절한 값으로 설정하여 사용할 수 있습니다:
global.gitaly.hooks.preReceive.configmap
global.gitaly.hooks.postReceive.configmap
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에 의해 생성된 커밋, 병합 커밋 및 스쿼시도 포함됩니다.
-
GPG 개인 키를 사용하여 k8s 비밀을 생성합니다.
kubectl create secret generic gitaly-gpg-signing-key --from-file=signing_key=/path/to/gpg_signing_key.gpg
-
values.yaml
에서 GPG 서명을 활성화합니다.gitlab: gitaly: gpgSigning: enabled: true secret: gitaly-gpg-signing-key key: signing_key
서버 측 백업
차트는 Gitaly 서버 측 백업을 지원합니다.
사용하려면:
-
백업을 저장할 버킷을 생성합니다.
-
객체 저장소 자격 증명 및 저장소 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 문서를 참조하세요.