Can I mount a directory inside filestore using CSI driver

Hello,

I am using filestore and the CSI driver to mount a pre-existing filestore instance. Follow these instructions: https://cloud.google.com/filestore/docs/csi-driver#access

However I would like to mount a directory inside the filestore instance. I have tried extending the volumeHandle like this:

volumeHandle: "modeInstance/FILESTORE_INSTANCE_LOCATION/FILESTORE_INSTANCE_NAME/FILESTORE_SHARE_NAME/MYDIRECTORY"

But this did not mount MYDIRECTORY. Is there a way to do this?

Thanks

Stephan

So you have an existing Filestore instance which already has a directory and you’d like to mount / access that directory from your pod?

2 Likes

Yes that’s correct

2 Likes

Yes, you can mount a directory inside a filestore using a Container Storage Interface (CSI) driver. Filestore is a managed file storage service on Google Cloud Platform (GCP) that provides a network-attached storage (NAS) for your applications. CSI drivers are used to facilitate the management and use of storage resources within Kubernetes.

To mount a Filestore instance in Kubernetes using a CSI driver, follow these general steps:

Step-by-Step Guide

1. Set Up Filestore Instance

First, create a Filestore instance in Google Cloud:

  1. Create Filestore Instance:
  • Go to the Google Cloud Console.
  • Navigate to the Filestore section.
  • Create a new Filestore instance, specifying the necessary parameters such as the region, zone, tier, and capacity.
  • Note down the IP address of the Filestore instance.

2. Set Up Kubernetes Cluster

Ensure you have a Kubernetes cluster running. You can create a cluster using GKE (Google Kubernetes Engine) or any other Kubernetes setup.

3. Install the Filestore CSI Driver

You need to install the Filestore CSI driver on your Kubernetes cluster. Google provides a CSI driver for Filestore.

  1. Install the CSI Driver:

4. Create a PersistentVolume and PersistentVolumeClaim

Create a PersistentVolume (PV) and PersistentVolumeClaim (PVC) to use the Filestore instance.

  1. Create a PersistentVolume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: filestore-pv
spec:
capacity:
storage: 1Ti
accessModes:
- ReadWriteMany
csi:
driver: filestore.csi.storage.gke.io
volumeHandle: projects/<PROJECT_ID>/locations/<ZONE>/instances/<FILESTORE_INSTANCE_ID>/volumes/<VOLUME_NAME>
persistentVolumeReclaimPolicy: Retain
storageClassName: filestore
volumeMode: Filesystem
  1. Create a PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: filestore-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Ti
storageClassName: filestore

Replace the placeholders (<PROJECT_ID>, <ZONE>, <FILESTORE_INSTANCE_ID>, and <VOLUME_NAME>) with your specific details.

5. Use the PVC in Your Pods

Now, you can mount the PVC in your pods by referencing the PVC in the pod’s volume configuration.

  1. Create a Pod:
apiVersion: v1
kind: Pod
metadata:
name: filestore-test-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- mountPath: "/mnt/filestore"
name: filestore-volume
volumes:
- name: filestore-volume
persistentVolumeClaim:
claimName: filestore-pvc

Yes, you can mount a directory inside a filestore using a Container Storage Interface (CSI) driver. Filestore is a managed file storage service on Google Cloud Platform (GCP) that provides a network-attached storage (NAS) for your applications. CSI drivers are used to facilitate the management and use of storage resources within Kubernetes.

To mount a Filestore instance in Kubernetes using a CSI driver, follow these general steps:

Step-by-Step Guide

1. Set Up Filestore Instance

First, create a Filestore instance in Google Cloud:

  1. Create Filestore Instance:
  • Go to the Google Cloud Console.
  • Navigate to the Filestore section.
  • Create a new Filestore instance, specifying the necessary parameters such as the region, zone, tier, and capacity.
  • Note down the IP address of the Filestore instance.

2. Set Up Kubernetes Cluster

Ensure you have a Kubernetes cluster running. You can create a cluster using GKE (Google Kubernetes Engine) or any other Kubernetes setup.

3. Install the Filestore CSI Driver

You need to install the Filestore CSI driver on your Kubernetes cluster. Google provides a CSI driver for Filestore.

  1. Install the CSI Driver:

4. Create a PersistentVolume and PersistentVolumeClaim

Create a PersistentVolume (PV) and PersistentVolumeClaim (PVC) to use the Filestore instance.

  1. Create a PersistentVolume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: filestore-pv
spec:
capacity:
storage: 1Ti
accessModes:
- ReadWriteMany
csi:
driver: filestore.csi.storage.gke.io
volumeHandle: projects/<PROJECT_ID>/locations/<ZONE>/instances/<FILESTORE_INSTANCE_ID>/volumes/<VOLUME_NAME>
persistentVolumeReclaimPolicy: Retain
storageClassName: filestore
volumeMode: Filesystem
  1. Create a PersistentVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: filestore-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Ti
storageClassName: filestore

Replace the placeholders (<PROJECT_ID>, <ZONE>, <FILESTORE_INSTANCE_ID>, and <VOLUME_NAME>) with your specific details.

5. Use the PVC in Your Pods

Now, you can mount the PVC in your pods by referencing the PVC in the pod’s volume configuration.

  1. Create a Pod:
apiVersion: v1
kind: Pod
metadata:
name: filestore-test-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- mountPath: "/mnt/filestore"
name: filestore-volume
volumes:
- name: filestore-volume
persistentVolumeClaim:
claimName: filestore-pvc

In this configuration, the NGINX container will mount the Filestore volume at /mnt/filestore.

Summary

By following these steps, you can mount a directory inside a Filestore using the CSI driver in a Kubernetes environment. This setup allows your applications running on Kubernetes to utilize the Filestore instance for persistent storage.

In this configuration, the NGINX container will mount the Filestore volume at /mnt/filestore.

2 Likes

Thank you for this response. But its not the solution I am looking for. I want to mount a directory that exists inside the Filestore instance and NOT the root of the Filestore instance. The mountPath doesn’t achieve this.

2 Likes

https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath

@sfolkes subPath is what you’re looking for.

1 Like