# Procédure de Migration

Avec l’aide de Velero, il est assez simple de migrer des resources d’un cluster vers un autre.

Chaque cluster est configuré avec 2 `BackupStorageLocations`, soit l’emplacement des backups Velero. 

Afin de faire la migration entre cluster, il est impératif que les clusters aient accès à un *bucket* partagé. 

C’est pour cette raison que le bucket `migration` a été configuré sur chaque cluster.


```bash
> kubectl get backupstoragelocations.velero.io -n velero
NAME        PHASE       LAST VALIDATED   AGE   DEFAULT
default     Available   45s              8h    true
migration   Available   45s              8h      
```


Pour faire une migration, il suffit d’exécuter le script suivant : 

```bash
#!/usr/bin/env bash

if (($# < 2 || $# > 3)); then
    echo "Usage: $0 <project> <namespace> [source-bsl]"
    echo "  project     - logical name used for backup/restore (eg. cedille)"
    echo "  namespace   - namespace to include in the backup and create on destination"
    echo "  source-bsl  - (optional) velero BackupStorageLocation name to use on the source cluster"
    exit 1
fi

PROJECT=$1
NAMESPACE=$2
BSL_ARG=${3:-}

kubectl config use-context cedille-k8s-cedille-production-v2
echo "Creating backup in source cluster (context: cedille-k8s-cedille-production-v2)"
if [[ -n "$BSL_ARG" ]]; then
  echo "Using BackupStorageLocation: $BSL_ARG"
  velero backup create $PROJECT-migration \
    --include-namespaces $NAMESPACE \
    --storage-location $BSL_ARG \
    --wait
else
  velero backup create $PROJECT-migration \
    --include-namespaces $NAMESPACE \
    --wait
fi
kubectl config use-context cedille-k8s-shared
echo "Preparing destination cluster (context: cedille-k8s-shared)"
kubectl create namespace $NAMESPACE || true

echo "Checking if backup is ready"
while [[ $(velero backup get planifets-1-migration -o json | jq '[.status.phase]' -c ) != '["Completed"]' ]];
do
  sleep 5
done

echo "Creating restore from backup: $PROJECT-migration"
velero restore create $PROJECT-restore \
  --from-backup $PROJECT-migration \
  --wait
```


Voici un example d’utilisation : 

```bash
./migration.sh cedille cedille migration
```


Le script assume que l’on veut migrer les namespaces du cluster `cedille-k8s-cedille-production-v2` vers `cedille-k8s-shared`.