GitLab 설치 백업

Tier: Free, Premium, Ultimate Offering: Self-managed

GitLab 백업은 차트에서 제공되는 Toolbox pod에서 backup-utility 명령을 실행하여 수행됩니다. 백업은 또한 이 차트의 기반되는 Cron 기반 백업 기능을 활성화하여 자동화할 수도 있습니다.

처음으로 백업을 실행하기 전에, 프로그램 상자가 객체 저장소에 액세스할 수 있도록 올바르게 구성되었는지 확인해야 합니다.

GitLab Helm 차트 기반 설치의 백업을 수행하는 데는 다음 단계를 따르십시오.

백업 만들기

  1. 다음 명령을 실행하여 프로그램 상자 pod가 실행 중인지 확인합니다.

    kubectl get pods -lrelease=릴리즈_이름,app=toolbox
    
  2. 백업 유틸리티 실행

    kubectl exec <프로그램 상자 pod 이름> -it -- backup-utility
    
  3. 객체 저장소 서비스의 gitlab-backups 버킷을 방문하여 tar 볼이 추가되었는지 확인합니다. 이는 <타임스탬프>_gitlab_backup.tar 형식으로 명명될 것입니다. 백업 타임스탬프에 대한 내용을 읽어보세요.

  4. 이 tar 볼은 복원에 필요합니다.

Cron 기반 백업

note
Helm 차트에서 생성한 Kubernetes CronJob은 jobTemplate에 cluster-autoscaler.kubernetes.io/safe-to-evict: "false" 주석을 설정합니다. GKE Autopilot과 같은 일부 Kubernetes 환경은 이 주석을 설정할 수 없으며 백업을 위한 Job Pods를 생성하지 않습니다. gitlab.toolbox.backups.cron.safeToEvict 매개변수를 true로 설정하여이 주석을 변경할 수 있지만, 이는 Job이 생성되지만 추방되어 백업이 손상될 수 있는 위험을 갖게 됩니다.

이 차트에서 정기적인 간격으로 발생하도록 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 <프로그램 상자 pod 이름> -it -- backup-utility --skip db --skip lfs

백업 정리만

새로운 백업을 만들지 않고 백업 정리를 실행합니다.

kubectl exec <프로그램 상자 pod 이름> -it -- backup-utility --cleanup

사용할 S3 도구 지정

backup-utility 명령은 객체 저장소에 연결하기 위해 기본적으로 s3cmd를 사용합니다. 기본 s3cmd가 다른 S3 도구보다 신뢰성이 낮은 경우 이러한 추가 인수를 재정의할 수 있습니다.

GitLab이 S3 버킷을 CI 작업 아티팩트 저장소로 사용하고 기본 s3cmd CLI 도구가 사용될 때 ERROR: S3 error: 404 (NoSuchKey): The specified key does not exist.와 같은 오류로 백업 작업이 실패하는 알려진 문제가 있습니다. s3cmd에서 awscli로 전환하면 백업 작업이 성공적으로 실행됩니다. 자세한 내용은 이슈 3338을 참조하세요.

사용할 S3 CLI 도구는 s3cmd 또는 awscli가 될 수 있습니다.

 kubectl exec <프로그램 상자 pod 이름> -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>"
note
S3 CLI 도구 s5cmd 지원은 조사 중입니다. 진행 상황을 추적하려면 이슈 523을 참조하세요.

기타 매개변수

사용 가능한 매개변수의 완전한 목록을 보려면 다음 명령을 실행하세요.

kubectl exec <Toolbox pod name> -it -- backup-utility --help

시크릿 백업

또한 보안상의 이유로 백업에 포함되지 않는 레일 시크릿의 사본을 저장해야 합니다. 데이터베이스를 포함하는 전체 백업과 시크릿의 사본을 별도로 유지하는 것을 권장합니다.

  1. 레일 시크릿의 객체 이름 찾기

    kubectl get secrets | grep rails-secret
    
  2. 레일 시크릿의 사본 저장

    kubectl get secrets <rails-secret-name> -o jsonpath="{.data['secrets\.yml']}" | base64 --decode > gitlab-secrets.yaml
    
  3. gitlab-secrets.yaml을 안전한 위치에 저장하세요. 백업을 복원하는 데 필요합니다.

추가 정보