Giter VIP home page Giter VIP logo

kubectl-basedatos's Introduction

Despliegue de Microservicios con Docker, PHP, MySQL en Kubernetes

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.

Estructura del Proyecto

.
|-- 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

Descripción de los Archivos de Configuración

MySQL

  • 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.

phpMyAdmin

  • 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.

webApp

  • 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.

Pasos para el Despliegue

1. Crear la Imagen Docker para la Aplicación Web en PHP

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.

2. Aplicar Configuraciones de Kubernetes

Para cada microservicio (MySQL, phpMyAdmin, webApp), aplica las configuraciones de Kubernetes. Puedes hacerlo de varias maneras:

Opción 1: Aplicar configuraciones desde la raíz del proyecto

kubectl apply -k .

Opción 2: Aplicar configuraciones desde cada carpeta

MySQL
cd ../MySQL
kubectl apply -k .
phpMyAdmin
cd ../phpMyAdmin
kubectl apply -k .
webApp
cd ../webApp
kubectl apply -k .

Opción 3: Aplicar configuraciones archivo por archivo

kubectl apply -f <archivo-de-configuración>

3. Verificar el Despliegue

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.

4. Acceder a los Servicios

webApp

Usa el comando minikube service para acceder al servicio webApp:

kubectl get service
minikube service webapp-service

MySQL y phpMyAdmin

Usa kubectl port-forward para acceder a los servicios MySQL y phpMyAdmin:

kubectl get pods
MySQL
kubectl port-forward <nombre-del-pod-mysql> 3306:3306
phpMyAdmin
kubectl port-forward <nombre-del-pod-phpmyadmin> 8080:80

Acceder a phpMyAdmin

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

Crear una Base de Datos MySQL

Puedes crear una base de datos de varias maneras:

1. Línea de comandos de MySQL

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;

2. phpMyAdmin

Accede a phpMyAdmin, inicia sesión y usa la interfaz gráfica para crear una base de datos:

  1. Abre http://localhost:8080 en tu navegador.
  2. Inicia sesión con las credenciales (user y password).
  3. En la pestaña "Bases de datos", ingresa el nombre de la nueva base de datos y haz clic en "Crear".

3. Archivo de Despliegue

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"

Conclusión

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.

kubectl-basedatos's People

Contributors

jpiedramacas avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.