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

JHipster Microservices with Spring boot 2 and Kubernetes

JHipster Microservices with Spring boot 2 and Kubernetes

Devoxx Morocco 2018

Deepu K Sasidharan

November 30, 2018

More Decks by Deepu K Sasidharan

Other Decks in Programming


  1. JHipster Microservices with Spring boot 2 and Kubernetes Deepu K

    Sasidharan @deepu105 deepu.js.org
  2. https://jhipster.tech #DevoxxMa @java_hipster About me Deepu K Sasidharan JHipster co-lead

    developer Senior product developer @ XebiaLabs OSS aficionado, author, speaker @deepu105 deepu.js.org
  3. https://jhipster.tech #DevoxxMa @java_hipster XebiaLabs dev test uat prod [Cloud] Orchestration

    Stack Middleware NoSQL PaaS Containers OS OS OS IaaS Network Servers DB / Storage Security SOFTWARE DEFINED DATA CENTER / CLOUD RELEASE ORCHESTRATION Backlog Management Provisioning/ Configuration Security ITSM / Service Management CMDB plan Project Management Issue Tracking ALM DEPLOYMENT AUTOMATION code SCM Code Analysis build Continuous Integration Centralized Repository test Test Tooling Test Visualization release ChatOps / Collaboration Email/ phone/ Excel operate BI / Monitoring Logging DEVOPS INTELLIGENCE
  4. https://jhipster.tech #DevoxxMa @java_hipster About JHipster Most popular Rapid Application Development

    platform for Java web applications and microservices ▪ 12k+ stars on GitHub ▪ 1.5M+ installations & 20k+ app generations per month ▪ 250k+ overall users ▪ 460+ contributors & 24 core team members ▪ 260+ companies using JHipster ▪ 70+ plugins
  5. https://jhipster.tech #DevoxxMa @java_hipster What can you do with JHipster? ▪

    Generate simple monolith web applications ▪ Generate complete microservice architectures ▪ Generate domain model (entities) ▪ Generate CI/CD pipelines ▪ Deploy to AWS, GCP, Heroku, Cloud Foundry ▪ Deploy to Docker, Kubernetes, Openshift, Rancher
  6. https://jhipster.tech #DevoxxMa @java_hipster Is it some junk generated code?

  7. https://jhipster.tech #DevoxxMa @java_hipster What’s new? JHipster 5 and beyond!

  8. https://jhipster.tech #DevoxxMa @java_hipster JHipster 5 and beyond • React •

    Angular 7 • VueJS • Webpack 4 • Jest • Prettier • Spring Boot 2.x • Micrometer • Heroku + AWS + GAE + Azure • Istio • Blueprints • JDL 3 (application & deployment via JDL)
  9. https://jhipster.tech #DevoxxMa @java_hipster Spring Boot 2.x • Migration to Spring

    Boot 2.0 complete ◦ Another good reason to use JHipster! • Work is under way for reactive programming support ◦ Test it by running “jhipster --experimental” ◦ Still work to do on entities and on the client-side • Migration to Spring Boot 2.1 has started ◦ JDK 11 support ◦ We are waiting for Spring Cloud to support Spring Boot 2.1
  10. https://jhipster.tech #DevoxxMa @java_hipster Microservices with Netflix OSS Stack

  11. https://jhipster.tech #DevoxxMa @java_hipster Netflix OSS Eureka Service registry for service

    discovery and mid-tier load balancing. Ribbon Load balancing, fault tolerance, caching & batching. Hystrix Circuit breaking and fault tolerance Zuul Edge service(Routing, Load balancing, monitoring, security and more)
  12. https://jhipster.tech #DevoxxMa @java_hipster JHipster Registry Eureka server Provides service discovery

    Spring cloud config server Provides runtime configurations Administration server Monitoring, logs, configurations and dashboards Spring Boot Provides the application runtime
  13. https://jhipster.tech #DevoxxMa @java_hipster Microservice with JHipster Registry

  14. https://jhipster.tech #DevoxxMa @java_hipster JDL Application

  15. https://jhipster.tech #DevoxxMa @java_hipster JDL Entity & Relationship

  16. https://jhipster.tech #DevoxxMa @java_hipster JDL Deployment for docker compose

  17. https://jhipster.tech #DevoxxMa @java_hipster JDL JHipster Domain Language JDL : http://bit.ly/devoxx-ma-jdl-1

    Reference : https://www.jhipster.tech/jdl/ Studio : https://start.jhipster.tech/jdl-studio/
  18. https://jhipster.tech #DevoxxMa @java_hipster JHipster magic $ jhipster import-jdl app.jdl

  19. https://jhipster.tech #DevoxxMa @java_hipster Prerequisite - Cluster (GKE) Create GCP Project

    : $ gcloud projects create jhipster-demo $ gcloud config set project jhipster-demo Create GKE Cluster : $ gcloud container clusters create hello-hipster \ --cluster-version 1.10 \ --num-nodes 4 \ --machine-type n1-standard-2 Set Credentials: $ gcloud container clusters get-credentials hello-hipster
  20. https://jhipster.tech #DevoxxMa @java_hipster GKE Cluster

  21. https://jhipster.tech #DevoxxMa @java_hipster Deploy to GKE $ cd kubernetes $

    ./kubectl-apply.sh $ watch kubectl get pods -n jhipster $ kubectl get services -n jhipster
  22. https://jhipster.tech #DevoxxMa @java_hipster Gateway

  23. https://jhipster.tech #DevoxxMa @java_hipster Expose the Registry Create a load balancer:

    $ kubectl expose service jhipster-registry --type=LoadBalancer \ --name=exposed-registry -n jhipster Get the public IP : $ kubectl get service exposed-registry -n jhipster
  24. https://jhipster.tech #DevoxxMa @java_hipster JHipster Registry

  25. https://jhipster.tech #DevoxxMa @java_hipster JHipster Console

  26. https://jhipster.tech #DevoxxMa @java_hipster Microservices with Istio service mesh

  27. https://jhipster.tech #DevoxxMa @java_hipster What does Istio do? • Service discovery 

    • Automatic load balancing  • Routing, circuit breaking, retries, fail-overs, fault injection • Policy enforcement for access control, rate limiting, A/B testing, traffic splits, and quotas • Metrics, logs, and traces  • Secure service-to-service communication
  28. https://jhipster.tech #DevoxxMa @java_hipster Istio architecture

  29. https://jhipster.tech #DevoxxMa @java_hipster Prerequisite - Istio Install Istio : $

    cd ~/ $ export ISTIO_VERSION=1.0.2 $ curl -L https://git.io/getLatestIstio | sh - $ ln -sf istio-$ISTIO_VERSION istio $ export PATH=~/istio/bin:$PATH Install Istio in GKE cluster : $ kubectl apply -f ~/istio/install/kubernetes/helm/istio/templates/crds.yaml $ kubectl apply -f ~/istio/install/kubernetes/istio-demo.yaml \ --as=admin --as-group=system:masters Get Ingress Gateway IP: $ kubectl get svc istio-ingressgateway -n istio-system
  30. https://jhipster.tech #DevoxxMa @java_hipster Istio pods

  31. https://jhipster.tech #DevoxxMa @java_hipster Microservice with Istio on Kubernetes

  32. https://jhipster.tech #DevoxxMa @java_hipster JDL Application

  33. https://jhipster.tech #DevoxxMa @java_hipster JDL Deployment for Kubernetes with Istio

  34. https://jhipster.tech #DevoxxMa @java_hipster JDL JHipster Domain Language JDL : http://bit.ly/devoxx-ma-jdl-2

    Reference : https://www.jhipster.tech/jdl/ Studio : https://start.jhipster.tech/jdl-studio/
  35. https://jhipster.tech #DevoxxMa @java_hipster JHipster magic $ jhipster import-jdl app.jdl

  36. https://jhipster.tech #DevoxxMa @java_hipster Deploy to GKE $ cd kubernetes $

    ./kubectl-apply.sh $ watch kubectl get pods -n jhipster
  37. https://jhipster.tech #DevoxxMa @java_hipster Exploring the app Application Gateway: $ export

    INGRESS_IP=$(kubectl -n istio-system get svc istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') $ google-chrome store.$INGRESS_IP.nip.io
  38. https://jhipster.tech #DevoxxMa @java_hipster Monitoring & logs Grafana - Monitoring dashboard:

    $ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod \ -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 $ google-chrome http://localhost:3000 Prometheus - Log metrics: $ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l \ app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 $ google-chrome http://localhost:9090
  39. https://jhipster.tech #DevoxxMa @java_hipster Grafana dashboard

  40. https://jhipster.tech #DevoxxMa @java_hipster Prometheus dashboard

  41. https://jhipster.tech #DevoxxMa @java_hipster Observability Jaeger - Distributed tracing: $ kubectl

    -n istio-system port-forward $(kubectl -n istio-system get pod -l \ app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686 $ google-chrome http://localhost:16686 Service graph: $ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l \ app=servicegraph -o jsonpath='{.items[0].metadata.name}') 8088:8088 $ google-chrome http://localhost:8088/force/forcegraph.html
  42. https://jhipster.tech #DevoxxMa @java_hipster Jaeger tracing

  43. https://jhipster.tech #DevoxxMa @java_hipster Service graph

  44. https://jhipster.tech #DevoxxMa @java_hipster Is it worth the hype? + Kubernetes

    Native microservices + Reduced responsibilities(Service discovery, security, tracing, etc) + No need to write/maintain any code for some of the complex parts of a microservice architecture. + A/B testing, canary releases, and lot more - New compared to other stable options - Higher resource usage (CPU, Memory) - Higher running costs - Business logic related policies might be trickier
  45. https://jhipster.tech #DevoxxMa @java_hipster Other Microservices architecture options

  46. https://jhipster.tech #DevoxxMa @java_hipster Microservice with Consul

  47. https://jhipster.tech #DevoxxMa @java_hipster Microservice with Consul & Traefik

  48. https://jhipster.tech #DevoxxMa @java_hipster Main website https://jhipster.tech JHipster online https://start.jhipster.tech GitHub

    https://github.com/jhipster/generator-jhipster Twitter https://twitter.com/java_hipster Stack Overflow https://stackoverflow.com/questions/tagged/jhipster?sort=newest More information on JHipster
  49. https://jhipster.tech #DevoxxMa @java_hipster Thank you Do rate the talk if

    you found it useful!