Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Choose Your Own Adventure with JHipster & Kuber...

Matt Raible
February 12, 2020

Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020

Remember the choose your own adventure books that you used to read as a kid? This session is a reincarnation of a choose your own adventure book as a conference talk!

You'll learn about Spring Boot, Docker, and Kubernetes in this talk, along with the choices you make in the following areas:

* What kind of application architecture to build? Monolith or microservices?
* Would you like to use Java or Kotlin?
* MySQL, PostgreSQL, or MongoDB?
* Spring MVC or Spring WebFlux?
* Angular, React, or Vue.js?
* PWA or mobile app?
* Istio with Kubernetes or Kubernetes without Istio?

GitHub repos of demos:

* Monolith: https://github.com/mraible/healthy-hipster
* Microservices: https://github.com/mraible/djug-microservices

YouTube video: https://youtu.be/SolTvAXhaVc

Matt Raible

February 12, 2020
Tweet

More Decks by Matt Raible

Other Decks in Programming

Transcript

  1. Ray Tsang and Matt Raible Choose Your Own Adventure with

    JHipster & K8s @saturnism | @mraible
  2. Who is Ray Tsang? Developer Advocate at Google Cloud Kubernetes

    Enthusiast JHipster Committer Backpacker, snowboarder, photographer @saturnism on Twitter
  3. Who is Matt Raible? Developer Advocate at Okta Web Framework

    Enthusiast JHipster Committer Skier, rafter, classic VW fan @mraible on Twitter
  4. JHipster Gives You Lots of Options Spring Boot Spring Security

    SQL or NoSQL Maven or Gradle Bootstrap Angular, React, or Vue End-to-End Tests Performance Tests 26,000+ options https://arxiv.org/abs/1710.07980
  5. Monolith vs. Microservice Architecture Monolith Microservices Pro Single app to

    manage Single CI/CD pipeline Low latency between calls Low coupling Faster build / deploy cycle per service Easier to scale out individual services Con Slow build / deploy cycle High coupling Harder to scale out Multiple apps to manage Multiple CI/CD pipeline Multiple EVERYTHING! High latency and issues between calls Proper service boundary
  6. Unpopular Opinion "Monoliths are the future because the problem people

    are trying to solve with microservices doesn’t really line up with reality." https://changelog.com/posts/monoliths-are-the-future
  7. FYI... Micronaut & Quarkus Support is in development https://github.com/jhipster/generator-jhipster-micronaut npm

    install -g generator-jhipster-micronaut mhipster https://github.com/jhipster/jhipster-quarkus npm install -g generator-jhipster-quarkus jhipster -d --blueprint quarkus
  8. What do you want to build? Monoliths 21 Points Health

    Blog Bug Tracker Microservices Online Store Blog + Store https://github.com/jhipster/jdl-samples
  9. Yes to PWA! <script> if ('serviceWorker' in navigator) { window.addEventListener('load',

    function() { navigator.serviceWorker.register('/service-worker.js') .then(function () { console.log('Service Worker Registered'); }); }); } </script> src/main/webapp/index.html
  10. PWA Requires HTTPS @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override protected void configure(HttpSecurity http) throws Exception { http.requiresChannel() .requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null) .requiresSecure(); } } SecurityConfiguration.java https://developer.okta.com/blog/2018/07/30/10-ways-to-secure-spring-boot
  11. Kubernetes Created by Google in 2014 Based on learnings from

    Google's internal orchestration tool Manages deployment of containers across a cluster of machines Currently managed by Cloud Native Foundation Single deployment target, multiple cloud/on-prem environments
  12. Kubernetes You've chosen the path to become a YAML developer...

    Everything will be YAML from here on! Don't fear. JHipster will generate all the YAMLs for you!
  13. With Istio or Without? • Kubernetes manages deployment of applications

    • Istio manages the services to service communication • Retries • Traces • Monitoring • L7 Routing • L7 Load Balancing (internal and external) • mTLS • Out of the box Observability with Jaeger, Kiali, Prometheus, Grafana
  14. Kubernetes to the Cloud! Run Kubernetes sub-generator Deploy to GKE

    on GCP Have a look at K9s Who let the pods out?!? https://github.com/derailed/k9s
  15. Additional Configuration for OAuth 2.0 JHipster uses Keycloak by default

    Configuration is not auto-generated for Kubernetes Remember to configure Issuer, Client ID, and Client Secret
  16. Load Balancer, NodePort, or Ingress... JHipster Gateway has 2 functionalities

    • The frontend code • Routing ("/service/blog/api" → Blog Service) • Has Retries • But 1 extra hop Kubernetes has built-in URL mapping via Ingress • No retries
  17. The End You survived today's encounter with YAML, and the

    paradox of choice. Take the JHipster adventure, and good luck! Congratulations!
  18. Questions? 49 Keep in Touch! @mraible / [email protected] @saturnism /

    [email protected] Presentation speakerdeck.com/mraible Code github.com/mraible