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

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

José Díaz

July 10, 2019
Tweet

More Decks by José Díaz

Other Decks in Technology

Transcript

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

    View Slide

  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”

    View Slide

  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

    View Slide

  4. ¿Porqué Microservicios?

    View Slide

  5. ¿Porqué Microservicios?

    View Slide

  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.

    View Slide

  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.

    View Slide

  8. Casos de Éxito Internacional

    View Slide

  9. Cultura ágil

    View Slide

  10. Squads o Tribus

    View Slide

  11. Docker y Kubernetes

    View Slide

  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.

    View Slide

  13. Docker

    View Slide

  14. Kubernetes

    View Slide

  15. ¿Quienes me pueden brindar Kubernetes?

    View Slide

  16. ¿Quienes me pueden brindar Kubernetes?

    View Slide

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

    View Slide

  18. Tecnologías para implementar micro servicios

    View Slide

  19. Serverless

    View Slide

  20. Serverless

    View Slide

  21. Serverless

    View Slide

  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

    View Slide

  23. Primera Promoción
    ü Basada en una arquitectura básica
    ü Fuimos creciendo, llegamos a un xlarge.
    ü Sin Integración con AzureDevOps.

    View Slide

  24. Opps...! Problemas
    En la Segunda promoción donde se sorteaba S/.5’000.00

    View Slide

  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

    View Slide

  26. Nueva Propuesta

    View Slide

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

    View Slide

  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

    View Slide

  29. SETUP
    • Si no tienes nada de lo anterior
    https://github.com/sandrogiacom/k8s

    View Slide

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

    View Slide

  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

    View Slide

  32. View Slide

  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).

    View Slide

  34. View Slide

  35. CREAR UN NAMESPACE
    • Es una buena practica crear un namespace para separar tu espacio de trabajo. Escribe:
    kubectl create namespace dev-to

    View Slide

  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.

    View Slide

  37. DETENER Y DESTROY MINIKUBE MACHINE
    minikube -p dev.to stop
    minikube -p dev.to delete

    View Slide

  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

    View Slide

  39. View Slide

  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.

    View Slide

  41. CREANDO UN MAKEFILE
    • Creando un Makefile en el mismo directorio de el Dockerfile.

    View Slide

  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.

    View Slide

  43. Verificar
    http://localhost:8080/persons

    View Slide

  44. Para detener la aplicación y la base de datos, escribir:
    make stop:app
    make stop:db

    View Slide

  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

    View Slide

  46. Creando minikube machine
    make k:setup va a iniciar un minikube, habilitar el ingress y crear un namespace “dev-to”.

    View Slide

  47. Creando Kubernetes resource
    Verificar que en el directorio kubernetes existen los subdirectorios app y mysql:

    View Slide

  48. app-configmap.yaml
    Configuraciones de la aplicación con variables de entorno.

    View Slide

  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.

    View Slide

  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.

    View Slide

  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 3306:3306

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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)

    View Slide

  56. JoeDayz.pe

    View Slide

  57. Acceso a 3 meses al campus.joedayz.pe
    Spring Boot y Cloud, Angular, Android, IOS, Docker y Kubernetes, Oracle PLSQL, Kotlin, etc.
    @joedayz

    View Slide

  58. Método de Aprendizaje
    • Libros
    • Video cursos
    • Revistas
    • Mentor
    • Comunidad
    • Hazlo tu mismo
    • Úsalo en proyectos

    View Slide

  59. ¿Preguntas?
    GRACIAS.

    View Slide