How to write to gcePersistentDisk while mounted to multiple Kubernetes pod

6/20/2018

I'm currently mounting a gcePersistentDisk to each pod in my kubernetes deployment. Since I want multiple pods to read from the disk, I have to mount it as read only. My deployment yaml file looks like this:

apiVersion: extensions/v1beta1
kind: Deployment
spec:
  replicas: 1
  ...
  ...
  template:
    ...
    ...
    spec:
      containers:
      - image: ...
        ...
        ...
        volumeMounts:
          - mountPath: /my-volume
            name: my-volume
            readOnly: true
      ...
      ...
      volumes:
      - name: my-storage
        gcePersistentDisk:
          pdName: my-disk
          fsType: ext4
          readOnly: true

Right now, in order to write new stuff to the disk, I need to scale the deployment to 0, then start a kubernetes job that mounts the disk to a single pod that has read / write access, write to the disk and then scale the deployment up again.

Is there a way I can do this without taking down all my pods? Is it possible/recommended to do something like "hot-swapping" persistent disks in kubernetes deployments?

-- simen-andresen
google-cloud-platform
google-kubernetes-engine
kubernetes

1 Answer

7/13/2018

Looking at the requirements:

1)- No other choice with the current use-case. Pods need to be scaled down every time.

2)- You can use a different type of PV, then use ReadWriteMany access mode [1] & [2].

3)- hot-swap: meaning changing the deployment (kubectl apply)? Not sure, need clarification.

4)- Another option is to use NFS [2], but that obviously is a whole different approach.

[1] https://cloud.google.com/kubernetes-engine/docs/concepts/persistent-volumes#access_modes

[2] Access Modes https://kubernetes.io/docs/concepts/storage/persistent-volumes/

-- Asif Tanwir
Source: StackOverflow