data-migrate utility

This commit is contained in:
azykov@mail.ru
2026-07-20 20:57:55 +03:00
parent 2989700647
commit dea1346094
5 changed files with 60 additions and 25 deletions
+8 -8
View File
@@ -4,19 +4,19 @@ metadata:
name: radicale-secrets
namespace: radicale
stringData:
users: ENC[AES256_GCM,data:dFoE2mjx/6RI4ExttguKxUb3VOhbZhE5z9lYe/XVAAmB8LeAPt6ikV+05ZdIPRjJeuC7ay/OV7dl7Xq2n8e/2RRc36aBvrIUE+1mgsWh5gulLm3ij8XmxNFUik/sdwSAr6+8DyYYB6a1/2TmeyzmKPxhzl1sdBm8C1XDe6DsN8vg9dM6m/HCuQ==,iv:2M7ZeAku2t/T33WLz+9cFFxkgKbTF4jf7+Nbu/s+bik=,tag:9cdCQqwcw2Xi/50Gu1TORQ==,type:str]
users: ENC[AES256_GCM,data:SVe+X2tOO1skqK47Y8HrSmSXTRFhEVEB0my54448d3F/JwgboEG+hwnKcVOpKzXFINkIpvVOi5Y6eZJ4LRiTt69zLT2zG9GVZS5HLA8X2BDAU9Im4vbyQhFX72wBYRAzSQHJYuipgl+iyttaP8VwWoHO/16OY3HPhbxHes6g6Y+JlybCHbzvrw==,iv:KmlVYIrdwUZ+CpGx1k9D66aKdf7UaruQwGSLuCHTQ4M=,tag:t3BmeBQknv4QVzaOM7P3Hw==,type:str]
sops:
age:
- recipient: age1nqjekn6qk8uqunyv5cl88nx9g3y8a94h5qr0u53q5dsdsmhr7g2syy6fsd
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByNDBKcE55a0E5MHdWTnYz
Qzd1SitRWVduWVMrSDFUUUtkOWZLNFVLdUFzCkdJbW1jc0U4Z0tTSXlPbjY3REZL
Um1iNW4vcDNuRStTZGVYYkxWK0NDOUUKLS0tIG1ORllYNnlDell4TnkvanBGTW13
azVwMUk4Mk9pMkJTL1RwK1A2ajEzcXcKf8O4WrUGYIYVEKGC0K5jj5YzxpKj4C48
XJZwkghwu1Feek4OplfkZvPJ4TIjUt9IKuHMFA+xh35q0j02BKKXzg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4YVN4Q2N3d216LzJrVEwy
SHRSR3EwZUwzbkNEdHhEN1ZaTmkwM2NZL0cwCkh4b2RGYXc3QVhFaE41T0V1YlY4
R01yTEs2SDhZbzVYdDhzMHBtTTdsOGcKLS0tIERtN3U5T054VFQ1bVM0cGUyUzFK
UTF2cnFwZWtGRGxSblBnZERQT1drcE0KpXz/psOXMH5/Ikl7UQ0W5LTesLv0wOFd
UHtwITdFJpXpVmyz3nJPzl/T+c+GKpfjNThcqY1iXYdeubSPFl/Iuw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:17:48Z"
mac: ENC[AES256_GCM,data:uF+TeD8ovIkbd9z/OfOiEikvHoJR62z9mAsekVk3KwDMLZ7YdpbyR/GKHX0RXGPbJUAL+C0OVflp027mt0hjfGO6yD4hKvzLhaazNlOHgVJh30yc6/0QVc5BwMYb+U3WKPnZwXCIUkqEZYAVpmIM+UhKk6W7599KjBjfVJtFx5E=,iv:9j913XVhXm26MI6Ba2cfs/VCjSz+P+garnLRtL2HW2c=,tag:uSj6PX1Z02wIRe8AFT9gzg==,type:str]
lastmodified: "2026-08-26T10:17:51Z"
mac: ENC[AES256_GCM,data:eO2TYUDwsaQXvDQgvuXayJ96/bjHnqkQFyc+0JQImTDG3g5JAFzWkyIInXo03IcDf4PrlNL1VKB3jJrO8YrASwfC53r2PqFuggkFCquHPeQQaF5ZkOg3QELsypuccT1mWzfDdX2MPflpc4IoSF5luGvaoA6yZC+4QEBaA1RWfOI=,iv:Cx6Q+EAoNjtDJe8nsK47CWVGI5rYAPS5ZJU2AuLs/Go=,tag:fCwkOJQO4T3BlK2n+/wHKA==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -4,20 +4,20 @@ metadata:
name: vaultwarden-secrets
namespace: vaultwarden
stringData:
#ENC[AES256_GCM,data:jp2kdvwxPjG8rrYikVm8nXnuZeNpQsf88p7Q5L+xFabJSKuDB5wJrYj3LHV4f3XvMxo5dIcl35wM,iv:8B5dc9BKGGbampxf5ks7c7HpwPpj3kmqyiSfoX7jCuo=,tag:7eEiJIKLLOHmXqN1iQI+0w==,type:comment]
ADMIN_TOKEN: ENC[AES256_GCM,data:Si0uO4J8HuJTB1lyFJ8T96YXqaJf06zcYCfpIHbKGHy8NEhzD3Y558GQANUS2myaYMl59kHB5Vn450M3z2jVHlB7A3+5iJJhrWLdu1rqha0DeZiRFfuFf6xoZbZZ3wRZfigps2Fqft+32E68OSn/9GJWdXsD7Q==,iv:HsAe8YGphRS4oN/zcLlNjKq1r9+0TNtgq9hmCpTkePk=,tag:MmivEEtZd5geXjm6+c24Ug==,type:str]
#ENC[AES256_GCM,data:+pADpFTk7bOhY/qxT0Gz1GSKFW38PK0EOn0zm1LD0D4tJ8cd+rvRdF3aNsj1EoKC3ONwAXGScsd9,iv:dHg8i4m/156oFXjeZoBSeHbUHa8jEMKbznQH1sk69aE=,tag:f3ROFD2UsJk2HaVQIUgvgg==,type:comment]
ADMIN_TOKEN: ENC[AES256_GCM,data:tvNeaxVILprFBMElHkUGSV/+LQ4lRItPi0adrPDAA2LjsxGjaSRqznWMAskgRPhvFoD9fGfjaduDyJLFLyIx0sQT0QniRWzNPTst8arj6745+pxYs6jfTmt1FmqgrvkDfbV6TQF2tGtKg6qPuw6wQFRLOeA1jA==,iv:LmbjBV7zyzUZw0ryiYtTncDqqm3B/5D+G9UNNEEEQSw=,tag:BBUjxwWeuhvjk1Y7cv/s4g==,type:str]
sops:
age:
- recipient: age109zta6l0cwpkxn5wek82kvauxn6yqrq80rsz4mvu5atdnpcn9pusuvnqk5
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLMEgwSUhoNS9MSS9kYzdX
OHNiRDA4U1hyK2pQOUw3Nk9MUDhMVnNSZDJZCkJBSzNURlBwSVBXeXMwcldzQkdr
aFlob056U2RvanQ3anVCQm5mdCtFVWcKLS0tIHRmWi9JaUtEd3BCZVBDeTd1NWJQ
VmhEbnNEZVN4eDUzUWFjVEtqejBISkUKSwCxyNlNP/ooQEtgX/aVK53NoVXyd8tH
r1tny5l6KyWAYClOqYXWwwf8tp5Gro3YOfTYxsQdaWeb02HkW6vjOg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHRDNxRnFJNXFEcTlHZklJ
cmlzWTR2NFRaUkNVV3pISlpJTEVHSUV5VFIwCnd0NHYvS3A0c21JSTF6V2lvdnJG
ZjNCdk9vOEtKdWJuZnpYWE9kZnQ4YWMKLS0tIDNNMFV0VkJ3Qm5ybFViV2o4cVRt
aVZHWitsemcrU05td21YK01Kc1NGSE0KRs4ulUT2+qEvEf589RczFZSuK7joxqHo
X2DIlKkkgcPapPKzQv2wFb3ZOtpACKf28z4zbXzqML7uHcpwBbzrQw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:17:48Z"
mac: ENC[AES256_GCM,data:zGMJ2UWeqx/0S8APQ5+sijt68ntvhLF37ER5qxyhKcx4OyZhO/bjYGo7Nwvk4sAhYSq+nixiDWKUW2XaDWE1TTE2xiOtUmRv6Yao72WicRzT1RkaeL3GPUKrVFmX0rIVRQwOuCMxLVNewMmTx3DlHearBxIXVO6BVYOU2EiDIJs=,iv:8UUEnjl5VWKjxCRzvoc1hkpxaxnnaCtqCBPVsS402N8=,tag:WePuujjk5tLl109ssYlH7w==,type:str]
lastmodified: "2026-08-26T10:17:52Z"
mac: ENC[AES256_GCM,data:QiULStHctOOXKs77VrxGlusBxd4+80kJzZx7IPHaQ5jferre8NQx3wl+rQwLJmYiiri1ifVV5PuptQvniFNrs7tH3SH9WowJgvR+FCPbN8H72CtQRppwNj2mzMoik0RN+gXnRAtPYDJdz1L7HKg8COLjGNbwBtBCVnKMn6C2mqA=,iv:OEYB9U9CjVEnRo26UTl1A8WgIC0WZWoc4zABSngm5Aw=,tag:/Iyk7tztL8Vgh/alTBMHBQ==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -4,19 +4,19 @@ metadata:
name: zigbee2mqtt-secrets
namespace: zigbee2mqtt
stringData:
secret.yaml: ENC[AES256_GCM,data:W8OSElMPX5j+lu5kVfn+eouGeN0g3PuCkjTOI+2Coltegt80kBGXy1lzuC7t/B0Wf4iVpM7miGLscgK2uRLBmPWAmzk9KkU8p06G4XqhvtVmFEhL66fFk3d113P3bbb9UDNjgwNrE85BAvCMdM92Vs7lUogi+2d6Xko1pu0=,iv:YioWooOrpokFfV6mHWcTOK2wvXl+0Ys/opyIrYRYb48=,tag:pcTAwqwPbxoZkbClhHEsyg==,type:str]
secret.yaml: ENC[AES256_GCM,data:aW2sz89BvgbMHHYcTqpKdt1zYmTOXneb5tlPIeWbJyWMt9zJtCn7Jn5uxQCj/1IKt+z7jCQdW6Yb/CPkQo36cVGfz6SLpvLPqfupDd/RDCrjcj6zK1CXY7OPejp6F0CRfFm3D/dMoiU+4ngpSYy7Pde5nuLsCMo9tAKECHk=,iv:+6rzGzV/lcBpmyeowRZgNbNzKWk3/HQAffx62iRJC6Q=,tag:YG8nUAyO1Nlv3LFVj9fpag==,type:str]
sops:
age:
- recipient: age1tu4xgfefvgdda0vn2thaqndq4p9tuydq2ud6qa98tzzgnff6749qnlcx29
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4OGNFa2VyRFNhK0d0Y0xz
S2tyN2V4REFtbER1dHVCRXV2RjNSbEFXZG13CkljL2RTdmhjbDJRR3pUN09sWEkw
SzVwdGxZeDhNbGpHR09sNXNHYzJXWGsKLS0tIHlWSVJ6OFZVZVl4M2VRWkRkRGhl
R01tK2dPMWtrdi9EL0hBSHhsOXh1MGsKPt12B452HLP8R7DdAptL3nJ+/s3QMrSP
dM4YfL6YnCFKreP9MhTev00FP9cFDZRwN2fBvklPq/AP/HXAqw9Pjg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEMUJuVFA4NnI0UjJlNTZx
ZTF0dkJGMWEyd2ZNWjAzV1BDY1RoNmI5TUV3CkhSTGlsbFJTU283VnA4NUNjYk02
Z3E2T0NSTVBteWt3RVhKTlhnU0tjSlUKLS0tIGc0V1lYUy9mcDJsL0N5bmZRT1Bn
WUZrNDZvREZ3ZFRIWGptVGRhRzMrOWsKoSlR+NGPPWC03CEloEAfThUu5GLRKf55
zc6zi76KdGo4apDZ0Ikd2qjlWL/9IrpFxD7j5zIEsljTnKJZVH7YTg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:17:49Z"
mac: ENC[AES256_GCM,data:b9/Ype3gv8sptpyiR7gF6LTMWxsB8WO+/Y7GY84o0/adkedVDpxE4z03NECcVHbCXqqOy37wLfj2BKAnFejyOHTbGlRmWkVHsQ0jlekhP9gZhAv0pA/JGVftT4AuM/pL9/Ciha1KyeBHSGLDVON5YE9W5i1E+TCH464jD/OMz0M=,iv:mBcS3TXcrSj5FvuNs6RDEHlxO9qimqokYKZFWhqgacY=,tag:uHhUFzGKoTaXz3n10B1RAg==,type:str]
lastmodified: "2026-08-26T10:17:53Z"
mac: ENC[AES256_GCM,data:BIOhrUPLRJ0Ltpsi9L4ZSsZzT+I2m7B04FUNqS9GbIOGtMjFxVXSyhfNFDw3D+7Q4oeG4NdTSQ+2wvK88D4QN/szXagZjmY7kHRtF9Hn33vcoz7HVTOAkSnw0gFUvVKmd31yT/yK62HkSFnscQNqyXGglBrsutcYdAf56S8e7iE=,iv:GCIJRqyHJRagXO0eNcKmb9io3TvcKOOlSLVHZRoUS/w=,tag:gY1PBP6vAKkAwL9AVeXngw==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
+11
View File
@@ -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`
+24
View File
@@ -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: <NODE_NAME_THAT_HAS_DIR_YOU_WANT_TO_MIGRATE_FROM>
volumes:
- name: old-data
hostPath:
path: <DIR_YOU_WANT_TO_MIGRATE_FROM>
- name: new-data
persistentVolumeClaim:
claimName: <PVC_YOU_WANT_TO_MIGRATE_TO>