Хочете змінити StorageClass для ваших PV?

Якщо відповідь так, продовжуйте читати. Нещодавно один з моїх клієнтів попросив мене мігрувати Kubernetes кластер з GKE на інший хмарний провайдер як нефіксований кластер. Я вважаю, що найскладнішим та найчасовитратнішим завданням є міграція даних з GKE кластеру до нефіксованого кластера, тому я вирішив використати Longhorn як частину мого рішення цієї проблеми, але в GKE кластері ми не використовували Longhorn, тому Persistent volumes (Постійні томи) використовували рідний для GCP storageclass (kubernetes.io/gce-pd). Після того, як я пошукав рішення цієї проблеми, я вирішив використати Rsync для копіювання даних між PV. Ось підхід, який я використовував:

  1. Я створив відповідні pvc/pv зі storageclass longhorn.
  2. Я створив простий Docker-образ для rsync.
  3. Я розгорнув простий pod, щоб копіювати дані з оригінального pvc на новий pvc.
cat << EOF | k apply -f-  
apiVersion: v1  
kind: Pod  
metadata:  
 name: migrate-pv-1  
 namespace: default  
spec:  
 affinity:  
 nodeAffinity:  
 requiredDuringSchedulingIgnoredDuringExecution:  
 nodeSelectorTerms:  
 - matchExpressions:  
 - key: kubernetes.io/hostname  
 operator: In  
 values:  
 - ""  
 containers:  
 - command:  
 - sh  
 - -c  
 - |  
 set -x  
 n=0  
 rc=1  
 retries=10  
 attempts=$((retries+1))  
 period=5  

 while [[$n -le $retries]]  
 do  
 rsync -av --info=progress2,misc0,flist0 --no-inc-recursive -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=5" -z /source// /dest// && rc=0 && break  
 n=$((n+1))  
 echo "rsync attempt $n/$attempts failed, waiting $period seconds before trying again"  
 sleep $period  
 done  

 if [[$rc -ne 0]]; then  
 echo "rsync job failed after $retries retries"  
 fi  
 exit $rc  
 image: /rsync-image:v1  
 name: rsync  
 volumeMounts:  
 - mountPath: /source  
 name: vol-0  
 readOnly: true  
 - mountPath: /dest  
 name: vol-1  
 restartPolicy: Never  
 volumes:  
 - name: vol-0  
 persistentVolumeClaim:  
 claimName: data-minio-distributed-0  
 readOnly: true  
 - name: vol-1  
 persistentVolumeClaim:  
 claimName: minio-distributed-0  
EOF

Інший варіант — використати чудовий проект https://github.com/utkuozdemir/pv-migrate.

Дякую.

Перекладено з: Do you want to change Storageclass to your PVs?

Leave a Reply

Your email address will not be published. Required fields are marked *