Cómo Configurar un Crontab en un Pod de EKS para Aplicaciones PHP

Matias MartinezMatias Martinez
3 min read

En las aplicaciones PHP, es común tener procesos que deben ejecutarse periódicamente. Para ello, utilizamos crontabs, que nos permiten programar tareas recurrentes, como el envío de correos electrónicos, la limpieza de archivos temporales o la actualización de datos en bases de datos. En un entorno de Kubernetes, como un clúster de EKS (Amazon Elastic Kubernetes Service), podemos configurar estos crontabs dentro de los contenedores de nuestras aplicaciones.

A continuación, te mostraré cómo configurar un crontab en un pod de EKS para una aplicación PHP.

Ejemplo de Crontab en PHP

Imagina que tienes una aplicación PHP en la que necesitas ejecutar una tarea cada minuto. Para este ejemplo, crearemos un crontab que escriba "Hola mundo" en un archivo de log cada minuto.

Crontab de Ejemplo:

* * * * * echo "hola mundo - $(date)" >> /tmp/hola_mundo.log

Este crontab ejecuta un comando que agrega la frase "hola mundo" con la fecha y hora actual en el archivo /tmp/hola_mundo.log cada minuto.

Configurando el Crontab en la Imagen de la Aplicación PHP

Para configurar el crontab en una imagen de Docker para una aplicación PHP, debemos asegurarnos de instalar y configurar cron en la imagen. A continuación, te muestro cómo hacerlo.

Dockerfile:

# Utiliza una imagen base de PHP
FROM php:7.4-apache

# Instala y configura cron y otras dependencias
RUN apt-get update && apt-get install -y cron dos2unix \
    && a2enmod proxy_fcgi \
    && mkdir -p /var/www/html/cron \
    && chown www-data:root /var/www/html/cron \
    && a2enmod rewrite \
    && apt-get clean

# Copia el archivo crontab a la ubicación adecuada
COPY cron-example /etc/cron.d/cron-app

# Configura permisos y convierte el archivo crontab al formato Unix
RUN chmod 0644 /etc/cron.d/cron-app && dos2unix /etc/cron.d/cron-app && crontab /etc/cron.d/cron-app

# Inicia cron y Apache al iniciar el contenedor
CMD /etc/init.d/cron start && apache2-foreground

Este Dockerfile realiza las siguientes acciones:

  1. Instala cron y otras herramientas necesarias para la aplicación.

  2. Copia el archivo crontab desde tu repositorio local a la ubicación correcta en el contenedor.

  3. Configura los permisos y prepara el archivo crontab para que se ejecute correctamente dentro del contenedor.

  4. Inicia cron y Apache cuando el contenedor se ejecuta.

Archivo Crontab (cron-example):

Este archivo se debe crear en tu repositorio con el siguiente contenido:

* * * * * echo "hola mundo - $(date)" >> /tmp/hola_mundo.log

Guarda este archivo en la carpeta cron-example.

Despliegue de la Aplicación PHP en EKS

Ahora que tienes la imagen Docker configurada con el crontab, necesitas crear un despliegue (deployment) en Kubernetes para ejecutar la aplicación en tu clúster EKS.

YAML de Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-cron-app
  labels:
    app: php-cron-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: php-cron-app
  template:
    metadata:
      labels:
        app: php-cron-app
    spec:
      containers:
        - name: php-cron-app
          image: tu-imagen/php-cron-app:latest
          imagePullPolicy: IfNotPresent
          command:
            - /bin/sh
            - -c
          args:
            - /etc/init.d/cron start; apache2-foreground
          resources:
            limits:
              cpu: "500m"
              memory: "512Mi"
            requests:
              cpu: "250m"
              memory: "256Mi"
          ports:
            - containerPort: 80
      restartPolicy: Always

En este Deployment:

  1. Definimos la imagen Docker de la aplicación PHP que incluye la configuración del crontab.

  2. Establecemos el comando para iniciar cron y Apache al inicio del contenedor.

  3. Configuramos los recursos solicitados y limitados para la aplicación, asegurando un uso eficiente del clúster.

Configurar un crontab en un pod de EKS para una aplicación PHP es un proceso simple pero poderoso. Te permite mantener tus tareas programadas funcionando sin problemas en un entorno escalable y gestionado. Con la configuración adecuada, como la que mostramos en este artículo, puedes asegurarte de que tu aplicación PHP esté lista para manejar tareas recurrentes dentro de tu clúster de Kubernetes.

¡Ahora estás listo para implementar tus crontabs en EKS y automatizar tareas dentro de tus aplicaciones PHP!

0
Subscribe to my newsletter

Read articles from Matias Martinez directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Matias Martinez
Matias Martinez

Apasionado por la tecnología con más de 10 años de experiencia. Actualmente trabajando con tecnologías Cloud y Devops. ☁️ AWS Certified Solutions Architect – Associate ☁️ AWS Certified Security – Specialty