K8s nfs static pv full,如何使用新的备份 nfs static pv 更新 "pvc/pv" 而无需重新安装所有

K8s nfs static pv full, how to update "pvc/pv" using new backup nfs static pv without reinstall all

问题:

我有一个使用静态 NFS PV 的弹性集群。我如何将这些数据移动到另一台服务器有更多 space (already did, just copy it) 保持应用程序应用新的备份数据而无需重新安装所有内容 。 我在 Centos 7 上使用 Rancher(没有 VM Sphere)。

我的尝试:

错误信息:

# persistentvolumeclaims "data-core-container-log-elasticsearch-data-0" was not valid:
# * spec: Forbidden: is immutable after creation except resources.requests for bound claims

可能有多种解决方案,这对我来说是解决了你在上述场景中提到的所有问题。

假设 nfs 驱动器已满,在 10.20.4.101 处获取了一个带有 nfs 卷声明的有状态集。我将所有数据重新定位并复制到另一个虚拟机 10.20.4.102.

现在,在我保留旧配置的同时,我在同一命名空间中创建了一个新的 PV 10.20.4.102,但标签与原始 PV 不同,如下所示

New Settings
metadata:
  name: my-pv-1
  namespace: pv-test
  labels:
    volume-type: pv-1
Old Settings
metadata:
  name: my-pv
  namespace: pv-test
  labels:
    volume-type: pv

这会在您的命名空间中创建一个新的 PV,您可以在 kubectl get pv 中看到状态为 Available 而其他状态为 Bound

现在将您的 statefulset yaml 文件字段 volume-type 更新为与新 pv 中的标签相同的新字段,并将 volumeClaimTemplates 中的名称更改为新名称。现在不要应用此设置。

New
volumeClaimTemplates:
  - metadata:
      name: pv-data-1
      namespace: pv-test
    selector:
       matchLabels:
       volume-type: pv-1
Old
volumeClaimTemplates:
  - metadata:
      name: pv-data
      namespace: pv-test
    selector:
       matchLabels:
       volume-type: pv

因为你肯定不能直接申请,这会引发类似 Forbidden: updates to statefulset spec for fields other than `replicas`, `template` and `updateStrategy` are forbidden. 的错误。

现在您可以删除并重新创建整个 statefulset,只需稍作停机。或者你可以用 --cascade=false flag

来做这个小技巧
kubectl delete statefulset mystatefulset -n pv-test --cascade=false

这只会删除有状态集而不是有状态集中的 pods,如果您监视命名空间中的所有资源,它将删除有状态集而不是 pods 或任何资源.保持所有应用程序仍在访问应用程序 运行.

现在 apply 更新的 statefulset 这将创建具有不同 pvc 的新 statefulset。但是你的 pods 仍然指的是旧的 pvc 和 pv.

现在只需使用 kubectl delete pod mypod-0 -n pv-test

删除 pod

这将删除 pod,但 statefulset 在后台创建一个带有新 pvc 的新 pod,因为它被删除。现在,如果你使用 kubectl pv 和 pvc,你会观察到会有一个额外的 pvc,带有 Available 的 pv 将变成 Bound 并由 pvc 声明。

手动删除所有 pods,statefulset 负责重新创建。一切完成后,先手动删除旧的pvc,然后再删除旧的pv。

您可能已经尝试了所有这些并且了解所有这些,为了清楚起见,我在这里写下了所有步骤,而不是含糊地解释。

希望这对您有所帮助。