Esta guía ofrece un procedimiento detallado para implementar una arquitectura de microservicios empleando Docker, PHP, MySQL y phpMyAdmin en Kubernetes utilizando Minikube.
.
|-- Readme.md
|-- composer.json
|-- kustomization.yaml
|-- mysql
| |-- deployment-mysql.yaml
| |-- kustomization.yaml
| |-- mysqlconfigmap.yaml
| |-- pv-mysql.yaml
| |-- pvc-mysql.yaml
| `-- service-mysql.yaml
|-- phpmyadmin
| |-- deployment-phpmyadmin.yaml
| |-- kustomization.yaml
| `-- service-phpmyadmin.yaml
`-- webapp
|-- Dockerfile
|-- deployment-webapp.yaml
|-- html
| |-- index.html
| |-- submit.php
| `-- vendor
| `-- autoload.php
|-- kustomization.yaml
`-- service-webapp.yaml
5 directories, 19 files
docker context use default
eval $(minikube docker-env)
minikube ip (Sustituir el deployment-webapp.yaml con la ip que sale aqui)
minikube addons enable metrics-server
docker build --tag $(minikube ip):5000/php-webserver .
kubectl apply -k ./
minikube service "servicios" (Creas los servicio)
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 ipUtiliza 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 podsDeberí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 serviceminikube service webapp-serviceUsa kubectl port-forward para acceder a los servicios MySQL y phpMyAdmin:
kubectl get podskubectl port-forward <nombre-del-pod-mysql> 3306:3306kubectl port-forward <nombre-del-pod-phpmyadmin> 8080:80Las 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 -pIngresa 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:8080en tu navegador. - Inicia sesión con las credenciales (
userypassword). - 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.