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