如何预填充 ReadOnlyMany Persistent Volume

Nik*_*hos 6 persistent-storage kubernetes google-kubernetes-engine

我正在尝试在使用多个副本的 GKE 中创建部署。我有一些静态数据,希望在每个 pod 中都可用。此数据不会更新,无需写入。

我决定使用带有 ReadOnlyMany 存储类的相应 PVC 的 PV。问题是,我不知道如何将我的数据实际传输到该卷 - 因为它是只读的。我尝试使用

gcloud compute scp /local/path instance:/remote/path
Run Code Online (Sandbox Code Playgroud)

但当然,我收到了权限错误。然后我尝试通过控制台创建一个新的 PV。我将它附加到一个虚拟机上

gcloud compute instances attach disk
Run Code Online (Sandbox Code Playgroud)

安装并格式化磁盘,传输我的数据,卸载磁盘,将其与 VM 分离,最后按照文档创建了 PVC 。我将存储类更改为 ReadOnlyMany,唯一的区别。

但是,当我尝试将部署扩展到多个副本时,我收到一条错误消息,指出磁盘已连接到另一个节点。

那么,如何创建要在 ReadOnlyMany 中使用的卷并用数据填充磁盘?或者有没有更好的方法,因为不需要写?

提前致谢

Arm*_*vas 0

你好尼古拉斯,

您所遵循的方法在很大程度上取决于您的用例。

当您使用分布式文件系统(如 CEPH、GlusterFS 或 GCP Cloud Filestore)或远程文件系统(如 NFS)时,您采用的方法非常常见。

当使用分布式 FS 或远程 FS 时,方法是:

1.- 创建一个 PV,将 AccessMode 设置为 RWO,将回收策略设置为 RETAIN。

2.- 创建 PVC

3.- 将 PVC 连接到 POD

4.- 通过 POD 将数据传输到卷。

5.- 删除 pod、pvc 和 pv。

6.- 对于要附加数据的每个部署或 POD,创建一个新 PV,将 AccessMode 设置为 ROX,将回收策略设置为 RETAIN。如果 POD 副本数大于 1,则这不适用,因为 pod 将附加相同的 PV。

7.- 为每个 PV 创建一个 PVC。PV 和 PVC 的关系是 1 : 1 8.- 将 PVC 附加到您要使用的每个 POD 或 Deployment。

您的问题似乎是您试图将相同的 PV 附加到多个 PVC,这是不允许的,关系 PVC <--> PV 是一对一的。

关于您的其他问题是否有更好的方法,这在很大程度上取决于您的用例。Google Cloud Platform 提供了大量存储选项[1]。例如,如果您使用对象,则可以使用 Google Cloud Storage [2] 而不是持久磁盘。

[1] https://cloud.google.com/kubernetes-engine/docs/concepts/storage-overview

[2] https://cloud.google.com/filestore/docs/accessing-fileshares