gpt4 book ai didi

kubernetes - 移动或更改卷命名空间

转载 作者:行者123 更新时间:2023-12-04 12:09:41 25 4
gpt4 key购买 nike

我们在 Kubernetes 中重新组织了我们的命名空间。我们希望将存储类创建的持久卷声明从一个命名空间移动到另一个命名空间。
(我们的备份工具没有帮助)。

最佳答案

这是无证的。
在本示例中,我们使用 VMware 存储提供程序,但它应该适用于任何存储类。
准备
做一个 * 备份 * 备份 * 备份 * 备份 * 备份 * !!!
让我们设置一些环境变量并备份现有的 PV 和 PVC 资源

NAMESPACE1=XXX
NAMESPACE2=XXX
PVC=mypvc

kubectl get pvc -n $NAMESPACE1 $PVC -o yaml | tee /tmp/pvc.yaml

PV=pvc-XXXXXXXXXXXXX-XXXXXXXXXXXX

kubectl get pv $PV -o yaml | tee /tmp/pv.yaml
更改 PV 的 ReclaimPolicy
如果您的持久卷(或存储提供程序)具有persistentVolumeReclaimPolicy=Delete,请确保将其更改为“保留”以避免在删除下面的 PVC 时丢失数据。
运行这个:
kubectl patch pv "$PV" -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
然后检查:
kubectl describe pv "$PV" | grep -e Reclaim
去除PVC
手动删除持久卷声明(您有副本,对吗?)。
kubectl delete -n "$NAMESPACE1" "$PVC"
修改持久卷 (PV)
当 PV 首次被 PVC 使用时,它会附加到命名空间。此外,PV 变得“附加”到 PVC(通过它的 uid: ,而不是它的名字)。
更改 PV 的命名空间。临时使用 PVC“名称”来“锁定”该 PVC 的 PV(而不是 PVC uid)。
"kubectl patch pv "$PV" -p '{"spec":{"claimRef":{"namespace":"'$NAMESPACE2'","name":"'$PVC'","uid":null}}}'
检查我们现在有什么:
kubectl get pv "$PV" -o yaml | grep -e Reclaim -e namespace -e uid: -e name: -e claimRef | grep -v " f:"
创建新的 PVC
在新命名空间中创建 PVC。确保明确选择要使用的 PV(不要使用 StorageClass 来配置卷)。通常,您可以复制原始 PVC YAML,但删除 namespace: , selfLink: , uid:metadata: 部分.
这个命令应该可以工作(它重新使用以前的 PVC),但你可以使用你自己的 kubectl apply命令。
grep -v -e "uid:" -e "resourceVersion:" -e "namespace:" -e "selfLink:"  /tmp/pvc.yml | kubectl -n "$NAMESPACE2" apply -f -
将 PVC 分配给 PV
此时,PV绑定(bind)到以前的PVC的名称(但它可能不起作用,并且不是标准配置)。运行 kubectl describe -n "$NAMESPACE2" pvc "$PVC"会投诉 Status: Lost和/或 Warning ClaimMisbound .所以让我们解决这个问题:
检索新 PVC 的 uid:
PVCUID=$( kubectl get -n "$NAMESPACE2" pvc "$PVC" -o custom-columns=UID:.metadata.uid --no-headers )
然后相应地更新 PV:
kubectl patch pv "$PV" -p '{"spec":{"claimRef":{"uid":"'$PVCUID'","name":null}}}'
几秒钟后,PV 应该是 Status: Bound .
恢复 PV ReclaimPolicy=删除
一旦 PV 在 Bound再次声明,您可以恢复回收策略:
kubectl patch pv "$PV" -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'

## Check :
kubectl get pv $PV -o yaml | grep -e Reclaim -e namespace

关于kubernetes - 移动或更改卷命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66078689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com