maj diverses
This commit is contained in:
parent
7347422ac1
commit
b82bfdcc39
145
README.md
145
README.md
@ -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
|
||||
|
||||
|
||||
29
deploy.sh
29
deploy.sh
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user