diff --git a/utils/data-migrate/README.md b/utils/data-migrate/README.md new file mode 100644 index 0000000..38457ef --- /dev/null +++ b/utils/data-migrate/README.md @@ -0,0 +1,11 @@ +1. run the application you need +2. wait for its PVs to be created +3. suspend the application: `kubectl scale deployment/statefulset/... NAME -n NAMESPACE --replicas=0` +4. wait for it to scale down so that the ReadWriteOnce PVs are released (or data-migrate will not be able to mount them) +5. look up the destination PVC name you need: `kubectl get pvc NAME -n NAMESPACE` +6. put the source host(node) and dir and destination PVC name to `install.yaml` +7. install the data-migrate: `kubectl create namespace data-migrate && kubectl delete pod data-migrate -n data-migrate --ignore-not-found=true && kubectl apply -f install.yaml` +8. run the migration: `kubectl exec data-migrate -n data-migrate -- cp -a /old/. /new/` or anything you need instead of `cp` +9. validate you have everything migrated: `kubectl exec data-migrate -n data-migrate -- ls -laR /new` +10. uninstall the data-migrate: `kubectl delete pod data-migrate -n data-migrate` +11. resume the application back: `kubectl scale deployment/statefulset/... NAME -n NAMESPACE --replicas=1` \ No newline at end of file diff --git a/utils/data-migrate/install.yaml b/utils/data-migrate/install.yaml new file mode 100644 index 0000000..e800337 --- /dev/null +++ b/utils/data-migrate/install.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Pod +metadata: + name: data-migrate + namespace: data-migrate +spec: + restartPolicy: Never + containers: + - name: migrate + image: busybox + command: ["sleep", "3600"] + volumeMounts: + - name: old-data + mountPath: /old + - name: new-data + mountPath: /new + nodeName: + volumes: + - name: old-data + hostPath: + path: + - name: new-data + persistentVolumeClaim: + claimName: \ No newline at end of file