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