GitLab 설치 백업
GitLab 백업은 차트에서 제공되는 Toolbox pod에서 backup-utility
명령을 실행하여 수행됩니다. 또한 이 차트의 기반 백업 자동화 기능을 활성화시킴으로써 백업을 자동화할 수도 있습니다.
첫 번째로 백업을 실행하기 전에 Toolbox가 객체 리포지터리에 액세스하기 위해 올바르게 구성되었는지 확인해야 합니다.
GitLab Helm 차트 기반 설치의 백업을 위해 다음 단계를 따르세요.
백업 생성
-
다음 명령을 실행하여 Toolbox pod이 실행 중인지 확인하세요.
kubectl get pods -lrelease=RELEASE_NAME,app=toolbox
-
백업 유틸리티를 실행합니다.
kubectl exec <Toolbox pod name> -it -- backup-utility
- 객체 리포지터리 서비스의
gitlab-backups
버킷을 방문하여 tarball이 추가되었는지 확인하세요. 파일 이름은<timestamp>_gitlab_backup.tar
형식으로 지정됩니다. 백업 타임스탬프가 무엇인지 읽어보세요. - 이 tarball은 복원에 필요합니다.
크론 기반 백업
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
주석을 설정합니다. GKE Autopilot과 같은 일부 Kubernetes 환경은 이 주석을 설정할 수 없으며 백업을 위한 작업 Pod를 생성하지 않습니다. 이 주석은 gitlab.toolbox.backups.cron.safeToEvict
매개변수를 true
로 설정하여 변경할 수 있으며, 이를 통해 작업을 만들 수 있지만 추방될 가능성과 백업의 손상이 있을 수 있습니다.크론 기반 백업은 정기적인 간격으로 이 차트에서 활성화될 수 있으며, 이는 Kubernetes 스케줄에서 정의된 대로 발생합니다.
다음 매개변수를 설정해야 합니다:
-
gitlab.toolbox.backups.cron.enabled
: 크론 기반 백업을 활성화하려면 true로 설정합니다. -
gitlab.toolbox.backups.cron.schedule
: Kubernetes 스케줄 문서에 따라 설정합니다. -
gitlab.toolbox.backups.cron.extraArgs
: 선택적으로 백업-유틸리티에 대한 추가 인수를 설정합니다(예:--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
보다 신뢰성이 낮은 경우 이 추가 인수를 재정의할 수 있습니다.
알려진 이슈가 있습니다(https://gitlab.com/gitlab-org/charts/gitlab/-/issues/3338).
백업 작업이 ‘ERROR: S3 error: 404 (NoSuchKey): The specified key does not exist.’와 함께 충돌하는 경우가 있습니다. 이 문제는 GitLab이 CI 작업 artifact 리포지터리로 S3 버킷을 사용하고 기본 ‘s3cmd’ CLI 도구를 사용할 때 발생합니다. ‘s3cmd’에서 ‘awscli’로 전환하면 백업 작업이 성공적으로 실행됩니다. 더 자세한 내용은 issue 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 default
backups:
cron:
enabled: true
schedule: "@daily"
extraArgs: "--s3tool awscli --aws-s3-endpoint-url <MINIO-INGRESS-URL>"
기타 매개변수
사용 가능한 매개변수 디렉터리을 확인하려면 다음 명령을 실행하세요.
kubectl exec <Toolbox pod 이름> -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
을 안전한 위치에 저장합니다. 백업을 복원하기 위해 필요합니다.