Properly restore PVs with a reclaim policy of Retain and restic backups (#1713)

* reorganize persistent volume restore code for clarity

Signed-off-by: Steve Kriss <krisss@vmware.com>
This commit is contained in:
Steve Kriss
2019-08-06 14:40:35 -06:00
committed by KubeKween
parent 4accb8512a
commit 80692a8a39
5 changed files with 101 additions and 66 deletions

View File

@@ -150,7 +150,7 @@ func (b *backupper) BackupPodVolumes(backup *velerov1api.Backup, pod *corev1api.
continue
}
volumeBackup := newPodVolumeBackup(backup, pod, volumeName, repo.Spec.ResticIdentifier)
volumeBackup := newPodVolumeBackup(backup, pod, volume, repo.Spec.ResticIdentifier)
numVolumeSnapshots++
if volumeBackup, err = b.repoManager.veleroClient.VeleroV1().PodVolumeBackups(volumeBackup.Namespace).Create(volumeBackup); err != nil {
errs = append(errs, err)
@@ -221,8 +221,8 @@ func isHostPathVolume(volume *corev1api.Volume, pvcGetter pvcGetter, pvGetter pv
return pv.Spec.HostPath != nil, nil
}
func newPodVolumeBackup(backup *velerov1api.Backup, pod *corev1api.Pod, volumeName, repoIdentifier string) *velerov1api.PodVolumeBackup {
return &velerov1api.PodVolumeBackup{
func newPodVolumeBackup(backup *velerov1api.Backup, pod *corev1api.Pod, volume corev1api.Volume, repoIdentifier string) *velerov1api.PodVolumeBackup {
pvb := &velerov1api.PodVolumeBackup{
ObjectMeta: metav1.ObjectMeta{
Namespace: backup.Namespace,
GenerateName: backup.Name + "-",
@@ -248,19 +248,29 @@ func newPodVolumeBackup(backup *velerov1api.Backup, pod *corev1api.Pod, volumeNa
Name: pod.Name,
UID: pod.UID,
},
Volume: volumeName,
Volume: volume.Name,
Tags: map[string]string{
"backup": backup.Name,
"backup-uid": string(backup.UID),
"pod": pod.Name,
"pod-uid": string(pod.UID),
"ns": pod.Namespace,
"volume": volumeName,
"volume": volume.Name,
},
BackupStorageLocation: backup.Spec.StorageLocation,
RepoIdentifier: repoIdentifier,
},
}
// if the volume is for a PVC, annotate the pod volume backup with its name
// for easy identification as a PVC backup during restore.
if volume.PersistentVolumeClaim != nil {
pvb.SetAnnotations(map[string]string{
PVCNameAnnotation: volume.PersistentVolumeClaim.ClaimName,
})
}
return pvb
}
func errorOnly(_ interface{}, err error) error {

View File

@@ -35,11 +35,24 @@ import (
)
const (
DaemonSet = "restic"
InitContainer = "restic-wait"
// DaemonSet is the name of the Velero restic daemonset.
DaemonSet = "restic"
// InitContainer is the name of the init container added
// to workload pods to help with restores.
InitContainer = "restic-wait"
// DefaultMaintenanceFrequency is the default time interval
// at which restic check & prune are run.
DefaultMaintenanceFrequency = 24 * time.Hour
// PVCNameAnnotation is the key for the annotation added to
// pod volume backups when they're for a PVC.
PVCNameAnnotation = "velero.io/pvc-name"
// Deprecated.
//
// TODO(2.0): remove
podAnnotationPrefix = "snapshot.velero.io/"
volumesToBackupAnnotation = "backup.velero.io/backup-volumes"