GKE Storage
Routing Note: For Cloud Storage FUSE (
gcsfuse) mounts or the GKEgcsfuse.csi.storage.gke.ioCSI driver, opengoogle-cloud-storage-fuse/SKILL.md.
This reference covers storage configuration for GKE clusters including persistent disks, file storage, and cloud storage integration.
MCP Tools:
apply_k8s_manifest,get_k8s_resource,describe_k8s_resource,get_cluster
Golden Path Storage Defaults
The golden path Autopilot config enables these CSI drivers:
| Driver | Golden Path | Access Mode | Use Case |
|---|---|---|---|
| Compute Engine | Enabled (default) | ReadWriteOnce | Block storage for |
| : Persistent Disk : : : databases, : | |||
| : CSI : : : single-pod workloads : | |||
| Google Cloud | Enabled | ReadWriteMany | Shared NFS for |
| : Filestore CSI : : : multi-pod access : | |||
| Cloud Storage | Enabled | ReadWriteMany / | Mount GCS buckets as |
| : FUSE CSI : : ReadOnlyMany : volumes : | |||
| Parallelstore | Enabled | ReadWriteMany | High-performance |
| : CSI : : : parallel file system : | |||
| Boot disk type | pd-balanced | N/A | Node boot disks |
StorageClasses
Default StorageClasses
GKE provides built-in StorageClasses:
| StorageClass | Disk Type | Use Case |
|---|---|---|
standard-rwo | pd-standard | Cost-effective, low IOPS |
premium-rwo | pd-ssd | High IOPS, databases |
standard-rwx | Filestore (Basic HDD) | Shared NFS |
premium-rwx | Filestore (Basic SSD) | Shared NFS, higher performance |
Custom StorageClass
yamlapiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-regional provisioner: pd.csi.storage.gke.io parameters: type: pd-ssd replication-type: regional-pd # Replicate across 2 zones volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true # Always enable for production
PersistentVolumeClaims
Block Storage (ReadWriteOnce)
yamlapiVersion: v1 kind: PersistentVolumeClaim metadata: name: database-pvc spec: accessModes: - ReadWriteOnce storageClassName: premium-rwo resources: requests: storage: 100Gi
Shared File Storage (ReadWriteMany via Filestore)
yamlapiVersion: v1 kind: PersistentVolumeClaim metadata: name: shared-data spec: accessModes: - ReadWriteMany storageClassName: standard-rwx resources: requests: storage: 1Ti # Filestore minimum is 1 TiB for Basic tier
GCS Bucket Mount (Cloud Storage FUSE)
Mount a GCS bucket as a volume without a PVC:
yamlapiVersion: v1 kind: Pod metadata: name: gcs-reader annotations: gke-gcsfuse/volumes: "true" spec: containers: - name: reader image: busybox command: ["ls", "/data"] volumeMounts: - name: gcs-bucket mountPath: /data volumes: - name: gcs-bucket csi: driver: gcsfuse.csi.storage.gke.io readOnly: true volumeAttributes: bucketName: <BUCKET_NAME>
Requires Workload Identity for the pod's service account to have
storage.objectVieweron the bucket.
Volume Expansion
If allowVolumeExpansion: true is set on the StorageClass, resize by updating
the PVC:
bash# kubectl kubectl patch pvc <PVC_NAME> -p '{"spec":{"resources":{"requests":{"storage":"200Gi"}}}}'
# MCP (preferred) patch_k8s_resource(parent="...", resourceType="persistentvolumeclaim", name="<PVC_NAME>", patch='{"spec":{"resources":{"requests":{"storage":"200Gi"}}}}')
Kubernetes automatically resizes the filesystem.
Best Practices
- Always enable volume expansion: Set
allowVolumeExpansion: trueon all StorageClasses - Use regional PDs for production:
replication-type: regional-pdreplicates across 2 zones for HA - Use
WaitForFirstConsumer: Ensures the PV is provisioned in the same zone as the pod - Choose the right disk type:
pd-ssdfor databases,pd-balanced(golden path default) for general use,pd-standardfor cold storage - Use Filestore for shared access: When multiple pods need to read/write the same files
- Use GCS FUSE for data pipelines: Mount buckets directly for ML training data, logs, etc.
- Back up PVCs: Use Backup for GKE (see the
gke-backup-drskill) to protect persistent data


