Kubernetes exemple avec Minikube
Exemple de déploiement d'une application flask avec postgres en backend et vue.js en front
Pré requis 📎
- Docker et compose plugin 🐳
- Virtualbox 💻
- Minikube (mini K8S)
Installation Docker et compose
wget https://git.legaragenumerique.fr/GARAGENUM/docker/raw/branch/main/docker-install.sh && bash ./docker-install.sh
##~ Installation de Virtualbox
wget -O- -q https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo gpg --dearmour -o /usr/share/keyrings/oracle_vbox_2016.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle_vbox_2016.gpg] http://download.virtualbox.org/virtualbox/debian bookworm contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
sudo apt update
sudo apt install virtualbox-7.0
Installation Minikube
Installer et lancer Minikube:
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:
minikube start --vm-driver=virtualbox --nodes 2
minikube dashboard
La dashboard pop dans le navigateur 📊
Déploiement des services 🚀
Volume persistant
- Créer le volume persistant:
kubectl apply -f ./kubernetes/persistent-volume.yml
- Créer le volume claim:
kubectl apply -f ./kubernetes/persistent-volume-claim.yml
Secrets 🔒
- Créer un objet secret (database user + password):
kubectl apply -f ./kubernetes/secret.yml
Les secrets sont encodés sur base 64
echo -n "pleasechangeme" | base64
# output:
cGxlYXNlY2hhbmdlbWU=
echo -n "sample" | base64
# output:
c2FtcGxl
Postgres
- Créer le deployement:
kubectl create -f ./kubernetes/postgres-deployment.yml
- Créer le service:
kubectl create -f ./kubernetes/postgres-service.yml
- Créer la database:
POD_NAME=$(kubectl get pod -l service=postgres -o jsonpath="{.items[0].metadata.name}")
kubectl exec $POD_NAME --stdin --tty -- createdb -U sample books
Flask
- Créer le deployement:
kubectl create -f ./kubernetes/flask-deployment.yml
- Créer le service:
kubectl create -f ./kubernetes/flask-service.yml
- Appliquer la migration et la source de la database:
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
Vue
- Créer le deployement:
kubectl create -f ./kubernetes/vue-deployment.yml
- Créer le service:
kubectl create -f ./kubernetes/vue-service.yml
Ingress 🚪
- Installer et démarrer l'ingress:
minikube addons enable ingress
kubectl apply -f ./kubernetes/minikube-ingress.yml
- Ajouter une entrée au fichier /etc/hosts:
echo "$(minikube ip) flask.k8s" | sudo tee -a /etc/hosts
Résultat 🏁
- L'application est disponible à l'adresse:
- Tester les différents pods du replica set flask:
for ((i=1;i<=10;i++)); do curl http://flask.k8s/books/ping; done
Version semi automatisée (deploy.sh)
./deploy.sh
# attendre que la dashboard pop dans le navigateur, puis:
POD_NAME=$(kubectl get pod -l service=postgres -o jsonpath="{.items[0].metadata.name}")
kubectl exec $POD_NAME --stdin --tty -- createdb -U sample books
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
Si vous rencontrez des erreurs avec les commandes, attendre un peu que les pods soient déployés
Commandes utiles 👍
- Infos:
kubectl get pods
kubectl get deployment
- Scaler des les services:
kubectl scale deployment flask --replicas=5
kubectl scale deployment vue --replicas=2
- Pods logs:
kubectl logs <POD_NAME>
Debug 😭
- En cas de problèmes avec Minikube, reinstaller celui-ci:
minikube stop; minikube delete
sudo rm /usr/local/bin/minikube
rm -rf ~/.minikube
# re-download minikube
minikube start
Cheatsheet 😜
Todo 📋
- commandes kubectl utiles + mise à l'échelle
- changer flask.book
- transposer ver K8S multinode
- traduire vue.js templates
Source
Description
Languages
JavaScript
44.7%
Vue
24.3%
Shell
16.8%
Python
11.8%
Dockerfile
1.8%
Other
0.6%