Utilisation de GKE pour un projet React.js / Spring Boot
Docker Meetup 26 mars 2019
Bertrand Florat
Le projet
- Application back-office et front-office
de gestion des expertises sinistre - Progressive Web App
- 7 mois, un developpeur
Pourquoi Docker et Kubernetes (K8S) ?
- Delais très contraints, limiter la charge d'intégration au minimum vital
- K8S : s'appuyer sur une plateforme éprouvée pour l'architecture (sécurité, scalabilité) et l'exploitation (logs centralisés, supervision)
Bref : en faire le moins possible et s'appuyer sur ceux qui savent
Les objets K8S utilisés
- Pour chaque composant applicatif : un deployment (replicas = 1 pour le moment) + un service
- Stockage : un PV (Persistent Volume) et un PVC (PV Claim) pour l'application, un autre pour le backup de la base
- Un CronJob pour le batch et un autre pour le backup
- Un ingress pour exposer le frontend et l'API sur Internet en HTTPS + un backend-config pour régler le timeout
- Un Job de backup, un job de restore
- Pour la gestion des certificats : un issuer (extension cert-manager)
Soit 17 objets (fichiers yaml) qui décrivent toute l'infrastructure et en donne l'état désiré
L'effet wow
-
Infrastructure totalement automatisée (IaC), jamais eu besoin réel de se loguer en ssh sur un noeud K8S
-
Redeploiement en quelques secondes suite à changement de serveur
-
Création et renouvellement automatique des certificats HTTPS let's encrypt avec cert-manager
-
Mises à jour sans interruption
-
DNS inclu (nom du service)
-
Outils (comme le port-forward, le multi-config...)
Wow GKE
- Montée de version K8S en un clic, prend 10 minutes
- Stackdriver : gestion des logs et de la supervision très puissant (exemple : Log metrics, ajout d'indicateurs BAM en quelques minutes, alertes par SMS, mails...)
Irritants
- Fichiers descriptifs :
- yaml très verbeux, on a l'impression de devoir écrire 15 fois la même chose (voir principe des labels)
- api pas toujours cohérente (ex: selector dans service / matchLabels dans deployment)
- Se faire à la syntaxe yaml (json supporté)
- Complexe sur le poste de dev (malgré minikube), pas représentatif GKE -> Docker simple ou pas de Docker
- Spécificités ingress (ex: kubernetes.io/ingress.allow-http)
- Complexe (mais documentation complète)
Conseils
-
Payer son (cher) ticket d'entrée : comprendre le modèle réseau, les labels, les PV etc...
-
Comprendre l'architecture générale (managers, workers, kubelet, kube-proxy ...)
-
Faire un MooC ?
-
Pratiquer (tutos en ligne, test GKE gratuit, Minikube)
docker-meetup-26mars2019
By Bertrand Florat
docker-meetup-26mars2019
- 761