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