Velero Backup k8s PVC & Restore

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.

  1. Velero kurulumu with Restic
  2. Kubernetes annotate eklemek (belirlenen pvc)
  3. velero create backup
  4. helm uninstall/delete & delete deploy/pvc
  5. 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 kurulumu with Restic
  • 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;

  • Kubernetes annotate ekliyorum;
  • kubectl annotate my-app-5d48589bcd-l5l49 backup.velero.io/backup-volumes=media

  • Backup oluşturuyorum
  • 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

  • Backup tamamlandıktan sonra uygulamamı ve pvc’leri siliyorum;
  • 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;

  • Restore işlemini başlatıyoruz
  • 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.

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.