백업 및 복원
이 문서는 CNG로의 백업과 복원의 기술적 구현을 설명합니다.
Toolbox 팟
Toolbox 차트는 클러스터에 팟을 배포합니다. 이 팟은 클러스터 내 다른 컨테이너와의 상호 작용 지점으로 작동합니다.
사용자는 이 팟을 사용하여 kubectl exec -it <pod name> -- <임의의 명령어>
명령을 실행할 수 있습니다.
Toolbox는 Toolbox 이미지에서 컨테이너를 실행합니다.
해당 이미지에는 사용자가 명령어로 호출할 몇 가지 사용자 정의 스크립트가 포함되어 있습니다. 이러한 스크립트는 Rake 작업, 백업, 복원 및 객체 저장소와의 상호 작용을 위한 도우미 스크립트입니다.
백업 유틸리티
백업 유틸리티는 toolbox 컨테이너에 있는 스크립트 중 하나로, 이름에서 알 수 있듯이 백업을 수행하는 스크립트이며 기존 백업의 복원도 처리합니다.
백업
백업 유틸리티 스크립트를 매개변수 없이 실행하면 백업 tar를 만들고 객체 저장소에 업로드합니다.
실행 순서
다음과 같은 단계로 백업이 수행됩니다.
- GitLab 백업 Rake 작업을 사용하여 데이터베이스를 백업합니다(건너뛰지 않은 경우).
- GitLab 백업 Rake 작업을 사용하여 저장소를 백업합니다(건너뛰지 않은 경우).
- 각 객체 저장소 백엔드에 대해
- 객체 저장소 백엔드를 건너뛰도록 표시된 경우, 해당 저장소 백엔드를 건너뜁니다.
- 해당 객체 저장소 버킷의 기존 데이터를
<bucket-name>.tar
로 지정하여 tar로 묶습니다. - tar를 디스크의 백업 위치로 이동시킵니다.
- GitLab 버전, 백업 시간 및 건너뛴 항목을 식별하는 일부 메타데이터가 포함된
backup_information.yml
파일을 작성합니다. - 개별 tar 파일과
backup_information.yml
을 포함하는 tar 파일을 작성합니다. - 결과 tar 파일을 객체 저장소
gitlab-backups
버킷에 업로드합니다.
커맨드 라인 인수
-
--skip <component>
백업 프로세스에서 건너뛰고 싶은 구성 요소마다
--skip <component>
를 사용하여 백업 프로세스에서 건너뛰고 싶은 모든 구성 요소를 건너뛸 수 있습니다. 건너뛸 수 있는 구성 요소는 특정 데이터를 제외한 내용 백업에서 찾을 수 있습니다. -
-t <timestamp-override-value>
이 플래그를 지정하면 생성된 백업은
<timestamp-override-value>_gitlab_backup.tar
로 이름이 지어집니다. 기본값은 현재의 UNIX 타임스탬프이며, 이를 YYYY_mm_dd 형식으로 변환한 현재 날짜를 뒤에 붙인 값입니다. -
--backend <backend>
백업에 사용할 객체 저장소 백엔드를 구성합니다.
s3
또는gcs
중 하나를 사용할 수 있습니다. 기본값은s3
입니다. -
--storage-class <storage-class-name>
또한 백업이 저장되는 스토리지 클래스를 지정할 수 있으며, 이를 통해 백업 저장 비용을 절약할 수 있습니다. 미지정 시 백엔드의 기본값을 사용합니다.
참고: 이 스토리지 클래스 이름은 지정된 백엔드의 스토리지 클래스 인수로 그대로 전달됩니다.
GitLab 백업 버킷
백업을 저장할 기본 버킷의 이름은 gitlab-backups
입니다. 이는 BACKUP_BUCKET_NAME
환경 변수를 사용하여 구성할 수 있습니다.
Google Cloud Storage로 백업
기본적으로 백업 유틸리티는 객체 저장소에서 아티팩트를 업로드하고 다운로드하기 위해 s3cmd
를 사용합니다. 이는 Google Cloud Storage (GCS)와 함께 작동할 수 있지만, 인터퍼러빌리티 API를 사용하여 원하지 않는 인증 및 권한 부분에서 협상을 해야 합니다. 백업에 Google Cloud Storage를 사용할 때 BACKUP_BACKEND
환경 변수를 gcs
로 설정하여 백업 유틸리티 스크립트가 클라우드 스토리지용 네이티브 CLI인 gsutil
을 사용하도록 구성할 수 있습니다.
복원
인수 --restore
를 주면 백업 유틸리티는 실행 중인 인스턴스로 기존 백업을 복원하려고 시도합니다. 이 백업은 Linux 패키지 설치이거나 CNG Helm 차트 설치에서 얻을 수 있으며, 복원 대상 백업 인스턴스와 실행 중인 인스턴스가 모두 동일한 GitLab 버전을 실행 중이어야 합니다. 복원은 백업 버킷에 있는 -t <백업-이름>
파일이나 -f <URL>
을 사용한 원격 URL의 파일을 예상합니다.
-t
매개변수가 주어지면 백업 버킷에서 해당 이름의 백업 타르를 확인합니다.
-f
매개변수가 주어지면 주어진 URL이 컨테이너에서 액세스할 수 있는 위치에 있는 백업 타르의 유효한 URI임을 예상합니다.
백업 타르를 가져온 후 실행 순서는 다음과 같습니다:
- 저장소와 데이터베이스에 대해 GitLab 백업 Rake 작업을 실행합니다.
- 각 객체 저장 백엔드에 대해:
- 해당 객체 저장 버킷에 있는 기존 데이터를
<백업-이름>.tar
로 압축합니다. - 해당 객체 저장 버킷의 데이터를
tmp
버킷에 업로드합니다. - 해당 버킷을 정리합니다.
- 해당 버킷으로 백업 내용을 복원합니다.
- 해당 객체 저장 버킷에 있는 기존 데이터를
참고:
복원에 실패하면 사용자는 백업 버킷의 tmp
디렉토리에 있는 데이터를 사용하여 이전 백업으로 되돌아가야 합니다. 현재 이 과정은 수동으로 이루어집니다.