我可以在不丢失数据的情况下将 PVC 的访问模式从 RWO(标准存储类)更改为 RWX(NFS 存储类)吗?

Can I change Access mode of PVC from RWO(Standard storageclass) to RWX(NFS storageclass) without losing data?

我知道我们可以编辑 pvc 并更改为 RWX,但其中有一个缓存,我正在尝试在 GKE 中进行,所以对于我的带有 RWO 的 pvc,存储 class 是标准的,但是如果编辑为 RWX,我需要将存储 class 也更改为 NFS。

是否可以在不丢失 PVC 内数据的情况下实现这一点?

您现有的 pvc 使用的是标准存储 class,它不允许 RWX。所以这是不可能的。这意味着即使您在 PVC 配置中更改它也不会起作用。

解决上述问题的方法是备份现有的 pv 数据。为 NFS pv 创建一个具有 RWX 模式的新 pvc,并将其挂载到应用程序。将备份数据复制到挂载的卷中。

您无法将您的 StorageClass 更改为不同的并期望数据不会丢失。您甚至无法更改已创建的 StorageClass 中的大部分参数和 PVC's.Changing 存储数据的 PVC 的存储类不会将数据传输到新位置。

正如@Manmohan Mittal 所说,您需要为 NFS 存储创建一个新的 PVC class 并将现有 pv 数据的备份复制到已安装的卷。

但是,您可以将 PersistentVolume 访问模式编辑为 RWX,这将自动更新 PVC 访问模式,而不会丢失 NFS 存储中的任何数据 class。

PersistentVolume 可以以资源提供者支持的任何方式挂载到主机上。提供商将具有不同的功能,并且每个 PV 的访问模式都设置为该特定卷支持的特定模式。例如,NFS 可以支持多个 read/write 客户端,但特定的 NFS PV 可能会在服务器上导出为 read-only。每个 PV 都有自己的一组访问模式,描述该特定 PV 的功能。

在 Kubernetes Persistent Volume 中,提到 NFS 支持所有类型的访问。 RWO、RXXRWX。 PersistenceVolumeClaim (PVC) 中的 AccessModes 是一个不可变字段,一旦应用就无法更改。

您可以更改有界 PersistentVolume(PV) 访问模式,这将自动更新 PVC 访问模式。

kubectl get PV

NAME       CAPACITY     ACCESS MODES     RECLAIM POLICY          STATUS   CLAIM        STORAGECLASS       REASON         AGE 

my_pv         50Gi          RWX              Delete                  Available              standard             2d22h

kubectl edit pv my_pv 并更改为所需的访问模式。

accessModes:
     - ReadWriteMany

这将更改 PVC AccessModes,输出为

kubectl get pvc

NAME        STATUS       VOLUME         CAPACITY     ACCESS MODES  STORAGE CLASS      AGE 

 my_pvc     Bound     pvc-xxxx-xxxx-xxx     1Gi        ROX       standard            2s 

此处,PVC 是在标准存储中使用 ROX 访问模式创建的class。