Volumenes

Christian Altamirano Ayala
Kubernetes
Published in
2 min readJun 28, 2019

Cuando trabajamos con Kubernetes, los pods que gestionamos una vez que eliminamos o reiniciamos la data almacenada en el filesystem se pierde, esto debido a que los pods por defecto son de tipo “stateless”.

Ante esa problemática en kubernetes existen los volumenes, estos volumenes pueden ser de diferentes tipos:

De estos tipos de volumenes es importante notar que soportan volumenes de los 3 principales proveedores cloud publicos gcePersistentDisk (GCP), awsElasticBlockStore (AWS ) y azureDisk (AZURE).

Del listado mencionado veremos los siguientes tipo de volumenes: hostPath y persistentVolumeClaim

hostPath: Este tipo de volumen permite crear el volumen en el directorio del nodo en el que se ejecuta el pod.

apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /data
# this field is optional
type: Directory

PersistentVolume (PV): Es espacio de almacenamiento que se provisiona, en ella se describe la capacidad de almacenamiento y el modo de acceso (ReadWriteOnce,ReadWriteMany y ReadOnlyMany)

apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2

persistentVolumeClaim(PVC): Es un tipo de peticion para almacenamiento realizada por el usuario hacia los persistentVolume(PV) existentes y configurada por defecto para optimizar el almacenamiento, esto quiere decir si tenemos 2 persistent volumes con 100Mb y 500Mb, y creamos un persistent volumeClaim de 80Mb la peticion tomara al primer persitent volume.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
storageClassName: slow
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}

Una vez configurado el persistentVolume y el persistentVolumeClaim, procedemos a usar esos volumenes en nuestro pod de la siguiente manera:

apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim

Referencias:

https://kubernetes.io/docs/concepts/storage/persistent-volumes/

--

--