Share a persistent disk between Google Compute Engine VMs

Solution 1:

Update: this is available as of 2020-06-16

As per another answer by Matthew Lenz, the functionality for creating multi-writer persistent disks is available, but it's still in alpha status (even though it's documented as being in the beta track) and requires special per-project enablement.

Note: This GitHub issue notes that the functionality is still in alpha, even though it's labelled as beta. You can submit feedback via Cloud Console to request it for your project if you'd like to get early access to this functionality, but it's not guaranteed to be enabled.


Assuming your project has the permissions to use this feature (or the feature becomes public-access), note that it comes with some caveats:

--multi-writer

Create the disk in multi-writer mode so that it can be attached with read-write access to multiple VMs. Can only be used with zonal SSD persistent disks. Disks in multi-writer mode do not support resize and snapshot operations.

You can use this via:

$ gcloud beta compute disks create DISK_NAME --multi-writer [...]

Note the caveats:

  • zonal SSD persistent disks only
  • no disk resizing
  • no snapshots

If these trade-offs are not acceptable to you, see the original answer (below) which has a long list of recommended storage alternatives for sharing data between multiple GCE VMs.


Original answer (valid prior to 2020-06-16)

No, this is not possible, as the documentation that you cited at the time of writing said (since updated):

However, if you attach a persistent disk to multiple instances, all instances must attach the persistent disk in read-only mode.

The documentation has been re-arranged since then; the new docs are at a different URL but with the same content:

You can attach a non-root persistent disk to more than one virtual machine instance in read-only mode, which allows you to share static data between multiple instances. Sharing static data between multiple instances from one persistent disk is cheaper than replicating your data to unique disks for individual instances.

If you attach a persistent disk to multiple instances, all of those instances must attach the persistent disk in read-only mode. It is not possible to attach the persistent disk to multiple instances in read-write mode. If you need to share dynamic storage space between multiple instances, connect your instances to Cloud Storage or create a network file server.

If you have a persistent disk with data that you want to share between multiple instances, detach it from any read-write instances and attach it to one or more instances in read-only mode.

which means you cannot have one instance have write access while another has read-only access.

If you want to share data between them, you need to use something other than Persistent Disk. Below are some possible solutions.

You can use any of the following hosted/managed services:

  • Google Cloud Filestore — perhaps closest to what you're looking for, as it provides an NFSv3 file system
    • You can also use Elastifile on GCP as a fully-managed service; note that GCP acquired Elastifile in July 2019
  • Google Cloud Datastore
  • Google Cloud Storage, which you can use via the GCS API (JSON or XML) or you can mount it using gcsfuse as a block device
  • Google Cloud Bigtable
  • Google Cloud SQL

Alternatively, you can run your own:

  • self-managed or third-party managed file servers solutions, including NetApp and Panzura
  • self-managed Elastifile storage deployment (for fully-managed, see previous section for the link)
  • database (whether SQL or NoSQL)
  • distributed filesystem such as Ceph, GlusterFS, OrangeFS, ZFS, etc.
  • file server such as NFS or SAMBA
  • single VM as a data storage node, and use sshfs to create a FUSE mount from other VMs that want to access that data

Solution 2:

GCP has alpha functionality for 'multi-write' persistent disks. It's been in alpha for quite a long time so who knows if it'll make it to beta or ga any time soon. Here is a link to the documentation. https://cloud.google.com/sdk/gcloud/reference/beta/compute/disks/create#--multi-writer EDIT: 2020-06-16. This has been promoted to beta.