Skip to content

Commit 25f70cb

Browse files
committed
Esempio03 dbDocker su AWS EKS con Heml-Chart e ArgoCD
1 parent 77c2f09 commit 25f70cb

File tree

3 files changed

+101
-86
lines changed

3 files changed

+101
-86
lines changed

Esempio03dbDockerAWS/README.md

Lines changed: 94 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ Progetto di esempio che crea i componenti
33
- un DB Mysql con una tabella "Persone"
44
- un backend con java spring boot, questo espone CRUD-API con protocollo Rest
55
- un frontend in javascript che consuma la API per visualizzare e modificare l'elenco delle persone
6-
Il progetto è pensato per funzionare con **docker-compose**, **Kubernetes** con **Minikube** e AWS EKS.
6+
Il progetto è pensato per funzionare con **docker-compose**, **Kubernetes** con **Minikube** e AWS EKS:
7+
- il backend e il frontend sono disponibili su DockerHub a `https://hub.docker.com/repositories/alnao`
8+
- esecuzione con Minikube per eseguire tutto in locale con anche MySql dentro un immagine docker
9+
- esecuzione su cluster AWS-EKS con creato tramite AWS-CLI
10+
- esecuzione con CloudFormation su `https://github.com/alnao/AwsCloudFormationExamples/tree/master/Esempio27eks` (con un docker-compose dedicato)
11+
- esecuzione su cluster AWS-EKS con Heml-Chart e ArgoCD
712

813

914
## Comandi base
@@ -19,6 +24,9 @@ Il progetto è pensato per funzionare con **docker-compose**, **Kubernetes** con
1924
```
2025
docker-compose up --build
2126
```
27+
- frontend `http://localhost:5084/`
28+
- backend `http://localhost:5080/api/persone`
29+
- backend `http://localhost:5080/api/persone/info`
2230
- verifica e pulizia
2331
```
2432
docker ps
@@ -40,88 +48,90 @@ Il progetto è pensato per funzionare con **docker-compose**, **Kubernetes** con
4048
docker build -t alnao/j-esempio02-frontend-bootstrap -f ./frontend-bootstrap/Dockerfile-frontend ./frontend-bootstrap/
4149
docker push alnao/j-esempio02-frontend-bootstrap
4250
```
43-
- avvio minikube con storage class (*perso un sacco di tempo per questo tema*)
44-
```
45-
minikube addons list | grep storage
46-
minikube addons enable default-storageclass
51+
- Esecuzione con Minikube in sistema locale
52+
- avvio minikube con storage class (*perso un sacco di tempo per questo tema*)
4753
48-
minikube start --driver=docker --memory=2048 --cpus=2
49-
minikube addons list | grep storage
50-
```
51-
- creazione Mysql su kubernetes in locale con Minikube:
52-
```
53-
kubectl apply -f ./kubernetes/mysql-pvc.yaml
54-
kubectl apply -f ./kubernetes/mysql.yaml
54+
```
55+
minikube addons list | grep storage
56+
minikube addons enable default-storageclass
5557
56-
kubectl describe pvc mysql-pvc
57-
kubectl describe pvc mysql-pvc
58-
kubectl describe deployment mysql-app
59-
kubectl describe service mysql-service
60-
```
61-
- creazione backend
62-
```
63-
kubectl apply -f ./kubernetes/springboot-app.yaml
64-
kubectl get services
65-
```
58+
minikube start --driver=docker --memory=2048 --cpus=2
59+
minikube addons list | grep storage
60+
```
61+
- creazione Mysql su kubernetes in locale con Minikube:
62+
```
63+
kubectl apply -f ./kubernetes/mysql-pvc.yaml
64+
kubectl apply -f ./kubernetes/mysql.yaml
6665
67-
- comandi di verifica
68-
```
69-
kubectl get events -A
70-
71-
kubectl get services
72-
kubectl get pods
73-
kubectl get pods --field-selector=status.phase=Pending
74-
kubectl describe node mysql-xxxxxxxxxxxxxxx
66+
kubectl describe pvc mysql-pvc
67+
kubectl describe pvc mysql-pvc
68+
kubectl describe deployment mysql-app
69+
kubectl describe service mysql-service
70+
```
71+
- creazione backend
72+
```
73+
kubectl apply -f ./kubernetes/springboot-app.yaml
74+
kubectl get services
75+
```
7576
76-
mysql -h"mysql-service" -p"3306" -u"root" -p"alnaoMagnifico"
77+
- comandi di verifica
78+
```
79+
kubectl get events -A
80+
81+
kubectl get services
82+
kubectl get pods
83+
kubectl get pods --field-selector=status.phase=Pending
84+
kubectl describe node mysql-xxxxxxxxxxxxxxx
7785
78-
minikube service springboot-app --url
79-
> http://192.168.49.2:31081
80-
```
81-
- nota: endpoint è mysql-service perchè il metadata del service
82-
- nota2: porta è 3306 NON so il perchè ma è così, *perso un sacco di tempo per questo motivo*
83-
- creazione frontend
84-
```
85-
kubectl apply -f ./kubernetes/frontend.yaml
86-
kubectl get services
87-
kubectl get pods
86+
mysql -h"mysql-service" -p"3306" -u"root" -p"alnaoMagnifico"
8887
89-
minikube service frontend-bootstrap --url
90-
> http://192.168.49.2:31082
91-
> http://192.168.49.2:31083/api/persone
88+
minikube service springboot-app --url
89+
> http://192.168.49.2:31081
90+
```
91+
- nota: endpoint è mysql-service perchè il metadata del service
92+
- nota2: porta è 3306 NON so il perchè ma è così, *perso un sacco di tempo per questo motivo*
93+
- creazione frontend
94+
```
95+
kubectl apply -f ./kubernetes/frontend.yaml
96+
kubectl get services
97+
kubectl get pods
9298
93-
```
94-
- nota: nella configuazione messo l'endpoint con localhost perchè il frontend è in javascript quindi client e viene eseguito sul browser, l'immagine docker del webserver non si collega direttamente al backend
95-
- nota: c'è un proxy per evitare che il browser chiami direttamente il backend (conoscendo l'url), cioè il browser chiama `<frontend>/api/persone` che poi viene indirizzato a `<backend>/api/persone`
96-
- Comandi vari
97-
```
98-
kubectl get services
99-
kubectl get deployments
100-
```
101-
- Verifica connesione dal frontend al backend
102-
```
103-
apk add curl
104-
curl http://springboot-app:8080/api/users
105-
```
106-
- Verifica log del proxy backend
107-
```
108-
kubectl logs frontend-bootstrap-6c95494cf8-f4dlx -c nginx-proxy
109-
```
110-
- Cancellazione di tutte le componenti su minikube
111-
```
112-
kubectl delete configmap frontend-config
113-
kubectl delete service frontend-bootstrap
114-
kubectl delete deployment frontend-bootstrap
99+
minikube service frontend-bootstrap --url
100+
> http://192.168.49.2:31082
101+
> http://192.168.49.2:31083/api/persone
102+
103+
```
104+
- nota: nella configuazione messo l'endpoint con localhost perchè il frontend è in javascript quindi client e viene eseguito sul browser, l'immagine docker del webserver non si collega direttamente al backend
105+
- nota: c'è un proxy per evitare che il browser chiami direttamente il backend (conoscendo l'url), cioè il browser chiama `<frontend>/api/persone` che poi viene indirizzato a `<backend>/api/persone`
106+
- Comandi vari
107+
```
108+
kubectl get services
109+
kubectl get deployments
110+
```
111+
- Verifica connesione dal frontend al backend
112+
```
113+
apk add curl
114+
curl http://springboot-app:8080/api/users
115+
```
116+
- Verifica log del proxy backend
117+
```
118+
kubectl logs frontend-bootstrap-6c95494cf8-f4dlx -c nginx-proxy
119+
```
120+
- Cancellazione di tutte le componenti su minikube
121+
```
122+
kubectl delete configmap frontend-config
123+
kubectl delete service frontend-bootstrap
124+
kubectl delete deployment frontend-bootstrap
115125
116-
kubectl delete service springboot-app
117-
kubectl delete deployment springboot-app
126+
kubectl delete service springboot-app
127+
kubectl delete deployment springboot-app
118128
119-
kubectl delete service mysql-service
120-
kubectl delete deployment mysql-app
129+
kubectl delete service mysql-service
130+
kubectl delete deployment mysql-app
121131
122-
kubectl delete pvc mysql-pvc
123-
kubectl delete pv mysql-pv
124-
```
132+
kubectl delete pvc mysql-pvc
133+
kubectl delete pv mysql-pv
134+
```
125135
- Creazione cluster su EKS `aws-j-es03`
126136
- Creazione del cluster (vedi [documentazione ufficiale](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html))
127137
- Impostazione account
@@ -413,22 +423,21 @@ Il progetto è pensato per funzionare con **docker-compose**, **Kubernetes** con
413423
```
414424
kubectl apply -f helm-charts/spring-boot-app-argocd-app.yaml -n argocd
415425
```
426+
- Sui file creati da HEML nel `Chart.yaml` e nelle sottocartella avevano il punto `.` al posto del nome dell'applicazione, ho dovuto sistemare i file a mano (sia Chart.yaml che tutti i file dentro template che avevano dei `..`) *ho perso ore per questo problema*.
427+
- Funziona anche se il microservizio non parte perchè non riesce a collegarsi al DB, *semplicemente perchè non esiste nessun DB in questo esempio*.
428+
- Pulizia finale di tutto
429+
```
430+
kubectl delete -f helm-charts/spring-boot-app-argocd-app.yaml -n argocd
431+
eksctl delete cluster --region=eu-central-1 --name=aws-j-es03-eks-helm-cluster
432+
# ci mette un bel po' anche 15 minuti!
416433
417-
418-
- FINALE
419-
kubectl delete -f helm-charts/spring-boot-app-argocd-app.yaml -n argocd
420-
eksctl delete cluster --region=eu-central-1 --name=aws-j-es03-eks-cluster-helm
421434
kubectl delete -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml -n argocd
422435
kubectl delete namespace argocd
423436
424437
aws ecr describe-repositories --query "repositories[*].repositoryName" --output text
425-
aws ecr delete-repository --repository-name spring-boot-app --force --region your-aws-region
426-
427-
rimuovere il ECR
428-
rimuovere EKS cluster "aws-j-es03-eks-cluster-helm"
429-
- TODO
430-
- secret
431-
- TODO
438+
aws ecr delete-repository --repository-name aws-eks-j-es03-repo --region $REGION --force
439+
```
440+
- verificare che è stato tutto rimosso: ECR, EKS, VPC, Subnet, EC2, ALB, ASG e il cluster EKS "aws-j-es03-eks-cluster-helm"
432441
433442
434443
# IA
@@ -467,6 +476,7 @@ Ciao vorrei creare un microservizio in java spring boot che esegue un crud su un
467476
- ciao mi spieghi cosa è argo e come lo posso usare con Kubernetes?
468477
- vorrei provare argo e helm in un mio progetto kubernetes dove ho un microservizio in java spring boot, dammi l'elenco di tutti i passi che devo fare
469478
- immagina che voglio eseguire tutto questo su AWS, il mio repository è "https://github.com/alnao/JavaSpringBootExample/tree/master/Esempio03dbDockerAWS"
479+
- lavorato molto su alcuni errori di Helm e AWS ma poi andato tutto
470480
471481
472482

Esempio03dbDockerAWS/backend-springboot/entrypoint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ mysql -h"${MYSQL_HOST}" -p"${MYSQL_PORT}" -u"root" -p"${MYSQL_ROOT_PASSWORD}" <
2323
# Avvia l'app Spring Boot
2424
echo "🚀 Avvio del microservizio Spring Boot..."
2525
exec java -jar /app/app.jar
26-
echo "✅ Microservizio Spring Boot avviato con successo!"
26+
echo "✅ Microservizio Spring Boot avviato con successo!"
2727
# Fine dello script

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
# Progetti:
99
- **Esempio01base**: esempio base con singola API, Docker-file per eseguire il servizio in immagine docker e su Kubernetes/Minikube
1010
- **Esempio02db**: esempio di CRUD con una tabella *articoli* su MySql, Docker-compose per eseguire il micro-servizio e il DMBS su docker
11-
- **Esempio03dbDockerAWS**: esempio di CRUD con tabella *persone* su MySql, con microservizio e microfrontend, eseguiti con docker-compose e minikube, *a breve anche su AWS*
11+
- **Esempio03dbDockerAWS**: esempio di CRUD con tabella *persone* su MySql, con microservizio e microfrontend in javascript di esempio
12+
- il backend e il frontend sono disponibili su DockerHub a `https://hub.docker.com/repositories/alnao`
13+
- esecuzione con Minikube per eseguire tutto in locale con anche MySql dentro un immagine docker
14+
- esecuzione su cluster AWS-EKS con creato tramite AWS-CLI
15+
- esecuzione con CloudFormation su `https://github.com/alnao/AwsCloudFormationExamples/tree/master/Esempio27eks` (con un docker-compose dedicato)
16+
- esecuzione su cluster AWS-EKS con Heml-Chart e ArgoCD
1217

1318
## Progetti in revisione:
1419
- ExampleMicro03postgres

0 commit comments

Comments
 (0)