Toolbox
Tier: Free, Premium, Ultimate
Offering: Self-managed
Toolbox Pod는 GitLab 애플리케이션 내에서 주기적인 가사 정리 작업을 실행하는 데 사용됩니다. 이러한 작업에는 백업, Sidekiq 유지 관리 및 Rake 작업이 포함됩니다.
Configuration
다음 구성 설정은 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
| pod 할당을 위한 앤티피소니 규칙 | {}
|
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 Job 병행 정책 | 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
| 객체 저장 자격 증명 시크릿 | ”” |
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 특정: 컨테이너를 위한 Linux 기능을 제거함 | [ "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
| 할당된 우선순위 클래스 | |
replicas
| 실행할 Toolbox Pods의 수 | 1
|
resources.requests
| 필요한 최소 Toolbox 요청 리소스 | { cpu : 50m , memory : 350M }
|
securityContext.fsGroup
| 컨테이너가 시작될 파일 시스템 그룹 ID | 1000
|
securityContext.runAsUser
| 컨테이너가 시작될 사용자 ID | 1000
|
securityContext.runAsGroup
| 컨테이너가 시작될 그룹 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 컨테이너의 Linux 기능을 제거함 | [ "ALL" ]
|
serviceAccount.annotations
| ServiceAccount에 대한 주석 | {} |
serviceAccount.automountServiceAccountToken
| 기본 ServiceAccount 액세스 토큰을 팟에 마운트할지 여부를 나타냄 | false
|
serviceAccount.enabled
| ServiceAccount를 사용할지 여부를 나타냄 | false |
serviceAccount.create
| ServiceAccount를 생성할지 여부를 나타냄 | false |
serviceAccount.name
| ServiceAccount의 이름. 설정하지 않으면 전체 차트 이름이 사용됨 | |
tolerations
| 도구 상자에 추가할 허용값 | |
extraEnvFrom
| 노출할 다른 데이터 원본에서 추가 환경 변수 목록 |
백업 구성
백업 및 복원 설명서에서 백업 구성에 관한 정보를 찾을 수 있습니다. 또한, 백업이 수행되는 기술적인 구현에 대한 추가 정보는 백업 및 복원 아키텍처 설명서에서 찾을 수 있습니다.
지속성 구성
백업 및 복원을 위해 지속 스토어는 별도로 구성됩니다. GitLab을 백업 및 복원 작업을 구성할 때 다음을 고려하세요.
백업은 backups.cron.persistence.*
속성을 사용하고, 복원은 persistence.*
속성을 사용합니다. 지속성 스토어를 구성하는 데 사용되는 설명은 최종 속성 키만 사용하며(예: .enabled
또는 .size
), 적절한 접두사가 추가되어야 합니다.
지속성 스토어는 기본적으로 사용되지 않으므로 .enabled
를 사용하여 중요한 크기의 백업 또는 복원을 위해 true
로 설정해야 합니다. 또한, Kubernetes에서 PersistentVolume을 생성하려면 .storageClass
를 지정해야 하거나 수동으로 PersistentVolume을 생성해야 합니다. .storageClass
가 '-'
로 지정된 경우, PersistentVolume은 Kubernetes 클러스터에서 지정된 기본 StorageClass를 사용하여 생성됩니다.
수동으로 PersistentVolume를 생성하는 경우 .volumeName
속성을 사용하거나 .matchLables
/ .matchExpressions
속성을 사용하여 볼륨을 지정할 수 있습니다.
대부분의 경우 .accessMode
의 기본값은 Toolbox만 PersistentVolumes에 액세스하는 데 충분한 컨트롤을 제공합니다. 올바른 설정인지 확인하려면 Kubernetes 클러스터에 설치된 CSI 드라이버에 대한 설명서를 참조하세요.
백업 고려 사항
백업 작업에는 백업 대상인 개별 구성 요소를 보관하기 위한 디스크 공간이 필요하며, 이후에 백업 개체 스토어에 기록됩니다. 디스크 공간의 양은 다음과 같은 요소에 따라 달라집니다:
- 각 프로젝트 및 각 프로젝트에 저장된 데이터 양
- PostgresSQL 데이터베이스의 크기 (이슈, MR 등)
- 각 개체 스토어 백엔드의 크기
대략적인 크기를 결정한 후, backups.cron.persistence.size
속성을 설정하여 백업을 시작할 수 있습니다.
복원 고려 사항
백업을 복원하는 동안, 파일을 실행 중인 인스턴스에서 교체하기 전에 백업을 디스크에 추출해야 합니다. 이 복원 디스크 공간의 크기는 persistence.size
속성에 의해 제어됩니다. GitLab 설치가 커질수록 복원 디스크 공간의 크기도 그에 따라 증가해야 한다는 점을 유념해야 합니다. 대부분의 경우 복원 디스크 공간의 크기는 백업 디스크 공간과 동일해야 합니다.
Toolbox 포함된 도구들
Toolbox 컨테이너에는 Rails 콘솔, Rake 작업 등과 같은 유용한 GitLab 도구가 포함되어 있습니다. 이러한 명령은 데이터베이스 마이그레이션 상태를 확인하거나, 관리 작업을 위해 Rake 작업을 실행하거나, Rails 콘솔과 상호 작용하기 위해 사용됩니다:
# Toolbox pod 찾기
kubectl get pods -lapp=toolbox
# pod 내에서 셸 실행
kubectl exec -it <Toolbox pod 이름> -- bash
# Rails 콘솔 열기
gitlab-rails console -e production
# Rake 작업 실행
gitlab-rake gitlab:env:info
affinity
더 많은 정보는 affinity
를 참조하세요.