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.


> 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 :

#!/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 :

./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.