Kubernetes/kubernetes 백업 및 복원

Velero with NFS/local as a backup storage

babbeolicoding 2025. 2. 22. 01:05

velero는 kubernetes 리소스를 백업 및 복원하는 오픈소스이다.
보통 s3나 minio 등을 사용하는데 NFS, local 경로도 사용이 가능하다.
찾아보니 velero 공식사이트에선 local이나 NAS를 사용하는 기능을 지원하지 않는 것 같지만
git 사이트에서 해당 기능을 쓸 수 있게 plugin을 만들어놨다.

 

필자는 worker node에 NFS를 mount 하였고 

mount 된 경로에 backup 및 restore를 할 수 있도록 만들어봤다.

 

사전 준비 작업

- worker node <-> NFS mount
- git, make, go, docker 사전 설치

 

Velero 설치

curl -LO https://github.com/vmware-tanzu/velero/releases/download/v1.15.2/velero-v1.15.2-linux-amd64.tar.gz
tar -zxvf velero-v1.15.2-linux-amd64.tar.gz
mv velero-v1.15.2-linux-amd64/velero /usr/local/bin

velero version

 

 

git 소스 받기

git clone https://github.com/replicatedhq/local-volume-provider.git

 

 

빌드 및 컴파일

cd local-volume-provider

make plugin
make fileserver
make container
make ttl.sh

해당 과정을 처리하면 velero에서 사용 가능한 컨테이너 이미지가 생성된다.

 

make plugin 

 

make fileserver

 

make container

 

make ttl.sh

 

 

velero install

velero install --use-node-agent \
--uploader-type=restic \
--use-volume-snapshots=false \
--namespace velero \
--no-default-backup-location \
--no-secret

 

 

생성한 plugin 설치

velero plugin add ttl.sh/<user>/local-volume-provider:12h
ex) velero plugin add ttl.sh/root/local-volume-provider:12h

 

BackupStorageLocation 생성 

apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
  name: default
  namespace: velero
spec:
  backupSyncPeriod: 2m0s
  provider: replicated.com/hostpath
  objectStorage:
    # This corresponds to a unique volume name
    bucket: hostpath-snapshots
    # A prefix inside the volume that contains the backups
    # useful for migrating from a filesystem created by Minio
    prefix: /velero
  config:
    # This path must exist on the host and be writable outside the group
    path: /tmp/hostpath-snaps
    # Must be provided if you're using Restic; [default mount] + [bucket] + [prefix] + "restic"
    resticRepoPrefix: /var/velero-local-volume-provider/hostpath-snapshots/velero/restic

prefix: /velero => 백업 및 복원 시 사용할 폴더
path: /tmp/hostpath-snaps => node에 mount된 경로

위 값으로 BackupStorageLocation를 생성하면
workernode에 /tmp/hostpath-snaps/velero로 경로가 생긴다

 

 

백업스토리지 상태 확인

velero backup-location get
k get BackupStorageLocation -A

PHASE가 Available인지 확인
해당 상태가 UnAvailable이라면 k describe BackupStorageLocation default -n velero로 확인이 가능하다.
권한이 없는 경우가 있는데 해당 경우는 권한만 주면 된다.

 

 

velero backup 생성 및 확인

velero backup create kubernetes-0221
velero backup get

 

 

만약 오프라인 환경에서 설치를 하고자 한다면
인터넷이 되는 상태환경에서 컨테이너 이미지를 만들고

해당 이미지만 가져와서 사용해도 가능함.

 

추가적으로 좀 더 자세한 자료를 보고 싶다면 아래 링크를 확인하시면 된다.

https://github.com/replicatedhq/local-volume-provider?tab=readme-ov-file

 

GitHub - replicatedhq/local-volume-provider: A Velero plugin for backup/restore directly to Kubernetes volumes.

A Velero plugin for backup/restore directly to Kubernetes volumes. - replicatedhq/local-volume-provider

github.com