Cómo Configurar un Crontab en un Pod de EKS para Aplicaciones PHP
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:
Instala cron y otras herramientas necesarias para la aplicación.
Copia el archivo crontab desde tu repositorio local a la ubicación correcta en el contenedor.
Configura los permisos y prepara el archivo crontab para que se ejecute correctamente dentro del contenedor.
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
:
Definimos la imagen Docker de la aplicación PHP que incluye la configuración del crontab.
Establecemos el comando para iniciar cron y Apache al inicio del contenedor.
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!
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