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>**