Slide 1

Slide 1 text

Microservicios con contenedores y Kubernetes Caso: Promociones Multimarca FARMACIAS PERUANAS

Slide 2

Slide 2 text

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”

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

¿Porqué Microservicios?

Slide 5

Slide 5 text

¿Porqué Microservicios?

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

Casos de Éxito Internacional

Slide 9

Slide 9 text

Cultura ágil

Slide 10

Slide 10 text

Squads o Tribus

Slide 11

Slide 11 text

Docker y Kubernetes

Slide 12

Slide 12 text

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.

Slide 13

Slide 13 text

Docker

Slide 14

Slide 14 text

Kubernetes

Slide 15

Slide 15 text

¿Quienes me pueden brindar Kubernetes?

Slide 16

Slide 16 text

¿Quienes me pueden brindar Kubernetes?

Slide 17

Slide 17 text

¿Qué necesita saber ahora un Java Developer?

Slide 18

Slide 18 text

Tecnologías para implementar micro servicios

Slide 19

Slide 19 text

Serverless

Slide 20

Slide 20 text

Serverless

Slide 21

Slide 21 text

Serverless

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Nueva Propuesta

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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.

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

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.

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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.

Slide 43

Slide 43 text

Verificar http://localhost:8080/persons

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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.

Slide 50

Slide 50 text

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.

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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)

Slide 56

Slide 56 text

JoeDayz.pe

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

¿Preguntas? GRACIAS.