Merhaba, K8S clusterda velero ile backup alma konusunda daha önce bir makale yazmıştım, https://mertyakan.com/velero-kubernetes-with-aws-minio-portworx/
Bu makalemizde velero ile kubernetes üzerinde barınan bir namespace içindeki pvc’nin backup alınması ve restore edilmesi konusunu ele alacağız,
Velero kurulumu için daha önce yazdığım makaleyi kontrol edebilirsiniz, yeniden göz önünde bulunması açısından adımları aşağıdaki gibi listeliyorum.
- Velero kurulumu with Restic
- Kubernetes annotate eklemek (belirlenen pvc)
- velero create backup
- helm uninstall/delete & delete deploy/pvc
- velero restore
Öncelikle ben bu testleri bir kubernetes ve aws s3 servislerini kullanarak gerçekleştiriyorum, sizlerde doğru entegrasyon (AWS için IAM yetkileri; (s3,ebs)) sağladığınızı düşünerek atlıyorum;
velero install \ --provider aws \ --plugins velero/velero-plugin-for-aws:v1.3.0 \ --bucket velero-mnm \ --backup-location-config region=eu-central-1 \ --snapshot-location-config region=eu-central-1 \ --secret-file ./credentials-velero \ --use-restic
Kubernetes üzerinde bir namespace belirliyorum, ve belirlediğim uygulamanın pvc doluluğunu gözden geçiriyorum;
kubectl annotate my-app-5d48589bcd-l5l49 backup.velero.io/backup-volumes=media
velero create backup my-app-backup-name --volume-snapshot-locations default --include-namespaces my-app-namespace
Velero ile alınan backup’ın durumunu aşağıdaki komutla inceleyebilirsiniz;
velero backup describe my-app-backup-name
Aşağıdaki gibi bir görüntü ile karşılaşmamız gerekiyor;
Name: my-app-backup-name Namespace: velero Labels: velero.io/storage-location=default Annotations: velero.io/source-cluster-k8s-gitversion=v1.23.1 velero.io/source-cluster-k8s-major-version=1 velero.io/source-cluster-k8s-minor-version=23 Phase: InProgress Errors: 0 Warnings: 0 Namespaces: Included: my-app-namespace Excluded: <none> Resources: Included: * Excluded: <none> Cluster-scoped: auto Label selector: <none> Storage Location: default Velero-Native Snapshot PVs: auto TTL: 720h0m0s Hooks: <none> Backup Format Version: 1.1.0 Started: 2022-04-06 18:21:33 +0300 +03 Completed: <n/a> Expiration: 2022-05-06 18:21:33 +0300 +03 Estimated total items to be backed up: 143 Items backed up so far: 11 Velero-Native Snapshots: <none included> Restic Backups (specify --details for more information): In Progress: 1
helm uninstall -n my-app-backup-name my-app-helmname # Kubectl get pvc ile listeyip kalan pvc'leri siliyoruz Kubectl delete pvc pvcname1 pvcname2 . .
Kubernetes namespace’i içerisinde herhangi bir dosyanın kalmadığına emin olduktan sonra;
velero restore create my-app-restore-test1 --from-backup my-app-backup-name
Restore işlemini describe ederek inceleme yapabiliriz, restore tamamlandıktan sonra podun içine erişerek silinen pvc’nin boyutunun tekrar eski boyutuna geldiğini gözlemleyebilirsiniz,
Restore tamamlandıktan sonra aşağıdaki gibi bir görüntü ile karşılaşmanız gerekmektedir,
Name: my-app-restore-test1 Namespace: velero Labels: <none> Annotations: <none> Phase: Completed Total items to be restored: 119 Items restored: 119 Started: 2022-04-06 17:37:09 +0300 +03 Completed: 2022-04-06 17:42:53 +0300 +03 Warnings: Velero: <none> Backup: my-app-backup-name Namespaces: Included: all namespaces found in the backup Excluded: <none> Resources: Included: * Excluded: nodes, events, events.events.k8s.io, backups.velero.io, restores.velero.io, resticrepositories.velero.io Cluster-scoped: auto Namespace mappings: <none> Label selector: <none> Restore PVs: auto Restic Restores (specify --details for more information): Completed: 1 Preserve Service NodePorts: auto
velero restore describe my-app-restore-test1 –details;
Restic Restores: Completed: my-app-namespace/my-app-5d48589bcd-l5l49: media
Kontrol ettiğimizde pvc’nin backup’ını restore ettiğimizi görebilirsiniz,
! Önemli not: Backup aldıktan sonra describe ederseniz muhakkak Restic ile ilgili pvc’nin alındığına emin olunuz.