<p>Currently, my Kubernetes cluster is provisioned via <code>GKE</code>.</p>
<p>I use <code>GCE Persistent Disks</code> to persist my data.</p>
<p>In <code>GCE</code>, persistent storage is provided via <code>GCE Persistent Disks</code>. Kubernetes supports adding them to <code>Pods</code> or <code>PersistenVolumes</code> or <code>StorageClasses</code> via the <code>gcePersistentDisk</code> volume/provisioner type.</p>
<p>What if I would like to transfer my cluster from <code>Google</code> to, lets say, <code>Azure</code> or <code>AWS</code>?
Then I would have to change value of volume type to <code>azureFile</code> or <code>awsElasticBlockStore</code> respectively in all occurrences in the manifest files.</p>
<p>I hope <code>CSI</code> driver will solve that problem, unfortunately, they also use a different type of volume for each provider cloud provider, for example <code>pd.csi.storage.gke.io</code> for <code>GCP</code> or <code>disk.csi.azure.com</code> for <code>Azure</code>.</p>
<p>Is there any convenient way to make the Kubernetes volumes to be cloud agnostic? In which I wouldn't have to make any changes in manifest files before K8s cluster migration.</p>

<p>You cannot have cloud agnostic storage by using the CSI drivers or the native VolumeClaims in Kubernetes. That's because these API's are the upstream way of provisioning storage which each cloud provider has to integrate with to translate them into the Cloud Specific API (PD for Google, EBS for AWS...)</p>
<p>Unless you have a self-managed Storage that you can access via an NFS driver or a specific driver from the tools managed above. And still with that the Self-Managed Storage solution is going to be based on a Cloud provider specific volume. So You are just going to shift the issue to a different place.</p>
