O manifesto abaixo cria um PersistentVolumeClaim e a partir do momento que for criado o Kubernetes buscará um PersistentVolume equivalente as características desejadas. Quando a requisição por armazenamento ocorrer com êxito o Status do PVC será Bound.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: db-pvc
spec:
	storageClassName: ""
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 512m

<aside> 💡 O campo storageClassName: "" desabilita o provisionamento dinâmico, ou seja, se o Kubernetes não encontrar um PV equivalente, o PVC ficará com status Pending.

</aside>

Como o manifesto acima foi criado com o campo storageClassName: "" que desabilita o provisionamento dinâmico precisaremos de um PV pré-provisionado para atender o PVC. Podemos utilizar o PV da página Creating Persistent Volumes.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: db-pv
spec:
  capacity:
		storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/db

Executando Comndos

# Criando PVC antes de existir um PV
$ kubectl apply -f pvc.yaml
	persistentvolumeclaim/db-pvc created

# PVC mantem-se com status Pending
$ kubectl get pvc,pv                   
	NAME                           STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
	persistentvolumeclaim/db-pvc   Pending

# Descrevendo o PVC criado, detalhe para os events.
# Event: no persistent volumes available for this claim and no storage class is set
$ kubectl describe pvc db-pvc
	Name:          db-pvc
	Namespace:     ckad
	StorageClass:  ""
	Status:        Pending
	Volume:        db-pv
	Capacity:      1Gi
	Access Modes:  RWO
	VolumeMode:    Filesystem
	**Used By:       <none>**
	Events:
  Type    Reason         Age                    From                         Message
  ----    ------         ----                   ----                         -------
  Normal  FailedBinding  3m12s (x3 over 3m30s)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

# Criando PV 
$ kubectl apply -f pv.yaml     
	persistentvolume/db-pv created

# Agora o PVC passa para o status Bound e é vinculado ao PV criado acima
$ kubectl get pvc,pv      
	NAME                           STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
	persistentvolumeclaim/db-pvc   Bound    db-pv    1Gi        RWO                           2m26s

	NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM         STORAGECLASS   REASON   AGE
	persistentvolume/db-pv   1Gi        RWO            Retain           Bound    ckad/db-pvc                           116s                                                  4s

# Describe no PVC novamente
# Continua sem uso(Used By) mas ja esta vinculado(Bound) a um PV
$ kubectl describe pvc db-pvc
	Name:          db-pvc
	Namespace:     ckad
	StorageClass:  
	**Status:        Bound**
	Volume:        db-pv
	Capacity:      1Gi
	Access Modes:  RWO
	VolumeMode:    Filesystem
	**Used By:       <none>**