GitLab 설치 백업
GitLab 백업은 차트에서 제공하는 Toolbox 포드에서 backup-utility
명령을 실행하여 수행됩니다. 백업은 이 차트의 Cron 기반 백업 기능을 활성화하여 자동화할 수도 있습니다.
첫 번째로 백업을 실행하기 전에, Toolbox가 올바르게 구성되었는지 확인해야 하며, 오브젝트 저장소에 접근할 수 있어야 합니다.
GitLab Helm 차트 기반 설치를 백업하는 방법은 다음과 같습니다.
백업 생성
-
다음 명령을 실행하여 toolbox 포드가 실행 중인지 확인합니다.
kubectl get pods -lrelease=RELEASE_NAME,app=toolbox
-
백업 유틸리티를 실행합니다.
kubectl exec <Toolbox pod name> -it -- backup-utility
-
오브젝트 저장소 서비스의
gitlab-backups
버킷을 방문하여 tarball이 추가되었는지 확인합니다. 형식은<timestamp>_gitlab_backup.tar
입니다. 백업 타임스탬프에 대해 읽어보세요. -
이 tarball은 복원에 필요합니다.
Cron 기반 백업
작업 템플릿에
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
주석을 설정합니다. GKE Autopilot과 같은 일부 Kubernetes 환경에서는
이 주석을 설정할 수 없으며, 백업을 위한 Job Pods를 생성하지 않습니다.
이 주석은
gitlab.toolbox.backups.cron.safeToEvict
매개변수를 true
로 설정하여 변경할 수 있으며,이는 작업 생성이 가능하게 하지만 퇴출 및 백업 손상의 위험이 있습니다.
Cron 기반 백업은 Kubernetes 일정로 정의된 정기적인 간격으로 이 차트에서 활성화될 수 있습니다.
다음 매개변수를 설정해야 합니다:
-
gitlab.toolbox.backups.cron.enabled
: cron 기반 백업 활성화를 위해 true로 설정 -
gitlab.toolbox.backups.cron.schedule
: Kubernetes 일정 문서에 따라 설정 -
gitlab.toolbox.backups.cron.extraArgs
: 선택적으로 backup-utility에 대한 추가 인수를 설정 (예:--skip db
또는--s3tool awscli
)
백업 유틸리티 추가 인수
백업 유틸리티는 일부 추가 인수를 사용할 수 있습니다.
구성 요소 건너뛰기
--skip
인수를 사용하여 구성 요소를 건너뛸 수 있습니다. 유효한 구성 요소 이름은 백업에서 특정 데이터 제외하기에서 확인할 수 있습니다.
각 구성 요소는 고유한 --skip
인수를 가져야 합니다. 예를 들어:
kubectl exec <Toolbox pod name> -it -- backup-utility --skip db --skip lfs
백업만 정리하기
새 백업을 생성하지 않고 백업 정리를 실행합니다.
kubectl exec <Toolbox pod name> -it -- backup-utility --cleanup
사용할 S3 도구 지정
backup-utility
명령은 기본적으로 오브젝트 저장소에 연결하기 위해 s3cmd
를 사용합니다.
s3cmd
가 다른 S3 도구보다 신뢰할 수 없는 경우 이 추가 인수를 재정의할 수 있습니다.
GitLab
이 CI 작업 아티팩트 저장을 위해 S3 버킷을 사용할 때
기본 s3cmd
CLI 도구가 사용되고 백업 작업이 ERROR: S3 error: 404 (NoSuchKey): The specified key does not exist.
오류와 함께 충돌하는 알려진 문제가 있습니다.
s3cmd
에서 awscli
로 전환하면 백업 작업이 성공적으로 실행됩니다.
자세한 내용은 문제 3338을 참조하세요.
사용할 S3 CLI 도구는 s3cmd
또는 awscli
일 수 있습니다.
kubectl exec <Toolbox pod name> -it -- backup-utility --s3tool awscli
awscli와 함께 MinIO 사용하기
awscli
를 사용할 때 MinIO를 객체 저장소로 사용하려면 다음 매개변수를 설정합니다:
gitlab:
toolbox:
extraEnvFrom:
AWS_ACCESS_KEY_ID:
secretKeyRef:
name: <MINIO-SECRET-NAME>
key: accesskey
AWS_SECRET_ACCESS_KEY:
secretKeyRef:
name: <MINIO-SECRET-NAME>
key: secretkey
extraEnv:
AWS_DEFAULT_REGION: us-east-1 # MinIO 기본
backups:
cron:
enabled: true
schedule: "@daily"
extraArgs: "--s3tool awscli --aws-s3-endpoint-url <MINIO-INGRESS-URL>"
참고:
S3 CLI 도구 s5cmd
지원은 조사 중입니다.
진행 상황을 추적하려면 문제 523를 참조하세요.
서버 측 리포지토리 백업
- GitLab 17.0에서 도입됨.
대규모 리포지토리 백업을 백업 아카이브에 저장하는 대신, 리포지토리 백업은 각 리포지토리를 호스팅하는 Gitaly 노드가 백업을 생성하고 이를 객체 저장소로 스트리밍하도록 구성할 수 있습니다. 이렇게 하면 백업을 생성하고 복원하는 데 필요한 네트워크 자원을 줄일 수 있습니다.
서버 측 리포지토리 백업 생성하기를 참조하세요.
기타 인수
사용 가능한 인수의 전체 목록을 보려면 다음 명령을 실행하세요:
kubectl exec <Toolbox pod name> -it -- backup-utility --help
비밀 백업
Rails 비밀이 보안 예방 차원에서 백업에 포함되지 않으므로 이 비밀의 사본도 저장해야 합니다. 우리는 데이터베이스를 포함하는 전체 백업을 비밀의 사본과 분리하여 보관할 것을 권장합니다.
-
Rails 비밀의 객체 이름 찾기
kubectl get secrets | grep rails-secret
-
Rails 비밀의 사본 저장하기
kubectl get secrets <rails-secret-name> -o jsonpath="{.data['secrets\.yml']}" | base64 --decode > gitlab-secrets.yaml
-
gitlab-secrets.yaml
을 안전한 위치에 저장하세요. 백업을 복원하는 데 필요합니다.