도구함
Toolbox Pod는 GitLab 응용 프로그램 내에서 주기적인 housekeeping 작업을 실행하는 데 사용됩니다. 이러한 작업에는 백업, Sidekiq 유지 관리 및 Rake 작업이 포함됩니다.
구성
다음 구성 설정은 Toolbox 차트에서 제공하는 기본 설정입니다:
gitlab:
## doc/charts/gitlab/toolbox
toolbox:
enabled: true
replicas: 1
backups:
cron:
enabled: false
concurrencyPolicy: Replace
failedJobsHistoryLimit: 1
schedule: "0 1 * * *"
successfulJobsHistoryLimit: 3
suspend: false
backoffLimit: 6
safeToEvict: false
restartPolicy: "OnFailure"
resources:
requests:
cpu: 50m
memory: 350M
persistence:
enabled: false
accessMode: ReadWriteOnce
useGenericEphemeralVolume: false
size: 10Gi
objectStorage:
backend: s3
config: {}
persistence:
enabled: false
accessMode: 'ReadWriteOnce'
size: '10Gi'
resources:
requests:
cpu: '50m'
memory: '350M'
securityContext:
fsGroup: '1000'
runAsUser: '1000'
runAsGroup: '1000'
containerSecurityContext:
runAsUser: '1000'
affinity: {}
Parameter | Description | Default |
---|---|---|
affinity |
Affinity rules for pod assignment | {} |
annotations |
Toolbox Pods 및 Jobs에 추가할 주석 | {} |
common.labels |
이 차트에 의해 생성된 모든 객체에 적용되는 보조 레이블. | {} |
antiAffinityLabels.matchLabels |
반기능 설정 옵션을 위한 레이블 | |
backups.cron.activeDeadlineSeconds |
백업 CronJob 활성 마감 초 (null일 경우, 활성 마감이 적용되지 않음) | null |
backups.cron.ttlSecondsAfterFinished |
백업 CronJob 작업 완료 후 생존 시간 (null일 경우, 생존 시간이 적용되지 않음) | null |
backups.cron.safeToEvict |
자동 스케일링 안전 제거 주석 | false |
backups.cron.backoffLimit |
백업 CronJob 백오프 한도 | 6 |
backups.cron.concurrencyPolicy |
Kubernetes 작업 동시성 정책 | Replace |
backups.cron.enabled |
백업 CronJob 활성화 플래그 | false |
backups.cron.extraArgs |
백업 유틸리티에 전달할 인수 문자열 | |
backups.cron.failedJobsHistoryLimit |
이력에서 실패한 백업 작업 목록 수 | 1 |
backups.cron.persistence.accessMode |
백업 cron 지속성 접근 모드 | ReadWriteOnce |
backups.cron.persistence.enabled |
백업 cron 지속성을 활성화 플래그 | false |
backups.cron.persistence.matchExpressions |
바인딩할 레이블 표현식 일치 | |
backups.cron.persistence.matchLabels |
바인딩할 레이블 값 일치 | |
backups.cron.persistence.useGenericEphemeralVolume |
제네릭 일시적 볼륨 사용 | false |
backups.cron.persistence.size |
백업 cron 지속성 볼륨 크기 | 10Gi |
backups.cron.persistence.storageClass |
프로비저닝을 위한 StorageClass 이름 | |
backups.cron.persistence.subPath |
백업 cron 지속성 볼륨 마운트 경로 | |
backups.cron.persistence.volumeName |
기존 지속 볼륨 이름 | |
backups.cron.resources.requests.cpu |
백업 cron 최소 필요 CPU | 50m |
backups.cron.resources.requests.memory |
백업 cron 최소 필요 메모리 | 350M |
backups.cron.restartPolicy |
백업 cron 재시작 정책 (Never 또는 OnFailure ) |
OnFailure |
backups.cron.schedule |
Cron 스타일 스케줄 문자열 | 0 1 * * * |
backups.cron.startingDeadlineSeconds |
백업 cron 작업 시작 마감, 초 (null일 경우, 시작 마감이 적용되지 않음) | null |
backups.cron.successfulJobsHistoryLimit |
이력에서 성공한 백업 작업 목록 수 | 3 |
backups.cron.suspend |
백업 cron 작업이 일시 중지됨 | false |
backups.cron.timeZone |
백업 스케줄의 시간대. 자세한 내용은 Kubernetes 문서를 참조하세요. 지정하지 않으면 클러스터 시간대를 사용합니다. | ”” |
backups.cron.tolerations |
백업 cron 작업에 추가할 허용 사항 | ”” |
backups.cron.nodeSelector |
백업 cron 작업 노드 선택 | ”” |
backups.objectStorage.backend |
사용할 객체 저장소 공급자 (s3 , gcs 또는 azure ) |
s3 |
backups.objectStorage.config.gcpProject |
백엔드가 gcs 인 경우 사용할 GCP 프로젝트 |
”” |
backups.objectStorage.config.key |
비밀 속에 있는 자격 증명을 포함하는 키 | ”” |
backups.objectStorage.config.secret |
객체 저장소 자격 증명 비밀 | ”” |
common.labels |
이 차트에 의해 생성된 모든 객체에 적용되는 보조 레이블. | {} |
deployment.strategy |
배포에 사용되는 업데이트 전략을 구성할 수 있습니다. | { type : Recreate } |
enabled |
Toolbox 활성화 플래그 | true |
extra |
추가 gitlab.yml 구성용 YAML 블록 |
{} |
image.pullPolicy |
Toolbox 이미지 풀 정책 | IfNotPresent |
image.pullSecrets |
Toolbox 이미지 풀 비밀 | |
image.repository |
Toolbox 이미지 리포지토리 | registry.gitlab.com/gitlab-org/build/cng/gitlab-toolbox-ee |
image.tag |
Toolbox 이미지 태그 | master |
init.image.repository |
Toolbox init 이미지 리포지토리 | |
init.image.tag |
Toolbox init 이미지 태그 | |
init.resources |
Toolbox init 컨테이너 리소스 요구 사항 | { requests : { cpu : 50m }} |
init.containerSecurityContext |
initContainer 특정 securityContext | |
init.containerSecurityContext.allowPrivilegeEscalation |
initContainer 특정: 프로세스가 부모 프로세스보다 더 높은 권한을 얻을 수 있는지 제어 | false |
init.containerSecurityContext.runAsUser |
initContainer 특정: 컨테이너를 시작할 사용자 ID | 1000 |
init.containerSecurityContext.allowPrivilegeEscalation |
initContainer 특정: 프로세스가 부모 프로세스보다 더 높은 권한을 얻을 수 있는지 제어 | false |
init.containerSecurityContext.runAsNonRoot |
initContainer 특정: 컨테이너가 비 루트 사용자로 실행되는지 제어 | true |
init.containerSecurityContext.capabilities.drop |
initContainer 특정: 컨테이너에 대한 리눅스 기능 제거 | [ "ALL" ] |
nodeSelector |
Toolbox 및 백업 작업 노드 선택 | |
persistence.accessMode |
Toolbox 지속성 접근 모드 | ReadWriteOnce |
persistence.enabled |
Toolbox 지속성 활성화 플래그 | false |
persistence.matchExpressions |
바인딩할 레이블 표현식 일치 | |
persistence.matchLabels |
바인딩할 레이블 값 일치 | |
persistence.size |
Toolbox 지속성 볼륨 크기 | 10Gi |
persistence.storageClass |
프로비저닝을 위한 StorageClass 이름 | |
persistence.subPath |
Toolbox 지속성 볼륨 마운트 경로 | |
persistence.volumeName |
기존 PersistentVolume 이름 | |
podLabels |
Toolbox Pods를 실행하기 위한 레이블 | {} |
priorityClassName |
우선 순위 클래스이 Pods에 할당됩니다. | |
replicas |
실행할 Toolbox Pods 수 | 1 |
resources.requests |
Toolbox 최소 요청 리소스 | { cpu : 50m , memory : 350M
|
securityContext.fsGroup |
Pod가 시작되어야 하는 파일 시스템 그룹 ID | 1000 |
securityContext.runAsUser |
Pod가 시작되어야 하는 사용자 ID | 1000 |
securityContext.runAsGroup |
Pod가 시작되어야 하는 그룹 ID | 1000 |
securityContext.fsGroupChangePolicy |
볼륨의 소유권 및 권한을 변경하기 위한 정책 (Kubernetes 1.23 필요) | |
securityContext.seccompProfile.type |
사용할 Seccomp 프로파일 | RuntimeDefault |
containerSecurityContext |
컨테이너가 시작되는 securityContext를 재정의합니다. | |
containerSecurityContext.runAsUser |
컨테이너가 시작되는 특정 보안 컨텍스트를 재정의할 수 있습니다. | 1000 |
containerSecurityContext.allowPrivilegeEscalation |
컨테이너의 프로세스가 부모 프로세스보다 더 높은 권한을 가질 수 있는지 제어 | false |
containerSecurityContext.runAsNonRoot |
컨테이너가 비 루트 사용자로 실행되는지 제어 | true |
containerSecurityContext.capabilities.drop |
Gitaly 컨테이너에 대한 리눅스 기능 제거 | [ "ALL" ] |
serviceAccount.annotations |
ServiceAccount에 대한 주석 | {} |
serviceAccount.automountServiceAccountToken |
기본 ServiceAccount 접근 토큰이 Pods에 마운트되어야 하는지 여부를 나타냅니다. | false |
serviceAccount.enabled |
ServiceAccount 사용 여부를 나타냅니다. | false |
serviceAccount.create |
ServiceAccount 생성 여부를 나타냅니다. | false |
serviceAccount.name |
ServiceAccount의 이름. 설정되지 않으면 전체 차트 이름이 사용됩니다. | |
tolerations |
Toolbox에 추가할 허용 사항 | |
extraEnvFrom |
노출할 추가 환경 변수의 목록 |
백업 구성
백업 구성에 대한 정보는 백업 및 복원 문서에 있습니다. 백업이 수행되는 방법에 대한 기술 구현에 대한 추가 정보는 백업 및 복원 아키텍처 문서에서 확인할 수 있습니다.
지속성 구성
백업 및 복원을 위한 지속성 저장소는 별도로 구성됩니다.
GitLab을 백업 및 복원 작업을 위해 구성할 때 다음 사항을 검토하십시오.
백업은 backups.cron.persistence.*
속성을 사용하고, 복원은 persistence.*
속성을 사용합니다. 지속성 저장소의 구성에 대한 추가 설명은 최종 속성 키(예: .enabled
또는 .size
)만 사용하며 적절한 접두사를 추가해야 합니다.
지속성 저장소는 기본적으로 비활성화되어 있으므로, 어떤 유의미한 크기의 백업 또는 복원을 위해서는 .enabled
를 true
로 설정해야합니다.
또한, PersistentVolume이 Kubernetes에 의해 생성되기 위해서는 .storageClass
를 지정해야 하며, 또는 PersistentVolume을 수동으로 생성해야 합니다.
.storageClass
가 ‘-‘로 지정되면, PersistentVolume은 Kubernetes 클러스터에 지정된 기본 StorageClass를 사용하여 생성됩니다.
PersistentVolume이 수동으로 생성되는 경우, .volumeName
속성을 사용하거나 선택기 .matchLabels
/ .matchExpressions
속성을 사용하여 볼륨을 지정할 수 있습니다.
대부분의 경우, .accessMode
의 기본 값은 Toolbox만 PersistentVolumes에 접근할 수 있는 충분한 제어를 제공합니다. 설정이 올바른지 확인하기 위해 Kubernetes 클러스터에 설치된 CSI 드라이버의 문서를 참조하십시오.
백업 고려사항
백업 작업은 백업 객체 저장소에 기록되기 전에 백업되는 개별 구성 요소를 보관할 디스크 공간을 필요로 합니다. 이 디스크 공간의 양은 다음 요소에 따라 달라집니다:
- 프로젝트 수 및 각 프로젝트에 저장된 데이터량
- PostgreSQL 데이터베이스의 크기(이슈, MR 등)
- 각 객체 저장소 백엔드의 크기
대략적인 크기가 결정되면 backups.cron.persistence.size
속성을 설정하여 백업을 시작할 수 있습니다.
복원 고려사항
백업을 복원하는 동안, 백업은 실행 중인 인스턴스의 파일이 교체되기 전에 디스크에 추출되어야 합니다. 이 복원 디스크 공간의 크기는 persistence.size
속성에 의해 제어됩니다. GitLab 설치 크기가 커짐에 따라 복원 디스크 공간의 크기도 커져야 하므로 유의해야 합니다. 대부분의 경우 복원 디스크 공간의 크기는 백업 디스크 공간의 크기와 동일해야 합니다.
포함된 툴박스 도구
Toolbox 컨테이너는 Rails 콘솔, Rake 작업 등 유용한 GitLab 도구를 포함하고 있습니다. 이 명령을 사용하면 데이터베이스 마이그레이션의 상태를 확인하고, 관리 작업을 위한 Rake 작업을 실행하며, Rails 콘솔과 상호 작용할 수 있습니다:
# Toolbox pod 찾기
kubectl get pods -lapp=toolbox
# pod 안에서 쉘 실행
kubectl exec -it <Toolbox pod name> -- bash
# Rails 콘솔 열기
gitlab-rails console -e production
# Rake 작업 실행
gitlab-rake gitlab:env:info
affinity
자세한 내용은 affinity
를 참조하세요.