Despliegue de un servidor web con contenido persistente en Kubernetes

Índice

Para desplegar un servidor o aplicación web que sea persistente, es necesario usar volúmenes en Kubernetes. Para crear un volumen, es necesario contar con un storageClass definido en el cluster. En este caso, como el cluster se ha creado usando Minikube, incluye, por defecto un storageClass estándar de tipo hostpath, que creará los volúmenes que se soliciten al crear un recurso de tipo PersistentVolumeClaim (PVC)

❯ kubectl get storageclass
NAME                 PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
standard (default)   k8s.io/minikube-hostpath   Delete          Immediate           false                  8m57s

Para crear un volumen usando este storageClass se define un recurso de tipo pvc:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: pvc-webserver
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

En este caso, para mostrar el funcionamiento de los volúmenes en Kubernetes se despliega un servidor web Apache con el módulo para la ejecución de scripts PHP. Este servidor se define también en un despliegue:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver
  labels:
    app: apache-php
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apache-php
  template:
    metadata:
      labels:
        app: apache-php
    spec:
      volumes:
        - name: volumen-webserver
          persistentVolumeClaim:
            claimName: pvc-webserver
      containers:
        - name: contenedor-apache-php
          image: php:7.4-apache
          ports:
            - name: http-server
              containerPort: 80
          volumeMounts:
            - mountPath: "/var/www/html"
              name: volumen-webserver

Para acceder al servidor web también hay que definir un servicio de tipo NodePort en el cluster de Kubernetes.

apiVersion: v1
kind: Service
metadata:
  name: webserver
spec:
  type: NodePort
  ports:
  - name: service-http
    port: 80
    targetPort: http-server
  selector:
    app: apache-php

Para crear estos recursos en el cluster se usa el comando kubectl apply.

kubectl apply -f pvc-webserver.yaml
kubectl apply -f webserver-deployment.yaml
kubectl apply -f webserver-service.yaml

Con el comando kubectl describe se puede averiguar la ruta del equipo local en la que el cluster de Minikube ha creado el directorio montado como volumen en el servidor web.

❯ kubectl describe persistentvolume/pvc-770f4cbd-46f9-4470-972a-7a47a68b3a3f
Name:            pvc-770f4cbd-46f9-4470-972a-7a47a68b3a3f
Labels:          <none>
Annotations:     hostPathProvisionerIdentity: 543b9105-df10-4463-b7ee-1fbe49c4f89c
                 pv.kubernetes.io/provisioned-by: k8s.io/minikube-hostpath
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    standard
Status:          Bound
Claim:           default/pvc-webserver
Reclaim Policy:  Delete
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        2Gi
Node Affinity:   <none>
Message:         
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /tmp/hostpath-provisioner/default/pvc-webserver
    HostPathType:  
Events:            <none>

Con el comando kubectl exec se copia el fichero info.php al directorio raíz del servidor web.

kubectl exec pod/webserver-8c6677d96-mfsgk -- bash -c "echo '<?php phpinfo(); ?>' > /var/www/html/info.php"

Para acceder al servidor web se usa la ip del cluster de Minikube, el puerto creado con el servicio NodePort y se añade la ruta /info.php/. Si se elimina el despliegue y se vuelve a crear, el uso de un volumen persistente permite que el contenido del servidor web no cambie.

comments powered by Disqus

Relacionados

Configuración del protocolo HTTPS para el acceso a una aplicación web

Para usar HTTPS en una aplicación web es necesario configurar el protocolo HTTPS en el servidor web en el que se aloja. En este post se recoge una breve guía con los pasos a seguir.

Leer

Cómo instalar qemu/kvm en Debian 12 para virtualizar equipos

Qemu es un potente virtualizador que permite el uso de máquinas virtuales en equipos que usen sistemas operativos basados en Debian y otras distribuciones GNU/Linux. Este software se complementa a la perfección con VirtManager, que ofrece una interfaz gráfica amigable para realizar todas las tareas relacionadas con la virtualización.

Leer

Instalación del servidor web Apache en Rocky Linux 9

El de Apache es uno de los servidores web más usados del mundo. Aunque en otras distribuciones, como las basadas en Debian, este servidor se instala con el paquete apache2 en las distribuciones basadas en Red Hat como CentOS o Rocky Linux, este servidor se instala con el paquete httpd.

Leer