请教各位大佬, 我在本地环境有一个 k8s 集群,需要更换 nfs-server ,如何完成 pv/pvc 迁移?
1
jusk9527 15 小时 1 分钟前 ![]() 可以创建新的 pv/pvc 进行绑定
|
![]() |
2
vus520 12 小时 54 分钟前
我理解哥们不想手动创建新的 pv/pvc 进行绑定,是不是想数据拷贝以后,直接修改 NFS 存储类的 IP 地址?
|
![]() |
4
vus520 12 小时 37 分钟前 ![]() 看你的业务复杂度,如果业务简单,可以重启集群的话,可以强制修改存储类的地址,或者直接改 etcd 中的地址,然后重启集群。
我们的业务太复杂,没办法这么干,就批量复制了 pv/pvc 然后重新绑定,当然,这个过程是程序化的。 |
5
feedcode 10 小时 47 分钟前 ![]() 删掉 PV 后重建,记得 spec.claimRef 保持和之前的一样,PVC 会重新 Bound
while read share;do echo "check $share" kubectl get pv $share -o yaml > "$share-origin.yaml" ns=$(yq '.spec.claimRef.namespace' "$share-origin.yaml") pvc=$(yq '.spec.claimRef.name' "$share-origin.yaml") echo "$ns $pvc" if [ ! -f "all-pods-$ns.yaml" ] ;then kubectl get pods -n $ns -o yaml > "all-pods-$ns.yaml" fi podname=$(yq ".items[]|select(.spec.volumes[].persistentVolumeClaim.claimName==\"$pvc\")|.metadata.name" "all-pods-$ns.yaml") echo "pods $podname will be deleted" # patch pv kubectl patch pv $share -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}, "metadata":{"finalizers":null }}' --type=merge kubectl delete pv $share --wait=false sleep 5 kubectl delete pod -n $ns $podname sleep 10 kubectl get pv $share || echo deleted # recreate PV here sed -e "REPLACE-HERE" "$share-origin.yaml" >"$share-new.yaml" kubectl create -f "$share-new.yaml" done<pv-shares.txt |
6
iStarBoy 9 小时 59 分钟前
我觉得这句话丢给 gpt 给的方案可以很详细 ( x
我之前是停止服务手动创建新的 pv (同名) 然后复制数据进去的 反正 nfs 的数据都能挂载操作 |