Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Empaquetando aplicaciones Java con Docker y Kubernetes

948 views

Published on

Presentación utilizada durante el seminario de actualización del Colegio de Ingenieros de Guatemala 2020.

Durante la charla se discuten principios básicos de Docker, Kubernetes y su necesidad/utilidad en microservicios con Java

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Empaquetando aplicaciones Java con Docker y Kubernetes

  1. 1. Empaquetado de aplicaciones Java con Docker y Kubernetes Víctor Orozco - @tuxtor 21 de febrero de 2020 Academik 1
  2. 2. Monólito Figura 1: Monólito 2
  3. 3. ESB Figura 2: ESB 3
  4. 4. Microservicios Figura 3: Microservicios 4
  5. 5. Monolito vs. Microservicios 5
  6. 6. Introducción a Docker
  7. 7. Linux 6
  8. 8. VMs 7
  9. 9. Hipervisores 8
  10. 10. Despliegue contenedores 9
  11. 11. Contenedor Contenedor = bibliotecas + app + shell 10
  12. 12. Contenedor Contenedor = bibliotecas + app + shell Ideas generales: • Distribución • Volatilidad • Automatización 11
  13. 13. Docker • Cgroups + Namespace: Isolamiento de recursos de un grupo y visibilidad entre procesos • libcontainer (LXC/Libvirt/systemd-nspawn) • SELinux, AppArmor, Netfilter 12
  14. 14. Docker • Cgroups + Namespace: Isolamiento de recursos de un grupo y visibilidad entre procesos • libcontainer (LXC/Libvirt/systemd-nspawn) • SELinux, AppArmor, Netfilter • Ventajas: Boot time, menos overhead 12
  15. 15. Docker • Cgroups + Namespace: Isolamiento de recursos de un grupo y visibilidad entre procesos • libcontainer (LXC/Libvirt/systemd-nspawn) • SELinux, AppArmor, Netfilter • Ventajas: Boot time, menos overhead • Desventajas: OCI, Linux 12
  16. 16. Docker • Cgroups + Namespace: Isolamiento de recursos de un grupo y visibilidad entre procesos • libcontainer (LXC/Libvirt/systemd-nspawn) • SELinux, AppArmor, Netfilter • Ventajas: Boot time, menos overhead • Desventajas: OCI, Linux (meh!) 12
  17. 17. Demo 1 • Imagen base (ubuntu) • Ejecución • Agregar paquete • Commit • Ejecución 13
  18. 18. Demo 1 • docker pull ubuntu • docker run ubuntu echo ”Hola ubuntu” • docker run -it ubuntu /bin/bash • apt-get update&&apt-get install nginx • docker ps • docker commit -id- tuxtor/nginx • docker run -d -p 81:80 tuxtor/nginx 14
  19. 19.   Docker y Java 14
  20. 20. Aplicaciones Java 15
  21. 21. Aplicaciones Java • War sobre un contenedor o app server • Microservicio como UberJar o FatJar • Microservicio en Docker 16
  22. 22.   17
  23. 23. War sobre app server • Todos los app servers tienen imagenes listas • Configuración debe ser externalizada • Archivos descriptores (en imagen) • Archivos de configuración de dominio (en imagen) • Archivos properties (en war) 17
  24. 24.   18
  25. 25. Microservicio como UberJar/FatJar • El jar no requiere entorno para ejecutarse, solo JVM • Configuración debe ser externalizada • Archivos de configuración de dominio (en imagen) • Archivos descriptores (en war) • Configuración mediante archivos properties (en war) 18
  26. 26.   19
  27. 27. Demo 2 Microservicio como FatJar + Docker + Config + Oracle Helidon 19
  28. 28. Microservicio en Docker • ThinJar • ThinJar - Mi código • Container - Dependencias/runtime • Archivos de configuración de dominio (en imagen) • Archivos descriptores (en war) • Configuración mediante archivos properties (en war) 20
  29. 29.   21
  30. 30. Demo 3 Microservicio como ThinJar + Docker + Payara Micro 21
  31. 31. Límites de memoria 22
  32. 32. Límites de memoria - JVM 23
  33. 33. Límites de memoria - JVM 24
  34. 34. Límites de memoria - JVM 25
  35. 35. Límites de memoria 26
  36. 36. Java Options 1 CMD java -XX:+PrintFlagsFinal -XX:+PrintGCDetails $JAVA_OPTIONS -jar java-container.jar 27
  37. 37. APIs vs Service Mesh
  38. 38. APIs 28
  39. 39. APIs 29
  40. 40. APIs • REST API • Configuration • Discovery • REST Client • Monitoring • Authentication • Logging • Resilience 30
  41. 41. APIs - Spring • REST API - Spring Rest • Configuration - Spring Config • Discovery - Eureka, Zuul • REST Client - Spring RestTemkplate • Monitoring y tracing - Zipkin • Authentication - Spring security • Logging - Kibana • Resilience - Hystrix 31
  42. 42. APIs - Basadas en Java/Jakarta EE • REST API - JAX-RS • Configuration - MicroProfile Config • Discovery - Ad-hoc/Zookeeper • REST Client - MicroProfile Client • Monitoring y tracing - MicroProfile Healthcheck • Authentication - MicroProfile JWT • Logging - Kibana • Resilience - MicroProfile Fault Tolerance 32
  43. 43. El camino a Kubernetes 33
  44. 44. El camino a Kubernetes Créditos: Rafael Benevides 34
  45. 45. Kubernetes Créditos: Rafael Benevides 35
  46. 46. Kubernetes Créditos: Rafael Benevides 36
  47. 47. Kubernetes Créditos: Rafael Benevides 37
  48. 48. Kubernetes 38
  49. 49. Kubernetes - Pod ¿Que es un pod? • Uno o más contenedores • IP Compartida • Caen todos o ninguno (ciclo de vida) • Storage compartido • Recursos compartidos 39
  50. 50. Kubernetes - Deployment ¿Que es un deployment? Descriptor que mantiene el número de PODs replicas en ejecución. Describe un estado 40
  51. 51. Kubernetes - Servicios ¿Que es un servicio? Agrupación de PODs, -e.g. una IP estable virtual y un nombre de DNS si se requiere- 41
  52. 52. Víctor Orozco • vorozco@nabenik.com • @tuxtor • http://vorozco.com • http://tuxtor.shekalug.org This work is licensed under Creative Commons Attribution- NonCommercial-ShareAlike 3.0 Guatemala (CC BY-NC-SA 3.0 GT). 42
  53. 53. 43

×