IDAT - Microservicios con contenedores y Kubernetes

IDAT - Microservicios con contenedores y Kubernetes

Esta presentación fue para la institución educativa IDAT de Tomas Valle con motivo de su Tech Fest 2019. Fue un honor haber recibido la invitación y compartir con profesores y alumnos.

Gracias
Ing. José Díaz

25322d9a039dd3cbd5ad552f451cf78f?s=128

José Díaz

July 10, 2019
Tweet

Transcript

  1. Microservicios con contenedores y Kubernetes Caso: Promociones Multimarca FARMACIAS PERUANAS

  2. Quienes Somos? Somos la unión de dos grandes familias: Inkafarma

    y Mifarma, con más de 2000 boticas en todo el Perú, con el propósito de.. “Proteger la salud y el bienestar de todas las familias peruanas”
  3. Miembros del Equipo Gerencia de Arquitectura y Aplicaciones Digitales en

    Farmacias Peruanas Alina Lozano Agile José Amadeo Diaz Gerente Héctor Vallejos Integrador Roy Sanchez DevOps
  4. ¿Porqué Microservicios?

  5. ¿Porqué Microservicios?

  6. Ventajas • Oportunidad para desplegar, construir y volver a desplegar

    módulos de software de manera independiente. Esto nos permite involucrarnos en diferentes equipos de proyectos y escribir código para micro servicios en diferentes lenguajes de programación. • Oportunidad para aplicar las últimas tecnologías para desplegar un nuevo servicio. Los desarrolladores son libres de escoger la tecnología que consideren idónea para el proyecto. • Desarrollo de software rápido. Los desarrolladores pueden desplegar sus módulos de forma independiente sin tener que esperar hasta que los otros componentes estén listos. • Entrega de software continuo. Los módulos de software pueden ser entregados continuamente en partes. • Fácil de entender y modificar el software. Las pequeñas piezas son fáciles de aprender para nuevos miembros del equipo , de manera, que pueden involucrarse de manera mas rápida. • Aislamiento de fallas. Las fallas en un simple módulo no afectan al resto de la aplicación.
  7. Desventajas • Dificultad para coordinar entre múltiples servicios. Los desarrolladores

    tienen que poner esfuerzo adicional para la integración entre micro servicios. • Incremento en esfuerzo para el área de operaciones, despliegue y monitoreo. Cada micro servicio es una unidad de despliegue separada y que va a ser liberada, probada y monitoreada. Asimismo, cada servicio necesita una base de datos separada. • Los cambios entre servicios dependientes puede ser un dolor de cabeza. Si necesitas hacer un cambio que afecte a diferentes servicios dependientes, tienes que hacer modificaciones en todos los servicios involucrados. Este procedimiento también requiere cooperación entre distintos equipos de desarrollo. • Las pruebas son tediosas y complicadas. Tu necesitas probar los servicios junto con los otros servicios dependientes. • Duplicidad en el uso de memoria. Diferentes clases y librerías son frecuentemente duplicadas en los contextos de micro servicios.
  8. Casos de Éxito Internacional

  9. Cultura ágil

  10. Squads o Tribus

  11. Docker y Kubernetes

  12. Kubernetes es acerca de orquestación de aplicaciones contenerizadas. Docker es

    buenísimo para crear tus primeros contenedores. Pero, tan pronto, necesitas escalar/crecer/bajar y/o distribuir la carga de tus aplicaciones, tu necesitaras un orquestador – tu necesitaras Kubernetes.
  13. Docker

  14. Kubernetes

  15. ¿Quienes me pueden brindar Kubernetes?

  16. ¿Quienes me pueden brindar Kubernetes?

  17. ¿Qué necesita saber ahora un Java Developer?

  18. Tecnologías para implementar micro servicios

  19. Serverless

  20. Serverless

  21. Serverless

  22. El área de Marketing solicitó una plataforma donde lanzar sus

    promociones para ambas marcas y un administrador en el cual poder visualizar y exportar los datos de los clientes registrados por marca. Caso: Promociones Multimarca
  23. Primera Promoción ü Basada en una arquitectura básica ü Fuimos

    creciendo, llegamos a un xlarge. ü Sin Integración con AzureDevOps.
  24. Opps...! Problemas En la Segunda promoción donde se sorteaba S/.5’000.00

  25. Opciones para despliegue en GCP Crear una maquina VIrtual Compute

    Engine PASS de GCP App Engine Orquestación de contenedores Kubernetes Engine 01 02 03 04 05 Contenedores como serverless Cloud Run Serverless Cloud Functions Opción elegida en FP
  26. Nueva Propuesta

  27. Vamos a la Demo!!! https://github.com/joedayz/java-kubernetes

  28. SETUP • Docker es una plataforma open source para crear,

    desplegar y administrar aplicaciones en contenedores en un sistema operativo común (OS), con un ecosistema de herramientas que la soportan. • Minikube implementar un cluster de Kubernetes local en macOS, Linux, yWindows. • La herramienta Kubernetes command-line, kubectl, nos permite ejecutar comandos en nuestros clusters de Kubernetes. • El cluster de Kubernetes se ejecuta dentro de una maquina virtual https://www.virtualbox.org/ NOTA: Vamos a trabajar con Java 11
  29. SETUP • Si no tienes nada de lo anterior https://github.com/sandrogiacom/k8s

  30. VERIFICAR QUE TODO TRABAJA • minikube version • kubectl version

    • virtualbox
  31. INICIAR MINIKUBE • minikube start • Con diferentes flags: minikube

    start –h --vm-driver: VM driver de cualquier de esta lista: virtualbox parallels vmwarefusion kvm xhyve hyperv hyperkit kvm2 vmware none. El default es "virtualbox" --memory int: Cantidad de RAM reservada para el minikube VM in MB (El default es 2048) --cpus int: Número de CPUs reservado para el minikube VM (El default es 2) --profile: El nombre de el minikube VM que va a ser usado. Esto puede ser modificado para permitir tener multiples instancias de minikube que van a correr de forma independiente (por default "minikube") Ejemplo: minikube start -p dev.to --cpus 2 --memory=4096
  32. None
  33. DASHBOARD • minikube -p dev.to dashboard • You can use

    Dashboard to get an overview of applications running on your cluster, as well as for creating or modifying individual Kubernetes resources (such as Deployments, Jobs, DaemonSets, etc).
  34. None
  35. CREAR UN NAMESPACE • Es una buena practica crear un

    namespace para separar tu espacio de trabajo. Escribe: kubectl create namespace dev-to
  36. HABILITAR INGRESS minikube -p dev.to addons enable ingress • El

    Ingress expone rutas HTTP y HTTPS desde fuera del cluster a servicios al interior del cluster. El Trafico es controlado por reglas definidas en el recurso Ingress.
  37. DETENER Y DESTROY MINIKUBE MACHINE minikube -p dev.to stop minikube

    -p dev.to delete
  38. CREANDO IMAGEN DOCKER • Vamos a experimentar con una aplicación

    Java que usa una base de datos mysql ejecutándose en docker. • Vamos a crear un Dockerfile
  39. None
  40. USANDO MAKE PARA AUTOMATIZAR TAREAS • Make es una herramienta

    que nos permite controlar la generación de ejecutables y otros archivos que no son parte del código fuente de un programa. • Usaremos "Make" para automatizar comandos maven y docker en este proyecto. Hay que verificar nuestra instalación de Make. Tipea make --version en la terminal. Si no aparece nada, por favor, instala make antes de continuar.
  41. CREANDO UN MAKEFILE • Creando un Makefile en el mismo

    directorio de el Dockerfile.
  42. CREANDO UN MAKEFILE • build: Ejecuta maven y crea una

    imagen docker con el nombre "java-k8s" run:db: Inicia un nuevo contenedor para la base de datos mysql run:app: Inicia un contenedor nuevo de la aplicación Escribir en este orden: • make build • make run:db • make run:app Para ver el log de la aplicación: • docker logs -f myapp Notas: Usa CTRL+C para salir del modo log. Escribe docker ps para ver como se ejecutan los contenedores. Observación: Espera 30 segundos entre run:db y run:app para dar tiempo a que levante la base de datos.
  43. Verificar http://localhost:8080/persons

  44. Para detener la aplicación y la base de datos, escribir:

    make stop:app make stop:db
  45. Desplegando en Kubernetes En este punto necesitamos que todo esto

    este listo: • make --version • minikube version • kubectl version • vboxmanage --version O sólo comprueba todo con: make check
  46. Creando minikube machine make k:setup va a iniciar un minikube,

    habilitar el ingress y crear un namespace “dev-to”.
  47. Creando Kubernetes resource Verificar que en el directorio kubernetes existen

    los subdirectorios app y mysql:
  48. app-configmap.yaml Configuraciones de la aplicación con variables de entorno.

  49. app-deployment.yaml Deployment crea un pod replicado. Para más información verificar

    la documentation. La parte importante aquí es el template que define el nombre de la imagen docker, puerto http y variables de entorno.
  50. app-service.yaml Esta es una forma abstracta de exponer una aplicación

    que se ejecuta en un conjunto de Pods como red de servicio. En el directorio mysql , nosotros tenemos solo archivos de deployment y service, porque las variables de entorno están en el mismo archivo.
  51. Desplegar Base de Datos make k:deploy-db : Crea el mysql

    deployment y service. Verifica si el servicio esta ejecutandose: kubectl get pods -n=dev-to Accede a la base de datos en localhost: kubectl port-forward -n=dev-to <pod_name> 3306:3306
  52. Build application and docker image make k:build-app build app and

    create docker image inside minikube machine. make k:deploy-app deploy app on cluster. Check if services is running: kubectl get pods -n=dev-to
  53. Check app url Minikube nos da el host y puerto

    por el cual acceder. Escribe: minikube -p=dev.to service -n dev-to myapp --url La dirección abajo será diferente para ti, cuando lo pruebas (lo más probable): http://192.168.99.133:30343 curl -X GET http://192.168.99.133:30343/persons
  54. Conclusión Con esta pequeña demo, hemos aprendido, acerca de, como

    construir y desplegar aplicaciones al interior de un cluster de kubernetes. Para crear todo lo visto de un solo comando, ingresar a la terminal , ubicate en el directorio del proyecto y ejecuta: make k:setup && make k:deploy-db && make k:build-app && make k:deploy-app
  55. Bibliografía • Cloud Native Computing Foundation • Google Kubernetes Engine

    • Azure Kubernetes Service • Amazon Elastic Container Service for Kubernetes • Azure Devops Documentation • OpenShift • Microprofile.io • Spring Cloud • Developers Redhat • Microservices.io Gracias @sandrogiacom (por la demo)
  56. JoeDayz.pe

  57. Acceso a 3 meses al campus.joedayz.pe Spring Boot y Cloud,

    Angular, Android, IOS, Docker y Kubernetes, Oracle PLSQL, Kotlin, etc. @joedayz
  58. Método de Aprendizaje • Libros • Video cursos • Revistas

    • Mentor • Comunidad • Hazlo tu mismo • Úsalo en proyectos
  59. ¿Preguntas? GRACIAS.