maj diverses

This commit is contained in:
Grégory Lebreton 2023-10-29 16:42:52 +01:00
parent 7347422ac1
commit b82bfdcc39
2 changed files with 107 additions and 67 deletions

145
README.md
View File

@ -1,72 +1,81 @@
# Kubernetes exemple avec Flask / Postgres et Vue
# Kubernetes exemple avec Minikube
### Docker :whale:
Exemple de déploiement d'une application flask avec postgres en backend et vue.js en front
Construire les images et démarrer les services:
### Pré requis :bookmark_tabs:
```bash
docker-compose up -d --build
```
- Docker et compose plugin
- Virtualbox
- Minikube (mini K8S)
1. [http://localhost:8080/](http://localhost:8080/)
1. [http://localhost:5001/books/ping](http://localhost:5001/books/ping)
1. [http://localhost:5001/books](http://localhost:5001/books)
### Installation Minikube
### Kubernetes
#### Minikube
[Installer](https://github.com/kubernetes/minikube/releases) et lancer [Minikube](https://kubernetes.io/docs/setup/minikube/):
Installer et lancer [Minikube](https://kubernetes.io/docs/setup/minikube/):
```bash
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
```
Démarrer le cluster:
- Démarrer le cluster:
```bash
minikube start --vm-driver=virtualbox
minikube start --vm-driver=virtualbox --nodes 2
minikube dashboard
```
#### Volume
### Déploiement des services :rocket:
Créer le volume persistant:
> La dashboard pop dans le navigateur :bar_chart:
#### Volume persistant
- Créer le volume persistant:
```bash
kubectl apply -f ./kubernetes/persistent-volume.yml
```
Créer le volume claim:
- Créer le volume claim:
```bash
kubectl apply -f ./kubernetes/persistent-volume-claim.yml
```
#### Secrets
#### Secrets :lock:
Créer un objet secret:
- Créer un objet secret:
```bash
kubectl apply -f ./kubernetes/secret.yml
```
> Les secrets sont encodés sur base 64
```bash
echo -n "pleasechangeme" | base64
# output:
cGxlYXNlY2hhbmdlbWU=
echo -n "sample" | base64
# output:
c2FtcGxl
```
#### Postgres
Créer le deployement:
- Créer le deployement:
```bash
kubectl create -f ./kubernetes/postgres-deployment.yml
```
Créer le service:
- Créer le service:
```bash
kubectl create -f ./kubernetes/postgres-service.yml
```
Créer la database:
- Créer la database:
```bash
kubectl get pods
@ -75,28 +84,19 @@ kubectl exec postgres-<POD_IDENTIFIER> --stdin --tty -- createdb -U postgres boo
#### Flask
onstruire l'image et la pousser sur le Docker Hub:
```bash
docker build -t <DOCKER_HUB_USERNAME>/flask-kubernetes ./services/server
docker push <DOCKER_HUB_USERNAME>/flask-kubernetes
```
> Make sure to replace `<DOCKER_HUB_USERNAME>` with your Docker Hub namespace in the above commands as well as in *kubernetes/flask-deployment.yml*
Créer le deployement:
- Créer le deployement:
```bash
kubectl create -f ./kubernetes/flask-deployment.yml
```
Créer le service:
- Créer le service:
```bash
kubectl create -f ./kubernetes/flask-service.yml
```
Appliquer la migration et la source de la database:
- Appliquer la migration et la source de la database:
```bash
kubectl get pods
@ -106,56 +106,87 @@ kubectl exec flask-<POD_IDENTIFIER> --stdin --tty -- python manage.py seed_db
#### Vue
Construire l'image et la pousser sur le Docker Hub:
```bash
docker build -t <DOCKER_HUB_USERNAME>/vue-kubernetes ./services/client \
-f ./services/client/Dockerfile-minikube
docker push <DOCKER_HUB_USERNAME>/vue-kubernetes
```
> Again, replace `<DOCKER_HUB_USERNAME>` with your Docker Hub namespace in the above commands as well as in *kubernetes/vue-deployment.yml*
Créer le deployement:
```bash
kubectl create -f ./kubernetes/vue-deployment.yml
```
Créer le service:
- - Créer le service:
```bash
kubectl create -f ./kubernetes/vue-service.yml
```
#### Ingress
#### Ingress :door:
Installer et démarrer l'ingress:
- Installer et démarrer l'ingress:
```bash
minikube addons enable ingress
kubectl apply -f ./kubernetes/minikube-ingress.yml
```
Ajouter une entrée au fichier */etc/hosts*:
- Ajouter une entrée au fichier */etc/hosts*:
```bash
echo "$(minikube ip) hello.world" | sudo tee -a /etc/hosts
echo "$(minikube ip) flask.book" | sudo tee -a /etc/hosts
```
Try it out:
### Résultat :checkered_flag:
1. [http://hello.world/books/ping](http://hello.world/books/ping)
1. [http://hello.world/books](http://hello.world/books)
- L'application est disponible à l'adresse:
:push_pin: [http://flask.book/](http://flask.book/)
> [http://hello.world/](http://hello.world/).
- Tester les différents pods du replica set flask:
```bash
for ((i=1;i<=10;i++)); do curl http://flask.book/books/ping; done
```
### Commandes
- Infos:
```bash
kubectl get pods
kubectl get deployment
```
- Scaler des les services:
```bash
kubectl scale deployment flask --replicas=5
kubectl scale deployment vue --replicas=2
```
- Pods logs:
```bash
kubectl logs <POD_NAME>
```
### Debug
- En cas de problèmes avec Minikube, reinstaller celui-ci:
```bash
minikube stop; minikube delete
rm /usr/local/bin/minikube
rm -rf ~/.minikube
# re-download minikube
minikube start
```
### Cheatsheet
[Kubernetes commandes](https://github.com/dennyzhang/cheatsheet-kubernetes-A4)
### Todo
- [ ] commandes kubectl utiles + mise à l'échelle
- [ ] changer hello.world
- [ ] changer flask.book
- [ ] transposer ver K8S multinode
- [ ] traduire vue.js templates

View File

@ -1,50 +1,59 @@
#!/bin/bash
echo "Creating the volume...\n"
minikube start --vm-driver=virtualbox
echo "Creating the volume..."
kubectl apply -f ./kubernetes/persistent-volume.yml
kubectl apply -f ./kubernetes/persistent-volume-claim.yml
echo "Creating the database credentials...\n"
echo "Creating the database credentials..."
kubectl apply -f ./kubernetes/secret.yml
echo "Creating the postgres deployment and service...\n"
echo "Creating the postgres deployment and service..."
kubectl create -f ./kubernetes/postgres-deployment.yml
kubectl create -f ./kubernetes/postgres-service.yml
echo "Creating the flask deployment and service...\n"
echo "Creating the flask deployment and service..."
kubectl create -f ./kubernetes/flask-deployment.yml
kubectl create -f ./kubernetes/flask-service.yml
echo "Adding the ingress...\n"
echo "Creating the vue deployment and service..."
kubectl create -f ./kubernetes/vue-deployment.yml
kubectl create -f ./kubernetes/vue-service.yml
echo "Adding the ingress..."
minikube addons enable ingress
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
kubectl apply -f ./kubernetes/minikube-ingress.yml
echo "Creating the vue deployment and service...\n"
echo "Creating hello.world entry in /etc/hosts..."
kubectl create -f ./kubernetes/vue-deployment.yml
kubectl create -f ./kubernetes/vue-service.yml
echo "$(minikube ip) hello.world" | sudo tee -a /etc/hosts
# BROKEN -> A FAIRE MANUELLEMENT !!!
echo "Creating database books in postgres...\n"
echo "Creating database books in postgres..."
POD_NAME=$(kubectl get pod -l service=postgres -o jsonpath="{.items[0].metadata.name}")
kubectl exec $POD_NAME --stdin --tty -- createdb -U sample books
# BROKEN -> A FAIRE MANUELLEMENT !!!
echo "Recreating database books in flask...\n"
echo "Recreating database books in flask..."
FLASK_POD_NAME=$(kubectl get pod -l app=flask -o jsonpath="{.items[0].metadata.name}")
kubectl exec $FLASK_POD_NAME --stdin --tty -- python manage.py recreate_db
kubectl exec $FLASK_POD_NAME --stdin --tty -- python manage.py seed_db
minikube dashboard