<p>I have been working in k8's workspace in for like 6 months now and always wonder why do we need a Persistent Volume(PV) and Persistent Volume claim(PVC)? Can anyone please make this concept clear to me?</p>

<p>These information are from <a href="https://rads.stackoverflow.com/amzn/click/com/1617293725" rel="nofollow noreferrer" rel="nofollow noreferrer">Kubernetes In Action</a> book.</p>

<blockquote>
  <p>Decoupling pods from the underlying storage technology</p>
</blockquote>

<p>Ideally,  a  developer  deploying  their  apps  on  Kubernetes  should  never  have  to know what kind of storage technology is used underneath, the same way they don’t have to know what type of physical servers are being used to run their pods.</p>

<p>When a developer needs a certain amount of persistent storage for their application, they can request it from Kubernetes, the same way they can request CPU, memory, and other resources when creating a pod. The system administrator can configure the cluster so it can give the apps what they request.</p>

<blockquote>
  <p>Introducing PersistentVolumes and PersistentVolumeClaims</p>
</blockquote>

<p>To enable apps to request storage in a Kubernetes cluster without having to deal with infrastructure  specifics,  two  new  resources  were  introduced.  They  are  <strong>PersistentVolumes</strong> and <strong>PersistentVolumeClaims</strong>. </p>

<p>Instead  of  the  developer  adding  a  technology-specific  volume  to  their  pod,  it’s  the cluster  administrator  who  sets  up  the  underlying  storage  and  then  registers  it  in Kubernetes  by  creating  a  <strong>PersistentVolume</strong>  resource  through  the  Kubernetes  API server. When creating the <strong>PersistentVolume</strong>, the admin specifies its size and the access modes it supports.</p>

<p><a href="https://i.stack.imgur.com/k3WkN.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/k3WkN.png" alt="enter image description here"></a></p>

<pre><code>This image is from Kubernetes In Action book, too.
</code></pre>

<p>When a cluster user needs to use persistent storage in one of their pods, they first create a <strong>PersistentVolumeClaim</strong> manifest, specifying the minimum size and the access mode they require. The user then submits the <strong>PersistentVolumeClaim</strong> manifest to the Kubernetes  API  server,  and  Kubernetes  finds  the  appropriate  PersistentVolume  and binds the volume to the claim.</p>

<p>The <strong>PersistentVolumeClaim</strong> can then be used as one of the volumes inside a pod.Other users can not use the same <strong>PersistentVolume</strong> until it has been released by deleting the bound <strong>PersistentVolumeClaim</strong>.</p>
