Testando PV e PVC em Ambiente Local
Exemplo básico de PersistentVolume (PV) e PersistentVolumeClaim (PVC):
apiVersion: v1
kind: PersistentVolume
metadata:
name: volume-dados
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /dados/armazenamento
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pedido-volume
spec:
resources:
requests:
storage: 2Gi
accessModes:
- ReadWriteOnce
storageClassName: "" # Impede vinculação automática a StorageClasses
---
apiVersion: v1
kind: Pod
metadata:
name: app-mongo
spec:
containers:
- image: mongo
name: contêiner-mongo
volumeMounts:
- name: dados-mongo
mountPath: /db/dados
volumes:
- name: dados-mongo
persistentVolumeClaim:
claimName: pedido-volume
PVCs com storageClassName: "" vinculam-se apenas a PVs sem classe definida. PVs sem classe não são removidos automaticaemnte para evitar perda de dados.
Vinculação com StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rapido
provisioner: docker.io/hostpath
parameters:
tipo: ssd
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pedido-rapido
spec:
storageClassName: rapido
resources:
requests:
storage: 200Mi
accessModes:
- ReadWriteOnce
---
apiVersion: v1
kind: Pod
metadata:
name: app-banco
spec:
containers:
- image: mongo
name: contêiner-banco
volumeMounts:
- name: volume-ssd
mountPath: /dados
volumes:
- name: volume-ssd
persistentVolumeClaim:
claimName: pedido-rapido
StatefulSets com Armazenamento
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: app-stateful
spec:
serviceName: servico-stateful
replicas: 2
selector:
matchLabels:
app: stateful-app
template:
metadata:
labels:
app: stateful-app
spec:
containers:
- name: contêiner-app
image: nginx
volumeMounts:
- name: dados-estado
mountPath: /dados
volumeClaimTemplates:
- metadata:
name: dados-estado
spec:
storageClassName: ""
resources:
requests:
storage: 1Gi
accessModes:
- ReadWriteOnce
Saída típica de verificação:
kubectl get pv
NAME CAPACITY ACCESS MODES STATUS CLAIM
pv-1 1Gi RWO Bound default/dados-estado-app-stateful-0
pv-2 1Gi RWO Bound default/dados-estado-app-stateful-1
pv-3 1Gi RWO Available
kubectl get pvc
NAME STATUS VOLUME CAPACITY
dados-estado-app-stateful-0 Bound pv-1 1Gi
dados-estado-app-stateful-1 Bound pv-2 1Gi