Kubernetes 移动或更改卷命名空间
我们在Kubernetes中重新组织名称空间。我们希望将storageclass创建的持久卷声明从一个命名空间移动到另一个命名空间 (我们的备份工具没有帮助)。这是未记录的 在本例中,我们使用VMware storage provider,但它应该适用于任何storageClass 准备 进行*备份*备份*备份*备份*备份* 让我们设置一些环境变量并备份现有的PV和PVC资源Kubernetes 移动或更改卷命名空间,kubernetes,storage,volume,kubernetes-pvc,Kubernetes,Storage,Volume,Kubernetes Pvc,我们在Kubernetes中重新组织名称空间。我们希望将storageclass创建的持久卷声明从一个命名空间移动到另一个命名空间 (我们的备份工具没有帮助)。这是未记录的 在本例中,我们使用VMware storage provider,但它应该适用于任何storageClass 准备 进行*备份*备份*备份*备份*备份* 让我们设置一些环境变量并备份现有的PV和PVC资源 NAMESPACE1=XXX NAMESPACE2=XXX PVC=mypvc kubectl get pvc -n
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
改变光伏政策
如果您的永久卷(或存储提供程序)具有PersistentVolumeClaImpolicy=Delete,请确保将其更改为“Retain”,以避免在删除下面的PVC时丢失数据
运行以下命令:
kubectl patch pv "$PV" -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
然后检查:
kubectl describe pv "$PV" | grep -e Reclaim
移除PVC
手动删除持久卷声明(您有一个副本,对吗?)
修改持久卷(PV)
当PVC首次使用PV时,它会附加到名称空间。此外,PV被“连接”到PVC(通过它的uid:
,而不是通过它的名称)
更改PV的命名空间。临时使用PVC“名称”来“锁定”该PVC的PV(而不是PVC uid)
检查我们现在拥有的:
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,但请在元数据部分中删除名称空间:
,自链接:
,uid:
此命令应该可以工作(它重复使用以前的PVC),但您可以使用自己的kubectl apply
命令
grep -v -e "uid:" -e "resourceVersion:" -e "namespace:" -e "selfLink:" /tmp/pvc.yml | kubectl -n "$NAMESPACE2" apply -f -
将PVC分配给PV
在这一点上,PV被限定为前PVC的名称(但它可能不起作用,并且不是标准配置)。运行kubectl description-n“$NAMESPACE2”pvc“$pvc”
将投诉状态:丢失
和/或警告类错误
。那么,让我们来解决这个问题:
检索新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应为状态:绑定
恢复策略=删除
PV再次处于绑定
状态后,您可以恢复回收策略:
kubectl patch pv "$PV" -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
## Check :
kubectl get pv $PV -o yaml | grep -e Reclaim -e namespace
瞧你使用什么备份工具?我想知道在Velero
中是否可能。Velero似乎支持。我不使用它@马修
kubectl patch pv "$PV" -p '{"spec":{"claimRef":{"uid":"'$PVCUID'","name":null}}}'
kubectl patch pv "$PV" -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
## Check :
kubectl get pv $PV -o yaml | grep -e Reclaim -e namespace