Praefect 차트 사용하기
Praefect 차트는 Helm 차트로 배포된 GitLab 설치 내에서 Gitaly 클러스터를 관리하는 데 사용됩니다.
알려진 제한 사항 및 문제점
- 데이터베이스는 매뉴얼으로 생성해야 합니다.
- 클러스터 크기는 고정됩니다: Gitaly 클러스터는 현재 오토스케일링을 지원하지 않습니다.
- 클러스터 내의 Praefect 인스턴스를 사용하여 클러스터 외부의 Gitaly 인스턴스를 관리하는 것은 지원되지 않습니다.
요구 사항
이 차트는 Gitaly 차트를 사용합니다. 이 차트에서 생성된 인스턴스를 구성하는 데 global.gitaly
의 설정이 사용됩니다. 이러한 설정의 설명은 Gitaly 차트 문서에서 찾을 수 있습니다.
중요 사항: global.gitaly.tls
는 global.praefect.tls
와 독립적입니다. 따라서 이들은 별도로 구성됩니다.
기본적으로이 차트는 3개의 Gitaly 레플리카를 생성합니다.
구성
이 차트는 기본적으로 비활성화되어 있습니다. 차트 배포의 일환으로 활성화하려면 global.praefect.enabled=true
를 설정하십시오.
레플리카
배포할 기본적인 레플리카 수는 3입니다. 원하는 레플리카 수로 변경하려면 global.praefect.virtualStorages[].gitalyReplicas
를 설정하십시오. 예를 들면:
global:
praefect:
enabled: true
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
여러 가상 스토리지
여러 가상 스토리지를 구성할 수 있습니다(Gitaly 클러스터 문서 참조). 예를 들면:
global:
praefect:
enabled: true
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
- name: vs2
gitalyReplicas: 5
maxUnavailable: 2
이렇게 하면 Gitaly를 위한 두 세트의 리소스가 생성됩니다. 이는 두 개의 Gitaly StatefulSet을 포함합니다(가상 스토리지 당 하나씩).
그런 다음 관리자는 새로운 리포지터리가 저장되는 위치를 구성할 수 있습니다.
지속성
가상 스토리지별로 지속성 구성이 가능합니다.
global:
praefect:
enabled: true
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
persistence:
enabled: true
size: 50Gi
accessMode: ReadWriteOnce
storageClass: storageclass1
- name: vs2
gitalyReplicas: 5
maxUnavailable: 2
persistence:
enabled: true
size: 100Gi
accessMode: ReadWriteOnce
storageClass: storageclass2
defaultReplicationFactor
defaultReplicationFactor
를 각 가상 스토리지에 구성할 수 있습니다(복제 요소 구성 문서 참조).
global:
praefect:
enabled: true
virtualStorages:
- name: default
gitalyReplicas: 5
maxUnavailable: 2
defaultReplicationFactor: 3
- name: secondary
gitalyReplicas: 4
maxUnavailable: 1
defaultReplicationFactor: 2
Praefect로 마이그레이션
독립 Gitaly 인스턴스에서 Praefect 설정으로 마이그레이션할 때 global.praefect.replaceInternalGitaly
를 false
로 설정할 수 있습니다.
이렇게 하면 기존의 Gitaly 인스턴스가 보존되고 새로운 Praefect에서 관리되는 Gitaly 인스턴스가 생성됩니다.
global:
praefect:
enabled: true
replaceInternalGitaly: false
virtualStorages:
- name: virtualStorage2
gitalyReplicas: 5
maxUnavailable: 2
default
로 명명할 수 없습니다. 이는 항상 default
로 명명된 가상 스토리지가 있어야 하기 때문입니다.
따라서 이름이 기존 Praefect 구성에 이미 사용 중입니다.[:::부터:::EndTabs]
마지막으로, 리포지터리 저장 경로 문서를 참조하여 새 리포지터리가 저장되는 위치를 구성하세요.
데이터베이스 생성
Praefect는 자체 데이터베이스를 사용하여 상태를 추적합니다. 이는 Praefect가 정상적으로 작동하려면 매뉴얼으로 생성해야 합니다.
-
데이터베이스 인스턴스에 로그인합니다:
kubectl exec -it $(kubectl get pods -l app.kubernetes.io/name=postgresql -o custom-columns=NAME:.metadata.name --no-headers) -- bash
PGPASSWORD=$(echo $POSTGRES_POSTGRES_PASSWORD) psql -U postgres -d template1
-
데이터베이스 사용자를 생성합니다:
CREATE ROLE praefect WITH LOGIN;
-
데이터베이스 사용자 비밀번호를 설정합니다.
기본적으로
shared-secrets
작업은 비밀번호를 생성합니다.-
비밀번호를 가져옵니다:
kubectl get secret RELEASE_NAME-praefect-dbsecret -o jsonpath="{.data.secret}" | base64 --decode
-
psql
프롬프트에서 비밀번호를 설정합니다:\password praefect
-
-
데이터베이스를 생성합니다:
CREATE DATABASE praefect WITH OWNER praefect;
TLS를 통해 Praefect 실행하기
Praefect는 클라이언트 및 Gitaly 노드와의 통신을 TLS로 지원합니다. 이는 global.praefect.tls.enabled
와 global.praefect.tls.secretName
설정으로 제어됩니다. TLS를 통해 Praefect를 실행하려면 다음 단계를 따르세요:
-
Helm 차트는 Praefect와의 TLS 통신을 위해 인증서가 제공되기를 기대합니다. 이 인증서는 모든 존재하는 Praefect 노드에 적용되어야 합니다. 따라서 각 노드의 모든 호스트 이름은 인증서의 대체 이름(SAN)으로 추가되어야 합니다. 또는 와일드카드를 사용할 수 있습니다.
사용할 호스트 이름을 알아보려면 Toolbox Pod의
/srv/gitlab/config/gitlab.yml
파일을 확인하고 그 안에 지정된repositories.storages
키 아래의 다양한gitaly_address
필드를 확인하세요.kubectl exec -it <Toolbox Pod> -- grep gitaly_address /srv/gitlab/config/gitlab.yml
-
생성된 인증서를 사용하여 TLS Secret를 생성합니다.
kubectl create secret tls <secret name> --cert=praefect.crt --key=praefect.key
-
--set global.praefect.tls.enabled=true
를 전달하여 Helm 차트를 다시 배포합니다.
Gitaly를 TLS로 실행할 때는 각 가상 리포지터리에 대해 시크릿 이름을 제공해야 합니다.
global:
gitaly:
tls:
enabled: true
praefect:
enabled: true
tls:
enabled: true
secretName: praefect-tls
virtualStorages:
- name: default
gitalyReplicas: 4
maxUnavailable: 1
tlsSecretName: default-tls
- name: vs2
gitalyReplicas: 5
maxUnavailable: 2
tlsSecretName: vs2-tls
설치 명령줄 옵션
아래 표는 helm install
명령에 --set
플래그를 사용하여 제공할 수 있는 모든 가능한 차트 구성을 포함하고 있습니다.
매개변수 | 기본값 | 설명 |
---|---|---|
common.labels | {}
| 이 차트에 의해 생성된 모든 객체에 적용되는 보조 라벨들. |
failover.enabled | true | Praefect가 노드 장애 시 장애 조치를 수행해야 하는지 여부 |
failover.readonlyAfter | false | 장애 조치 후 노드가 읽기 전용 모드여야 하는지 여부 |
autoMigrate | true | 시작 시 자동으로 마이그레이션 실행 |
image.repository | registry.gitlab.com/gitlab-org/build/cng/gitaly
| 사용할 기본 이미지 리포지터리. Praefect는 Gitaly 이미지의 일부로 묶여 있습니다. |
podLabels | {}
| 보조 Pod 라벨. 셀렉터에는 사용되지 않을 것입니다. |
ntpHost | pool.ntp.org
| Praefect가 현재 시간을 요청할 NTP 서버를 구성합니다. |
service.name | praefect
| 생성할 서비스의 이름 |
service.type | ClusterIP | 생성할 서비스 유형 |
service.internalPort | 8075 | Praefect pod이 수신할 내부 포트 번호 |
service.externalPort | 8075 | Praefect 서비스가 클러스터에서 노출해야 하는 포트 번호 |
init.resources | ||
init.image | ||
extraEnvFrom | 노출할 다른 데이터 소스의 추가 환경 변수 디렉터리 | |
logging.level | 로그 레벨 | |
logging.format | json
| 로그 형식 |
logging.sentryDsn | Go 서버에서 예외 - Sentry DSN URL | |
logging.sentryEnvironment | 로깅에 사용할 Sentry 환경 | |
metrics.enabled
| true
| 스크래핑할 메트릭 엔드포인트가 제공되어야 하는지 여부 |
metrics.port
| 9236
| 메트릭 엔드포인트 포트 번호 |
metrics.separate_database_metrics
| true
| true인 경우 메트릭 스크래핑에는 데이터베이스 쿼리가 수행되지 않으며, false로 설정하면 성능 문제를 일으킬 수 있습니다 |
metrics.path
| /metrics
| 메트릭 엔드포인트 경로 |
metrics.serviceMonitor.enabled
| false
| 프로메테우스 오퍼레이터가 메트릭 스크래핑을 관리하도록 ServiceMonitor를 생성해야 하는지 여부, 이 설정을 활성화하면 prometheus.io 스크레이프 어노테이션을 제거합니다
|
metrics.serviceMonitor.additionalLabels
| {}
| ServiceMonitor에 추가할 라벨 |
metrics.serviceMonitor.endpointConfig
| {}
| ServiceMonitor용 추가 엔드포인트 구성 |
securityContext.runAsUser | 1000 | |
securityContext.fsGroup | 1000 | |
securityContext.fsGroupChangePolicy | 볼륨의 소유권 및 권한을 변경하는 데 사용되는 정책(Kubernetes 1.23 이상 필요) | |
serviceLabels | {}
| 보조 서비스 라벨 |
statefulset.strategy | {}
| statefulset이 사용하는 업데이트 전략을 구성할 수 있게 합니다. |