[NKS] velero 백업 및 복원하기
네이버 쿠버네티스 서비스에서 velero를 통한 클러스터 백업&복원을 가이드하고 있다.
velero 는 vmware-tanzu에서 업데이트하고 있는 github 링크를 통해 사용하면 된다.
1. VELERO 셋업
1-1. velero 다운로드
22년 11월 7일 기준으로 현재 1.8.1 버전이 최신이다.
github 에서 다운로드 받고 압축을 푼뒤 실행할 수 있는 폴더로 이동시켜주자.
$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
$ tar -xvzf velero-v1.8.1-linux-amd64.tar.gz
$ sudo mv velero-v1.8.1-linux-amd64/velero /usr/local/bin/velero
1-2. 클라우드 인증정보(s3)
velero 의 저장소는 S3기반의 오브젝트 스토리지이기 때문에 정보를 지정해주자.
필자는 네이버클라우드의 오브젝트스토리지를 사용하며, 지역은 KR 이다.
$ cat cloud-credential
[default]
aws_access_key_id=본인의엑세스키
aws_secret_access_key=본인의시크릿키
region=KR
server_api_uri=https://ncloud.apigw.ntruss.com/vserver/v2
1-3. Object Storage 생성
다음은 NCP 콘솔에서 오브젝트스토리지를 하나 만들어주자.
필자는 joon95backup 이란 버킷을 생성하였다.
1-4. Velero 서버 설치
이제 쿠버네티스에 velero를 올릴 것이다.
여기서 사용되는 velero 계정(service account)은 cluster-admin 권한으로 생성되 클러스터의 모든 권한을 얻어 자유롭게 백업을 할 수 있게 된다.
여기에 쓰인 nks의 경로들은 모두 ncp 사용가이드에 적혀있는데로 사용하면 된다.
$ velero install \
--kubeconfig $KUBE_CONFIG \
--provider velero.io/aws \
--bucket joon95bucket \
--image nks.kr.private-ncr.ntruss.com/velero:v1.8.1 \
--plugins nks.kr.private-ncr.ntruss.com/velero-plugin-for-aws:v1.0.0,nks.kr.private-ncr.ntruss.com/velero-plugin-for-ncloud:v0.0.6 \
--backup-location-config region=kr,s3ForcePathStyle="true",s3Url=https://kr.object.ncloudstorage.com \
--use-volume-snapshots=false \
--secret-file=./cloud-credential
1-5. 설치 확인
간단히 velero 네임스페이스에 리소스들에 정상적으로 돌아가는 것을 확인하면 된다.
$ kubectl get all --namespace velero
1-6. 스냅샷 구성
$ velero --kubeconfig $KUBE_CONFIG snapshot-location create default --provider ncloud/volume-snapshotter-plugin
2. 백업
이제 velero 명령어를 통해 백업을 해보자.
$ velero backup --kubeconfig $KUBE_CONFIG create ns-joon-backup --include-namespaces joon
진행이 정상적인지 체크해보자.
velero backup --kubeconfig $KUBE_CONFIG get ns-joon-backup
velero backup --kubeconfig $KUBE_CONFIG describe ns-joon-backup
실제 s3 버킷에 접근해보면 아래와 같이 백업이 되어있다.
3. 복원
네임스페이스를 날리기전 상태를 캡처해놓고~
해당 네임스페이스를 모두 날리고 진행한다.
삭제를 잘 확인하였다면 restore create 를 통해 복원을 실행한다.
$ velero restore --kubeconfig $KUBE_CONFIG create --from-backup ns-joon-backup
잠시 후 리소스를 조회해보면 정상적으로 복구된 걸 확인할 수 있다.
4. Velero 삭제
먼저 생성한 backup 을 삭제하는 방법이다.
$ velero backup --kubeconfig $KUBE_CONFIG delete ns-joon-backup
다음은 쿠버네티스에 올라간 velero 서버를 삭제하는 명령어이다.
$ kubectl delete namespace/velero clusterrolebinding/velero
$ kubectl delete crds -l component=velero
내용 추가 (22.11.08)
위 내용으로 네임스페이스별 백업&복원테스트를 완료하였는데 문제가 발생했다.
바로 NAS pv 를 붙여보니 404 Not Found 에러가 지속적으로 발생하는 것.
알아보니 pv를 백업하려면 무결성보장을 위한 fsfreeze 명령어를 실행하여 백업을 뜨는데,
NAS는 프리징을 지원하지 않아서 NAS를 사용하는 PV는 백업을 못한다는 것이였다.
추가로 PV를 백업하려면 restic을 활성화 해서 오브젝트스토리지로 백업할 수 있다.
velero install --use-restic 옵션을 통해 활성화 할 수 있다.
그리고 restic은 오브젝트 스토리지에 접근 시 암호에 특수문자가 포함되어 있으면 에러가 발생한다고 하니 패스워드설정 시 참고하자.
마치며..
이렇게 쿠버네티스 클러스터를 백업 복원하는 실습을 해보았다.
첨에 버킷을 찾을 수 없다는 에러메시지가 계속 나와서 해멧는데...
access key, secret key, url 정보를 눈이 빠지게 쳐다봤지만... 똑같앗앗다...
그래서 그냥 velero 서버를 다시 설치하니.. 잘됨...(아놔)..
뭐. 전체적인 방법은 간단하니 좋다..^^