k8s 下 nfs-provisioner 迁移

1 天前
 fitme

请教各位大佬, 我在本地环境有一个 k8s 集群,需要更换 nfs-server ,如何完成 pv/pvc 迁移?

687 次点击
所在节点    Kubernetes
7 条回复
jusk9527
1 天前
可以创建新的 pv/pvc 进行绑定
vus520
1 天前
我理解哥们不想手动创建新的 pv/pvc 进行绑定,是不是想数据拷贝以后,直接修改 NFS 存储类的 IP 地址?
fitme
1 天前
@vus520 对,但是好像修改不了,pv 创建后不支持修改 nfs 地址,还没搞懂这块。怎么搞比较简单快速
vus520
1 天前
看你的业务复杂度,如果业务简单,可以重启集群的话,可以强制修改存储类的地址,或者直接改 etcd 中的地址,然后重启集群。
我们的业务太复杂,没办法这么干,就批量复制了 pv/pvc 然后重新绑定,当然,这个过程是程序化的。
feedcode
1 天前
删掉 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
iStarBoy
1 天前
我觉得这句话丢给 gpt 给的方案可以很详细 ( x
我之前是停止服务手动创建新的 pv (同名) 然后复制数据进去的 反正 nfs 的数据都能挂载操作
dode
9 小时 30 分钟前
换服务器可以立即,但是一定要换 IP 地址吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1158514

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX