Volúmenes

Solución que nos aportan los contenedores para tener persistencia de ficheros. Un volumen es una ruta del contenedor que se va a guardar en otro sitio(Una carpeta en el host, una carpeta de red, algún tipo de servicio de almacenamiento en la nube, etc.).
Aquí el ejemplo de los volúmenes donde guardaremos una ruta del contenedor(/usr/share/nginx/html) en una carpeta del nodo donde se ejecuta el contenedor(/home/docker/html). También comentado tenéis el ejemplo usando otros tipos de volúmenes como son el usar una carpeta de red o un 'empty-volume':
apiVersion: v1
kind: Pod
metadata:
name: test-pd
labels:
app: test-app
spec:
containers:
- image: nginx
name: test-container
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: host-volume
volumes:
# - name: empty-volume
# emptyDir: {}
# - name: nfs-volume
# nfs:
# server: 10.108.211.244
# path: /
- name: host-volume
hostPath:
path: /home/docker/html
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: nginx1
spec:
type: NodePort
selector:
app: test-app
ports:
- protocol: TCP
port: 80
targetPort: 80
PersistentVolume & PersistentVolumeClaim
'PersistentVolume' funciona conjuntamente con el concepto de 'PersistentVolumeClaim' para desacoplar la configuración de los distintos tipos de persistencia de la aplicación.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0002
spec:
capacity:
storage: 0.2Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: standard
hostPath:
path: /home/docker/html
type: Directory
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim-1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 0.2Gi
---
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
labels:
app: test-app
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: claim-1
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storage
---
apiVersion: v1
kind: Service
metadata:
name: nginx1
spec:
type: NodePort
selector:
app: test-app
ports:
- protocol: TCP
port: 80
targetPort: 80