DevOps 환경 구축 프로젝트에 참여해서 작업을 하는 도중 Gitlab Backup과 Restore 업무를 맡게 되었다.
프로젝트 내 Gitlab 버전인 15.3 버전 기준으로 gitlab docs를 확인해서 Backup과 Restore 방안을 마련하던 중 할 때마다 찾아서 하기는 귀찮을 것 같아 아예 쉘 스크립트로 작성해두게 되었다.
# !bin/bash
export DATE=`date +%Y%m%d_%H%M%S`
mkdir $(echo $DATE)
cd $(echo $DATE)
# backup 명 yyyyMMdd_hhmmss_gitlab_backup.tar
kubectl exec -it -n gitlab-system $(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}') -- gitlab-backup create BACKUP=$DATE
# 백업 파일 복사하기
kubectl cp gitlab-system/$(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}'):var/opt/gitlab/backups/$(echo $DATE)_gitlab_backup.tar ./$(echo $DATE)_gitlab_backup.tar
kubectl exec -it -n gitlab-system $(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}') -- "rm" "/var/opt/gitlab/backups/$(echo $DATE)_gitlab_backup.tar"
# 시크릿 및 설정 파일 복사
kubectl exec -it -n gitlab-system $(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}') -- tar cvf secret.tar /etc/gitlab
kubectl cp gitlab-system/$(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}'):secret.tar ./secret.tar
# Omnibus 세팅값 복사
kubectl exec -it -n gitlab-system $(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}') -- tar cvf omnibus.tar /tmp/shared
kubectl cp gitlab-system/$(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}'):omnibus.tar ./omnibus.tar
sh ${Restore script} ${DATE}
로 실시한다. # !bin/bash
BACKUP=$1
if ( echo $BACKUP -ne "" ); then
cd $BACKUP
# Omnibus 세팅값 복사
tar xvf omnibus.tar
kubectl cp ./tmp gitlab-system/$(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}'):tmp
# 시크릿 / 설정값 복사
tar xvf secret.tar
kubectl cp ./etc/gitlab gitlab-system/$(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}'):etc/gitlab
# 백업 파일 pod 내 저장
kubectl cp $(echo $BACKUP)_gitlab_backup.tar gitlab-system/$(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}'):var/opt/gitlab/backups/$(echo $BACKUP)_gitlab_backup.tar
# Omnibus 세팅값 설정
kubectl exec -it -n gitlab-system $(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}') -- gitlab-ctl reconfigure
# 복구
kubectl exec -it -n gitlab-system $(kubectl get po -n gitlab-system | grep gitlab | awk '{print $1}') -- gitlab-backup restore BACKUP=$BACKUP
fi
BACKUP=$1
부분에서 앞선 스크립트 실행 부분에서 ${DATE} 를 입력한 값이 $1에서 바뀌어서 스크립트가 실행이 된다.문의와 지적은 환영입니다.