Skip to main content

Volúmenes

image.png

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