Skip to content

Commit a54e8e9

Browse files
committed
Merge branch 'develop'
2 parents 1f7d755 + 64050a3 commit a54e8e9

40 files changed

+196
-898
lines changed

README.md

Lines changed: 113 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,9 @@
3030
- [Workflows](#workflows)
3131
- [Test](#test)
3232
- [Release](#release)
33-
- [Guía de Despliegue de Infraestructura y Aplicación en GCP](#guía-de-despliegue-de-infraestructura-y-aplicación-en-gcp)
33+
- [Migración y despliegue en Google Cloud](#migración-y-despliegue-en-google-cloud)
3434
- [Estructura de archivos](#estructura-de-archivos)
35-
- [Descripción Archivos](#descripción-archivos)
3635
- [Guía de despliegue](#guía-de-despliegue)
37-
- [Outputs](#outputs)
3836
- [Limpieza de recursos](#limpieza-de-recursos)
3937
- [Notes](#notes)
4038
- [Posibles mejoras](#posibles-mejoras)
@@ -99,7 +97,9 @@ Para migrar tablas a database refactorian de deberá seguir los siguientes pasos
9997
- `php artisan key:generate`
10098
- `php artisan migrate`
10199

102-
![Migración de las tablas a database](img/migracionTablas.png)
100+
<p align="center">
101+
<img src="img/migracionTablas.png" alt="Migración de las tablas a database" width="30%">
102+
</p>
103103

104104
# Despliegue en Kubernetes
105105

@@ -518,8 +518,11 @@ Para comprobar que se los charts de Helm se despliegan correctamente, ejecutamos
518518
--memory=4096 \
519519
--addons="metrics-server,default-storageclass,storage-provisioner,ingress" \
520520
-p practica-final
521-
```
522-
![Creacion de cluster](./img/despliegue_minikube.png)
521+
```
522+
<p align="center">
523+
<img src="./img/despliegue_minikube.png" alt="Creacion de cluster" width="80%">
524+
</p>
525+
523526
- Crear el namespace:
524527
```sh
525528
kubectl create namespace laravel-mysql
@@ -535,13 +538,25 @@ Para comprobar que se los charts de Helm se despliegan correctamente, ejecutamos
535538
```
536539
- Verificar el estado de los diferentes componentes desplegados:
537540
- Verificar todos los estados: `kubectl -n laravel-mysql get all`
538-
![Verificar estados](./img/get-all-despliegue.png)
541+
<p align="center">
542+
<img src="./img/get-all-despliegue.png" alt="Verificar estados" width="90%">
543+
</p>
544+
539545
- Verificar los `PVC`: `kubectl -n laravel-mysql get pvc`
540-
![Verificar PVC](./img/get-pvc.png)
546+
<p align="center">
547+
<img src="./img/get-pvc.png" alt="Verificar PVC" width="80%">
548+
</p>
549+
541550
- Verificar autoescalado: `kubectl -n laravel-mysql get hpa -w`
542-
![Autoescalado](./img/hpa_down.png)
543-
- Tambien lo podemos confirmar desde el dashboard de minikube:
544-
![Dashboard de minikube](./img/minikube-dashboard.png)
551+
<p align="center">
552+
<img src="./img/hpa_down.png" alt="Autoescalado" width="80%">
553+
</p>
554+
555+
- También lo podemos confirmar desde el dashboard de minikube:
556+
<p align="center">
557+
<img src="./img/minikube-dashboard.png" alt="Dashboard de Minikube" width="90%">
558+
</p>
559+
545560

546561
- Para verificar que `ingress` esté funcionando correctamente deberemos seguir los siguientes pasos:
547562
- Conocer la IP de minikube:
@@ -557,9 +572,14 @@ Para comprobar que se los charts de Helm se despliegan correctamente, ejecutamos
557572
192.168.49.2 practica.local
558573
```
559574
- En el navegador web, colocamos el siguiente enlace: http://practica.local
560-
![Laravel web](./img/app-web.png)
575+
<p align="center">
576+
<img src="./img/app-web.png" alt="Laravel web" width="90%">
577+
</p>
578+
561579
- En el navegador web, colocamos el siguiente enlace: http://practica.local/adminer
562-
![Adminer web](./img/adminer-web.png)
580+
<p align="center">
581+
<img src="./img/adminer-web.png" alt="Adminer web" width="50%">
582+
</p>
563583

564584
## Despliegue con ArgoCD
565585
ArgoCD es una herramienta declarativa de **Continuous Delivery (CD)** para Kubernetes que permite gestionar y automatizar el despliegue de aplicaciones mediante **GitOps**. Este flujo asegura que el estado deseado de las aplicaciones esté siempre sincronizado con las configuraciones definidas en un repositorio Git.
@@ -629,8 +649,13 @@ Para realizar el despliegue se deberá seguir los siguientes pasos:
629649
```sh
630650
kubectl apply -f practica_final/charts/argocd/argoapp.yaml
631651
```
632-
![Éxito despliegue en ArgoCD](./img/argoCDrevExito.png)
633-
![Éxito despliegue en ArgoCD2](./img/argoCdrevExito2.png)
652+
<p align="center">
653+
<img src="./img/argoCDrevExito.png" alt="Éxito despliegue en ArgoCD" width="80%">
654+
</p>
655+
656+
<p align="center">
657+
<img src="./img/argoCdrevExito2.png" alt="Éxito despliegue en ArgoCD2" width="60%">
658+
</p>
634659

635660
## Despliegue de la monitorización
636661
Para desplegar la monitorización de la aplicación con Helm y con ArgoCD de realizará de la misma manera:
@@ -643,7 +668,10 @@ Para desplegar la monitorización de la aplicación con Helm y con ArgoCD de rea
643668
```
644669
Una vez ejecutado, abrir el navegador web y acceder a: http://localhost:8080
645670

646-
![Acceso PhpMyAdmin](./img/accesoPhpmyAdmin.png)
671+
<p align="center">
672+
<img src="./img/accesoPhpmyAdmin.png" alt="Acceso PhpMyAdmin" width="60%">
673+
</p>
674+
647675

648676
- Acceso a Prometheus.
649677
Realizar un port-forward para acceder a la interfaz.
@@ -652,21 +680,33 @@ Para desplegar la monitorización de la aplicación con Helm y con ArgoCD de rea
652680
```
653681
Luego, acceder desde el navegador a: http://localhost:9090.
654682

655-
![Éxito Prometheus1](./img/prometheus1.png)
683+
<p align="center">
684+
<img src="./img/prometheus1.png" alt="Éxito Prometheus1" width="90%">
685+
</p>
686+
687+
<p align="center">
688+
<img src="./img/prometheus2.png" alt="Éxito Prometheus2" width="90%">
689+
</p>
656690

657-
![Éxito Prometheus1](./img/prometheus2.png)
691+
<p align="center">
692+
<img src="./img/prometheus3.png" alt="Éxito Prometheus3" width="90%">
693+
</p>
658694

659-
![Éxito Prometheus1](./img/prometheus3.png)
695+
<p align="center">
696+
<img src="./img/prometheus4.png" alt="Éxito Prometheus4" width="90%">
697+
</p>
660698

661-
![Éxito Prometheus1](./img/prometheus4.png)
662699
- Grafana.
663700
Realizar un port-forward para acceder a la interfaz de Grafana.
664701
```sh
665702
kubectl port-forward -n <nombre-namespace> <nombre-pod-grafana> 3000:3000
666703
```
667704
Luego, acceder desde el navegador a: http://localhost:3000.
668705

669-
![Éxito Grafana](./img/grafanaExito.png)
706+
<p align="center">
707+
<img src="./img/grafanaExito.png" alt="Éxito Grafana" width="90%">
708+
</p>
709+
670710

671711
### Importar Dashboard de Grafana
672712

@@ -754,7 +794,10 @@ on:
754794
-Dsonar.projectKey=${{ secrets.SONAR_PROJECT_KEY}}
755795
-Dsonar.php.coverage.reportPaths=coverage.xml
756796
```
757-
![Test workflows](./img/test_worflows.png)
797+
<p align="center">
798+
<img src="./img/test_worflows.png" alt="Test workflows" width="80%">
799+
</p>
800+
758801
## Release
759802
Este workflow automatiza la generación de releases, la construcción de imágenes Docker multiplataforma y el empaquetado de Helm Charts tras la ejecución exitosa del workflow "test" en la rama `main`.
760803

@@ -771,7 +814,9 @@ Este workflow automatiza la generación de releases, la construcción de imágen
771814
echo "$VERSION" > semantic_release_version.txt
772815
fi
773816
```
774-
![Workflow para sematic release](./img/workflow-sematic-release.png)
817+
<p align="center">
818+
<img src="./img/workflow-sematic-release.png" alt="Workflow para semantic release" width="80%">
819+
</p>
775820
- **Docker**:
776821
- Construcción de imágenes multiplataforma con QEMU y Buildx.
777822
```sh
@@ -784,8 +829,13 @@ Este workflow automatiza la generación de releases, la construcción de imágen
784829
labels: ${{ steps.meta.outputs.labels }}
785830
```
786831
- Publicación en GHCR y Docker Hub.
787-
![Workflow de dockerhub](./img/workflows-dockerhub.png)
788-
![Imagenes en Dockerhub](./img/imagenes-dockerhub.png)
832+
<p align="center">
833+
<img src="./img/workflows-dockerhub.png" alt="Workflow de DockerHub" width="80%">
834+
</p>
835+
836+
<p align="center">
837+
<img src="./img/imagenes-dockerhub.png" alt="Imágenes en DockerHub" width="60%">
838+
</p>
789839

790840
- **Helm**: Actualización y empaquetado de Helm Charts para versiones consistentes.
791841
```sh
@@ -796,48 +846,36 @@ Este workflow automatiza la generación de releases, la construcción de imágen
796846
```
797847
- **Caché de herramientas**: Optimiza la instalación de yq, helm-docs y dependencias npm.
798848

799-
![Release workflows](./img/release_workflows.png)
800-
![Artefactos con version en Github](./img/github_artefactos.png)
849+
<p align="center">
850+
<img src="./img/release_workflows.png" alt="Release Workflows" width="80%">
851+
</p>
801852

853+
<p align="center">
854+
<img src="./img/github_artefactos.png" alt="Artefactos con versión en GitHub" width="20%">
855+
</p>
802856

803857

804-
# Guía de Despliegue de Infraestructura y Aplicación en GCP
858+
859+
# Migración y despliegue en Google Cloud
805860

806861
Este proyecto contiene los archivos necesarios para desplegar una infraestructura en Google Cloud Platform (GCP), utilizando **Terraform** para la creación de un clúster de Kubernetes (GKE), una base de datos gestionada (Cloud SQL), y el despliegue de la aplicación Laravel con Helm Charts.
807862

808863
## Estructura de archivos
809864

810865
```
811-
├── Terraform-rev/
812-
│ ├── main.tf # Configuración principal de Terraform
813-
│ ├── variables.tf # Variables globales
814-
│ ├── provider.tf # Proveedores de Terraform (GCP y Kubernetes)
815-
│ ├── gke-cluster.tf # Configuración del clúster GKE
816-
│ ├── cloudsql-instance.tf # Configuración BBDD gestionada
817-
│ ├── kubernetes-resources.tf # Despliegue de recursos Kubernetes
818-
│ ├── load-balancer.tf # Configuración del Ingress
819-
│ ├── outputs.tf # Outputs del despliegue
820-
├──
866+
```plaintext
867+
gcp/
868+
├── gke-cluster.tf # Configuración del clúster de Kubernetes (GKE) en GCP
869+
├── helm-release.tf # Configuración para desplegar Helm Charts en el clúster GKE
870+
├── providers.tf # Configuración de proveedores (Google Cloud y Helm)
871+
└── variables.tf # Variables globales
821872
```
822-
## Descrición Archivos
823-
824-
- **main.tf**: Contiene la configuración base del proveedor GCP y los recursos principales (clúster GKE, base de datos Cloud SQL, etc.).
825-
- **variables.tf**: Declara las variables utilizadas en todo el proyecto (por ejemplo, región, nombre del proyecto, etc.).
826-
- **provider.tf**: Configura los proveedores de GCP y Kubernetes.
827-
- **gke-cluster.tf**: Define el clúster GKE con los nodos necesarios para desplegar la aplicación.
828-
- **cloudsql-instance.tf**: Configura la base de datos gestionada Cloud SQL (MySQL 8.0) y sus credenciales.
829-
- **kubernetes-resources.tf**: Despliega la aplicación Laravel en el clúster GKE utilizando Helm Charts.
830-
- **load-balancer.tf**: Configura un recurso Ingress para exponer la aplicación al exterior.
831-
- **outputs.tf**: Proporciona información útil del despliegue, como el endpoint del clúster y el host del Ingress.
832-
833873
## Guía de despliegue
834874

835875
**Requisitos previos**
836876
- Cuenta activa en Google Cloud Plattform(GCP)
837877
- Instalación de:
838878
· Terraform
839-
· kubectl
840-
· Helm
841879
- Configuración del acceso a GCP con gcloud CLI:
842880

843881
```
@@ -868,43 +906,32 @@ gcloud config set project <ID_PROYECTO>
868906

869907
- Configurar el Clúster GKE. Obtener las credenciales del clúster GKE y configúralas en kubectl:
870908
```sh
871-
gcloud container clusters get-credentials laravel-mysql-cluster --region europe-west3
909+
gcloud container clusters get-credentials laravel-mysql-cluster --region us-central1
872910
```
873-
- Desplegar la Aplicación con Helm
874-
- Dirígete al directorio donde están los Helm Charts (charts/).
875-
- Ejecuta el siguiente comando para instalar el chart:
876-
```sh
877-
helm install laravel-mysql ./charts
878-
```
879-
- Acceder a la aplicación:
880-
- Obtén la IP externa del Ingress:
881-
```sh
882-
kubectl get ingress -n laravel-mysql
883-
```
884-
- Agrega la IP al archivo /etc/hosts en tu máquina local:
885-
```sh
886-
<IP_INGRESS> practica.local
887-
```
888-
- Abrir un navegador y acceder a:
889-
- Aplicación principal: http://practica.local
890-
- Adminer: http://practica.local/adminer
911+
Verificamos que los recursos se hayan desplegado correctamente.
912+
- En la consola de GCP
913+
<p align="center">
914+
<img src="./img/cluster-k8-GCP.png" alt="Cluster GKE" width="90%">
915+
</p>
916+
Comprobamos que se creen las instancias.
917+
<p align="center">
918+
<img src="./img/instancias-GCP.png" alt="Instancias en el cluster" width="90%">
919+
</p>
920+
Comprobamos que se creen los nodos.
921+
<p align="center">
922+
<img src="./img/nodos-cluster.png" alt="Nodos en el cluster" width="90%">
923+
</p>
924+
925+
- Usando los comandos de `kubectl`, comprobamos que se hayan desplegado los recursos
926+
<p align="center">
927+
<img src="./img/all-recursos-GCP.png" alt="Despliegue de los recursos" width="80%">
928+
</p>
929+
Verificamos los pods.
930+
<p align="center">
931+
<img src="./img/podsGCP.png" alt="Despliegue de los pods" width="90%">
932+
</p>
933+
891934

892-
- Variables de entorno para Laravel. Verificar de que la aplicación Laravel esté configurada para conectarse a la base de datos gestionada (Cloud SQL) utilizando variables de entorno en el archivo .env.
893-
Por ejemplo:
894-
```sh
895-
DB_HOST=<CONNECTION_NAME>
896-
DB_PORT=3306
897-
DB_DATABASE=mydatabase
898-
DB_USERNAME=root
899-
DB_PASSWORD=rootpassword
900-
```
901-
## Outputs
902-
Tras ejecutar terraform apply, obtendrás los siguientes outputs:
903-
```sh
904-
gke_cluster_endpoint: Endpoint del clúster GKE.
905-
cloudsql_instance_connection_name: Conexión de la instancia de Cloud SQL.
906-
ingress_host: URL de la aplicación desplegada.
907-
```
908935
## Limpieza de recursos
909936

910937
Para eliminar todos los recursos creados, ejecuta:

Terraform-rev/cloudsql-instance.tf

Lines changed: 0 additions & 23 deletions
This file was deleted.

Terraform-rev/gke-cluster.tf

Lines changed: 0 additions & 18 deletions
This file was deleted.

Terraform-rev/kubernetes-resources.tf

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)