Esta guía proporciona un proceso paso a paso para desplegar una arquitectura de microservicios utilizando Docker, PHP, MySQL y phpMyAdmin en Kubernetes sobre Minikube.
.
|-- MySQL
| |-- configmap.yaml
| |-- deployment-mysql.yaml
| |-- kustomization.yaml
| |-- pv-mysql.yaml
| |-- pvc-mysql.yaml
| `-- service-mysql.yaml
|-- README.md
|-- kustomization.yaml
|-- phpMyAdmin
| |-- deployment-php.yaml
| |-- kustomization.yaml
| `-- service-php.yaml
`-- webApp
|-- Dockerfile
|-- deployment-webapp.yaml
|-- html
| |-- index.html
| `-- submit.php
|-- kustomization.yaml
|-- pvc-webapp.yaml
`-- service-webapp.yaml
4 directories, 18 files
configmap.yaml
: Define un ConfigMap que contiene el script SQL para crear la tabla de MySQL.deployment-mysql.yaml
: Define el despliegue del contenedor de MySQL, incluyendo las variables de entorno para las credenciales de la base de datos.kustomization.yaml
: Archivo de Kustomize para gestionar las configuraciones de MySQL.pv-mysql.yaml
: Define un PersistentVolume (PV) para MySQL.pvc-mysql.yaml
: Define un PersistentVolumeClaim (PVC) para MySQL.service-mysql.yaml
: Define un servicio para acceder al contenedor de MySQL.
deployment-php.yaml
: Define el despliegue del contenedor de phpMyAdmin.kustomization.yaml
: Archivo de Kustomize para gestionar las configuraciones de phpMyAdmin.service-php.yaml
: Define un servicio para acceder al contenedor de phpMyAdmin.
Dockerfile
: Define la construcción de la imagen Docker para la aplicación web en PHP.deployment-webapp.yaml
: Define el despliegue del contenedor de la aplicación web.html/index.html
: Página principal de la aplicación web.html/submit.php
: Script PHP para manejar formularios y solicitudes.kustomization.yaml
: Archivo de Kustomize para gestionar las configuraciones de la aplicación web.pvc-webapp.yaml
: Define un PersistentVolumeClaim (PVC) para la aplicación web.service-webapp.yaml
: Define un servicio para acceder al contenedor de la aplicación web.
Navega al directorio webApp
y crea una imagen Docker:
eval $(minikube docker-env)
minikube ip
Utiliza la dirección IP obtenida del comando minikube ip
en el siguiente comando docker build
. Reemplaza 192.168.49.2
con tu IP si es diferente:
docker build --tag 192.168.49.2:5000/php-webserver .
Asegúrate de que el archivo Dockerfile
esté presente en el directorio webApp
al ejecutar este comando.
Para cada microservicio (MySQL, phpMyAdmin, webApp), aplica las configuraciones de Kubernetes. Puedes hacerlo de varias maneras:
kubectl apply -k .
cd ../MySQL
kubectl apply -k .
cd ../phpMyAdmin
kubectl apply -k .
cd ../webApp
kubectl apply -k .
kubectl apply -f <archivo-de-configuración>
Verifica el estado de los pods para asegurarte de que estén en ejecución:
kubectl get pods
Deberías ver una salida que indique que todos los pods están en estado Running
.
Usa el comando minikube service
para acceder al servicio webApp:
kubectl get service
minikube service webapp-service
Usa kubectl port-forward
para acceder a los servicios MySQL y phpMyAdmin:
kubectl get pods
kubectl port-forward <nombre-del-pod-mysql> 3306:3306
kubectl port-forward <nombre-del-pod-phpmyadmin> 8080:80
Las credenciales de usuario y contraseña están definidas en el archivo deployment-mysql.yaml
. Estas credenciales se pueden cambiar según las necesidades del usuario:
- Usuario:
user
- Contraseña:
password
Puedes crear una base de datos de varias maneras:
Accede al pod de MySQL y usa el comando CREATE DATABASE
:
kubectl exec -it <nombre-del-pod-mysql> -- mysql -u root -p
Ingresa la contraseña de root (admin01
en este caso) y luego ejecuta:
CREATE DATABASE nombre_de_la_base_de_datos;
Accede a phpMyAdmin, inicia sesión y usa la interfaz gráfica para crear una base de datos:
- Abre
http://localhost:8080
en tu navegador. - Inicia sesión con las credenciales (
user
ypassword
). - En la pestaña "Bases de datos", ingresa el nombre de la nueva base de datos y haz clic en "Crear".
Define la variable MYSQL_DATABASE
en tu archivo de despliegue de MySQL (deployment-mysql.yaml
) para crear la base de datos automáticamente:
env:
- name: MYSQL_DATABASE
value: "nombre_de_la_base_de_datos"
Siguiendo los pasos descritos anteriormente, habrás desplegado con éxito una aplicación web en PHP con una base de datos MySQL y phpMyAdmin para la gestión de la base de datos, todo ejecutándose en un clúster de Kubernetes gestionado por Minikube. Esta configuración aprovecha Docker para la contenedorización y Kubernetes para la orquestación, asegurando una arquitectura de microservicios escalable y manejable.