SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
Cómo leer una licencia de
software y no morir en el intento
Pablo Chico
Organizador Docker Madrid Meetup
MAD · NOV 22-23 · 2019
Micael Gallego
Profesor Universidad Rey Juan Carlos
About Us
Micael Gallego
● @micael_gallego
● Java Developer
● Laboratorio software CodeURJC
● Director Máster Cloud Apps en la
Universidad Rey Juan Carlos
About Us
Pablo Chico de Guzmán
● @pchico83
● Docker & Cloud Native Madrid
● 4 years working @Docker
● Kubernetes for Developers
● https://cloud.okteto.com
¿Qué es Kubernetes?
● Docker: Construcción y distribución de aplicaciones
● Kubernetes: Despliegue en producción en cluster
● Abstracción de cloud para developers
¿Desplegar en Kubernetes durante el desarrollo?
● Aplicaciones nativas de Kubernetes
● Acceso a la Kubernetes API
● Aplicaciones que dependen de Kubernetes para funcionar
● Acoplada con Config Maps, Secretos, Volúmenes
● Microservices, Service Discovery de Kubernetes
● Networking, Service mesh
¿Cómo desplegar en Kubernetes durante el desarrollo?
¿Cómo acelerar el ciclo de build/push/redeploy?
FROM python:3-alpine
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt
ADD . /src
CMD ["python", "app.py"]
Desarrollo Java en un IDE (sin Kubernetes)
● Java es un lenguaje que necesita compilación
● Los IDEs permiten compilación incremental (muy rápida):
● Durante la edición: Para ayudar al developer (autocompletar y errores)
● Al guardar el fichero: Genera los binarios (.class) en disco
Desarrollo Java en un IDE (sin Kubernetes)
● Si se usa un IDE la experiencia es “similar” a los lenguajes de script
● Se guarda el fichero y está compilado de forma inmediata
● No hay esperas por el proceso de compilación
● Los frameworks se recargan automáticamente ante cambios (Hot Reload)
https://github.com/micaelgallego/k8s-dev-tools-commitconf19
Desarrollo Java en un IDE (sin Kubernetes)
Desarrollo Java con despliegue en Kubernetes
● Compilación y construcción del contenedor
FROM maven:3.6-jdk-8 as builder
COPY . /code/
WORKDIR /code
RUN mvn package
FROM openjdk:8-jre
COPY --from=builder /code/target/*.jar /usr/app/
WORKDIR /usr/app
CMD [ "java", "-jar", "demoservice-0.0.1-SNAPSHOT.jar" ]
Dockerfile
$ docker build . -t micaelgallego/demoservice-k8s1
$ docker push micaelgallego/demoservice-k8s1:latest
demoservice-k8s1
Desarrollo Java con despliegue en Kubernetes
● Despliegue en Kubernetes
$ kubectl apply -f k8s
$ kubectl get deployments,services
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.extensions/demoservice-dply 0/1 1 0 3m1s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/demoservice-service NodePort 10.104.15.250 <none> 8080:31236/TCP 31s
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 98d
demoservice-k8s1
Desarrollo Java con despliegue en Kubernetes
● Añadir un cambio en el servicio
● Compilación del código Java
● Descarga librerías Maven
● Construye el fat jar desde cero
● Construcción del contenedor con un nuevo fichero de 16Mb
● Publicación del contenedor en un registro (transferencia de red)
● Reinicio del deployment en Kubernetes (si el tag es latest)
$ kubectl rollout restart deployment demoservice-dply
demoservice-k8s1
Desarrollo Java con despliegue en Kubernetes
¿Se pueden optimizar las capas de la imagen con Java?
● No crear un fat jar con aplicación y librerías
● Separar librerías y aplicación en capas diferentes
● Cuando cambia la aplicación se transfieren los .class de la aplicación
● Extra bonus! La aplicación arrancará más rápido
https://spring.io/blog/2018/12/12/how-fast-is-spring
Optimización de capas con Dockerfile en SpringBoot
https://spring.io/guides/gs/spring-boot-docker/
Dockerfile
Optimización de capas con Jib
● Jib
● Dockeriza y publica cualquier aplicación Java
● No es necesario el Docker daemon
● Imagen con capas optimizadas (libs vs app)
● Imagen base ligera (distroless)
● Integrado con Maven y Gradle
● Desarrollado por Google
https://github.com/GoogleContainerTools/jib
Optimización de capas con Jib
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.6.1</version>
</plugin>
</plugins>
</build>
</project>
pom.xml
$ ./mvnw compile jib:build -Dimage=micaelgallego/demoservice-k8s2:latest
$ kubectl apply -f k8s
demoservice-k8s2
Optimización de capas con Jib
● Añadir un cambio en el servicio
$ kubectl rollout restart deployment demoservice-dply
$ ./mvnw compile jib:build -Dimage=micaelgallego/demoservice-k8s2:latest
demoservice-k8s2
Optimización de capas con Jib
¿Podemos optimizar más el proceso?
● Si tuviéramos un
compilador Java en el pod
podríamos enviar los
cambios en los ficheros
fuente que han sido
actualizados
● Con hot reload el cambio
en el fuente lanzaría la
compilación y la
actualización del servicio
en el pod
Okteto: Envía tu código del laptop al pod del cluster
● Sustituye el pod de la aplicación por otro pod con Maven (compilador)
● Ejecuta la aplicación de nuevo en ese contenedor (mvn spring-boot:run)
● Sincroniza los ficheros del laptop a ese pod de forma automática
Okteto: Envía tu código del laptop al pod del cluster
$ okteto up
$ kubectl apply -f k8s
demoservice-k8s3
Okteto: Envía tu código del laptop al pod del cluster
name: demoservice-dply
image: maven:3.6-jdk-8
command:
- mvn
- spring-boot:run
volumes:
- /root/.m2
forward:
- 8080:8080
okteto.yml
demoservice-k8s3
name: demoservice-dply
image: maven:3.6-jdk-8
command:
- mvn
- spring-boot:run
volumes:
- /root/.m2
forward:
- 8080:8080
Okteto: Envía tu código del laptop al pod del cluster
okteto.yml
Sustituye el pod del deployment
demoservice-dply...
...por una imagen con maven
Ejecuta la aplicación
Expone la app en localhost
Guarda la caché de maven en volúmen
demoservice-k8s3
Okteto: Depuración y LiveReload
Eclipse se puede conectar a una JVM
para hacer depuración remota
demoservice-k8s4
La extensión del navegador
LiveReload recarga la página cuando
detecta un cambio
Okteto: Depuración y LiveReload
name: demoservice-dply
image: maven:3.6-jdk-8
command:
- mvn
- spring-boot:run
volumes:
- /root/.m2
forward:
- 8080:8080
- 8000:8000
- 35729:35729
okteto.yml
● Podemos configurar la aplicación para que exporte el puerto 8000 para
depuración remota desde Eclipse
● Con las dev-tools expone el puerto 35729 para el plugin Remote LiveReload
del navegador
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
</jvmArguments>
</configuration>
</plugin>
...
pom.xml
demoservice-k8s4
Okteto: Envía tu código del laptop al pod del cluster
+
2
demoservice-k8s4
Okteto: Envía tu código del laptop al pod del cluster
demoservice-k8s4
Otros Tools de Desarrollo en Kubernetes
Despliegue de pods y sincronización de ficheros
Otros Tools de Desarrollo en Kubernetes
Tu laptop “conectado” a los servicios del cluster
Otros Tools de Desarrollo en Kubernetes
IDE ejecutado en el pod con interfaz remota / web
VS Code Remote
Development
Conclusiones
● Puedes evitar los 5
minutos en el ciclo de
build/push/redeploy
● Muchas herramientas
para desarrollo cloud
native eficiente
● Elige la más adecuada
para tu tecnología / flujo
de trabajo
Cómo leer una licencia de
software y no morir en el intento
Pablo Chico MAD · NOV 22-23 · 2019
Micael Gallego
Gracias!

Más contenido relacionado

La actualidad más candente

TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserMicael Gallego
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosMicael Gallego
 
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!Iván López Martín
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCMicael Gallego
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket
 
Aplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptLuis Guerrero
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicMicael Gallego
 
Kubernetes: Caso de uso real con mememtum y Taniwa
Kubernetes: Caso de uso real con mememtum y TaniwaKubernetes: Caso de uso real con mememtum y Taniwa
Kubernetes: Caso de uso real con mememtum y TaniwaJoselu Marina
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015 César Hernández
 
React, Flux y React native
React, Flux y React nativeReact, Flux y React native
React, Flux y React nativeEduard Tomàs
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event managerIvan Ortega
 

La actualidad más candente (20)

TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
 
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Angular 6
Angular 6Angular 6
Angular 6
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 
Aplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScript
 
Taller Grails
Taller GrailsTaller Grails
Taller Grails
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
Java poliglota
Java poliglotaJava poliglota
Java poliglota
 
Kubernetes: Caso de uso real con mememtum y Taniwa
Kubernetes: Caso de uso real con mememtum y TaniwaKubernetes: Caso de uso real con mememtum y Taniwa
Kubernetes: Caso de uso real con mememtum y Taniwa
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015 Mejorando la productividad en proyectos java EE con  CI y CD - OTN 2015
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
 
Python gui-mvc-pyqt
Python gui-mvc-pyqtPython gui-mvc-pyqt
Python gui-mvc-pyqt
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
React, Flux y React native
React, Flux y React nativeReact, Flux y React native
React, Flux y React native
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event manager
 
Gradle vs Maven
Gradle vs MavenGradle vs Maven
Gradle vs Maven
 

Similar a Herramientas y plugins para el desarrollo de aplicaciones cloud native para Kubernetes - CommitConf 2019

Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA_es
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020BelnGonzlezGarca1
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Restorando
 
Google Kubernetes Engine (GKE)
Google Kubernetes Engine (GKE)Google Kubernetes Engine (GKE)
Google Kubernetes Engine (GKE)Edith Puclla
 
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSJan Sanchez
 
Jenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemJenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemMario IC
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsSoftware Guru
 
Taller mobile by trustparency
Taller mobile by trustparencyTaller mobile by trustparency
Taller mobile by trustparencytrustparency
 

Similar a Herramientas y plugins para el desarrollo de aplicaciones cloud native para Kubernetes - CommitConf 2019 (20)

Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Meetup V.E.No.M. y docker
Meetup V.E.No.M. y dockerMeetup V.E.No.M. y docker
Meetup V.E.No.M. y docker
 
Gwt II - trabajando con gwt
Gwt II - trabajando con gwtGwt II - trabajando con gwt
Gwt II - trabajando con gwt
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
PDIDTI-S7.pptx
PDIDTI-S7.pptxPDIDTI-S7.pptx
PDIDTI-S7.pptx
 
Docker
DockerDocker
Docker
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
 
Google Kubernetes Engine (GKE)
Google Kubernetes Engine (GKE)Google Kubernetes Engine (GKE)
Google Kubernetes Engine (GKE)
 
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJS
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
 
Jenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker EcosystemJenkins Peru Meetup Docker Ecosystem
Jenkins Peru Meetup Docker Ecosystem
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Taller mobile by trustparency
Taller mobile by trustparencyTaller mobile by trustparency
Taller mobile by trustparency
 
Atica Dev Ops II
Atica Dev Ops IIAtica Dev Ops II
Atica Dev Ops II
 

Más de Micael Gallego

La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...Micael Gallego
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduMicael Gallego
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestMicael Gallego
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 Micael Gallego
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas SoftwareMicael Gallego
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosMicael Gallego
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsMicael Gallego
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Micael Gallego
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesMicael Gallego
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesMicael Gallego
 
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...Micael Gallego
 
El mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorEl mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorMicael Gallego
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Micael Gallego
 
GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016Micael Gallego
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaMicael Gallego
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?Micael Gallego
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Micael Gallego
 

Más de Micael Gallego (17)

La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenVidu
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTest
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas Software
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornos
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicaciones
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
 
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
 
El mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorEl mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesor
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016
 
GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
 

Herramientas y plugins para el desarrollo de aplicaciones cloud native para Kubernetes - CommitConf 2019

  • 1. Cómo leer una licencia de software y no morir en el intento Pablo Chico Organizador Docker Madrid Meetup MAD · NOV 22-23 · 2019 Micael Gallego Profesor Universidad Rey Juan Carlos
  • 2. About Us Micael Gallego ● @micael_gallego ● Java Developer ● Laboratorio software CodeURJC ● Director Máster Cloud Apps en la Universidad Rey Juan Carlos
  • 3. About Us Pablo Chico de Guzmán ● @pchico83 ● Docker & Cloud Native Madrid ● 4 years working @Docker ● Kubernetes for Developers ● https://cloud.okteto.com
  • 4. ¿Qué es Kubernetes? ● Docker: Construcción y distribución de aplicaciones ● Kubernetes: Despliegue en producción en cluster ● Abstracción de cloud para developers
  • 5. ¿Desplegar en Kubernetes durante el desarrollo? ● Aplicaciones nativas de Kubernetes ● Acceso a la Kubernetes API ● Aplicaciones que dependen de Kubernetes para funcionar ● Acoplada con Config Maps, Secretos, Volúmenes ● Microservices, Service Discovery de Kubernetes ● Networking, Service mesh
  • 6. ¿Cómo desplegar en Kubernetes durante el desarrollo?
  • 7. ¿Cómo acelerar el ciclo de build/push/redeploy? FROM python:3-alpine ADD requirements.txt requirements.txt RUN pip install -r requirements.txt ADD . /src CMD ["python", "app.py"]
  • 8. Desarrollo Java en un IDE (sin Kubernetes) ● Java es un lenguaje que necesita compilación ● Los IDEs permiten compilación incremental (muy rápida): ● Durante la edición: Para ayudar al developer (autocompletar y errores) ● Al guardar el fichero: Genera los binarios (.class) en disco
  • 9. Desarrollo Java en un IDE (sin Kubernetes) ● Si se usa un IDE la experiencia es “similar” a los lenguajes de script ● Se guarda el fichero y está compilado de forma inmediata ● No hay esperas por el proceso de compilación ● Los frameworks se recargan automáticamente ante cambios (Hot Reload) https://github.com/micaelgallego/k8s-dev-tools-commitconf19
  • 10. Desarrollo Java en un IDE (sin Kubernetes)
  • 11. Desarrollo Java con despliegue en Kubernetes ● Compilación y construcción del contenedor FROM maven:3.6-jdk-8 as builder COPY . /code/ WORKDIR /code RUN mvn package FROM openjdk:8-jre COPY --from=builder /code/target/*.jar /usr/app/ WORKDIR /usr/app CMD [ "java", "-jar", "demoservice-0.0.1-SNAPSHOT.jar" ] Dockerfile $ docker build . -t micaelgallego/demoservice-k8s1 $ docker push micaelgallego/demoservice-k8s1:latest demoservice-k8s1
  • 12. Desarrollo Java con despliegue en Kubernetes ● Despliegue en Kubernetes $ kubectl apply -f k8s $ kubectl get deployments,services NAME READY UP-TO-DATE AVAILABLE AGE deployment.extensions/demoservice-dply 0/1 1 0 3m1s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/demoservice-service NodePort 10.104.15.250 <none> 8080:31236/TCP 31s service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 98d demoservice-k8s1
  • 13. Desarrollo Java con despliegue en Kubernetes ● Añadir un cambio en el servicio ● Compilación del código Java ● Descarga librerías Maven ● Construye el fat jar desde cero ● Construcción del contenedor con un nuevo fichero de 16Mb ● Publicación del contenedor en un registro (transferencia de red) ● Reinicio del deployment en Kubernetes (si el tag es latest) $ kubectl rollout restart deployment demoservice-dply demoservice-k8s1
  • 14. Desarrollo Java con despliegue en Kubernetes
  • 15. ¿Se pueden optimizar las capas de la imagen con Java? ● No crear un fat jar con aplicación y librerías ● Separar librerías y aplicación en capas diferentes ● Cuando cambia la aplicación se transfieren los .class de la aplicación ● Extra bonus! La aplicación arrancará más rápido https://spring.io/blog/2018/12/12/how-fast-is-spring
  • 16. Optimización de capas con Dockerfile en SpringBoot https://spring.io/guides/gs/spring-boot-docker/ Dockerfile
  • 17. Optimización de capas con Jib ● Jib ● Dockeriza y publica cualquier aplicación Java ● No es necesario el Docker daemon ● Imagen con capas optimizadas (libs vs app) ● Imagen base ligera (distroless) ● Integrado con Maven y Gradle ● Desarrollado por Google https://github.com/GoogleContainerTools/jib
  • 18. Optimización de capas con Jib <project ...> ... <build> <plugins> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.6.1</version> </plugin> </plugins> </build> </project> pom.xml $ ./mvnw compile jib:build -Dimage=micaelgallego/demoservice-k8s2:latest $ kubectl apply -f k8s demoservice-k8s2
  • 19. Optimización de capas con Jib ● Añadir un cambio en el servicio $ kubectl rollout restart deployment demoservice-dply $ ./mvnw compile jib:build -Dimage=micaelgallego/demoservice-k8s2:latest demoservice-k8s2
  • 21. ¿Podemos optimizar más el proceso? ● Si tuviéramos un compilador Java en el pod podríamos enviar los cambios en los ficheros fuente que han sido actualizados ● Con hot reload el cambio en el fuente lanzaría la compilación y la actualización del servicio en el pod
  • 22. Okteto: Envía tu código del laptop al pod del cluster ● Sustituye el pod de la aplicación por otro pod con Maven (compilador) ● Ejecuta la aplicación de nuevo en ese contenedor (mvn spring-boot:run) ● Sincroniza los ficheros del laptop a ese pod de forma automática
  • 23. Okteto: Envía tu código del laptop al pod del cluster $ okteto up $ kubectl apply -f k8s demoservice-k8s3
  • 24. Okteto: Envía tu código del laptop al pod del cluster name: demoservice-dply image: maven:3.6-jdk-8 command: - mvn - spring-boot:run volumes: - /root/.m2 forward: - 8080:8080 okteto.yml demoservice-k8s3
  • 25. name: demoservice-dply image: maven:3.6-jdk-8 command: - mvn - spring-boot:run volumes: - /root/.m2 forward: - 8080:8080 Okteto: Envía tu código del laptop al pod del cluster okteto.yml Sustituye el pod del deployment demoservice-dply... ...por una imagen con maven Ejecuta la aplicación Expone la app en localhost Guarda la caché de maven en volúmen demoservice-k8s3
  • 26. Okteto: Depuración y LiveReload Eclipse se puede conectar a una JVM para hacer depuración remota demoservice-k8s4 La extensión del navegador LiveReload recarga la página cuando detecta un cambio
  • 27. Okteto: Depuración y LiveReload name: demoservice-dply image: maven:3.6-jdk-8 command: - mvn - spring-boot:run volumes: - /root/.m2 forward: - 8080:8080 - 8000:8000 - 35729:35729 okteto.yml ● Podemos configurar la aplicación para que exporte el puerto 8000 para depuración remota desde Eclipse ● Con las dev-tools expone el puerto 35729 para el plugin Remote LiveReload del navegador ... <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <jvmArguments> -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 </jvmArguments> </configuration> </plugin> ... pom.xml demoservice-k8s4
  • 28. Okteto: Envía tu código del laptop al pod del cluster + 2 demoservice-k8s4
  • 29. Okteto: Envía tu código del laptop al pod del cluster demoservice-k8s4
  • 30. Otros Tools de Desarrollo en Kubernetes Despliegue de pods y sincronización de ficheros
  • 31. Otros Tools de Desarrollo en Kubernetes Tu laptop “conectado” a los servicios del cluster
  • 32. Otros Tools de Desarrollo en Kubernetes IDE ejecutado en el pod con interfaz remota / web VS Code Remote Development
  • 33. Conclusiones ● Puedes evitar los 5 minutos en el ciclo de build/push/redeploy ● Muchas herramientas para desarrollo cloud native eficiente ● Elige la más adecuada para tu tecnología / flujo de trabajo
  • 34. Cómo leer una licencia de software y no morir en el intento Pablo Chico MAD · NOV 22-23 · 2019 Micael Gallego Gracias!