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)

Made with Slides.com