SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
Dev Tools para Kubernetes
Micael Gallego Carrillo y Pablo Chico de Guzmán
24-25 September, 2019
● Fundada en Abril del 2014
● Con Javier Provecho y Pablo Moncada
● 4.000 miembros
● ¡Ven a presentar con nosotros!
● https://meetup.com/Docker-Madrid
@DockerMadrid
Docker Madrid
About Us
Pablo Chico de Guzmán
● @pchico83
● Docker & Cloud Native Madrid
● 4 years working @Docker
● Kubernetes for Developers
● https://cloud.okteto.com
About Us
Micael Gallego
● @micael_gallego
● CodeURJC - Universidad Rey Juan
Carlos
● Java Developer
Agenda
● ¿Qué es Docker? ¿Qué es Kubernetes?
● Desarrollo de Aplicaciones Nativas de Kubernetes
● Inner Loop Muy Lento:
● Python Demo
● Java Demo
● Otros Puntos de Fricción: https://t.co/z2BSi0UFp6
● Conclusiones
https://github.com/micaelgallego/k8s-dev-tools-code
mo19
¿Qué es Docker?
● Build, Ship and Run. Any application, anywhere
● Proceso ligero, aislado y portable
¿Qué es Kubernetes?
● Orquestador open source
● Evolución de Borg, Google
● Contenedores en producción
● Declarativo, Respuesta a fallo
● Standard Run API
● Gran comunidad
¿Qué es una Aplicación Nativa de Kubernetes?
● Una aplicación que solo puede correr en Kubernetes
● Acceso a la Kubernetes API
● Otros casos (entornos integrados):
● Acoplada con Config Maps, Secretos, Volúmenes
● Microservices, Service Discovery de Kubernetes
● Networking, Service mesh
Desarrollo de Aplicaciones en Kubernetes
Optimizar build/push/redeploy
Python Demo
● PullAways (imagePullStrategy) puede recargar una aplicación con:
● IfNotPresent and rebuild image (solo local)
● Mount volume and hot reload (solo local)
kubectl rollout restart deployment deployment-name
Java Demo: desarrollo clásico con Eclipse
● Java es un lenguaje que necesita compilación
● Los IDEs (como Eclipse) permiten compilación incremental:
● Durante la edición: Para ayudar al developer (autocompletar y errores)
● Al guardar el fichero: Genera los binarios (.class) en disco
Java Demo: desarrollo clásico con Eclipse
● Para el desarrollador la experiencia es “similar” a los lenguajes de script
● No hay esperas por el proceso de compilación
● Es todo automático
● Frameworks web tienen Hot Reload: Guardar y actualizar
Java Demo: desarrollo clásico con Eclipse
Java Demo: build/push/redeploy
● Compilación y construcción del contenedor
FROM maven 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
Java Demo: build/push/redeploy
● 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
Java Demo: build/push/redeploy
● Añadir un cambio en el servicio
● Compilación servicio Java
● Descarga librerías Maven
● Construye el uber 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
Java Demo: build/push/redeploy
Java Demo: Optimizando capas
● Construcción del contenedor y transferencia más rápida
● Separar librerías y aplicación en capas diferentes
● Se aprovecha la caché con las librerías al construir
● Se reduce la transferencia al código de la aplicación
● Extra bonus! La aplicación arrancará más rápido*
* Exploded jar: https://spring.io/blog/2018/12/12/how-fast-is-spring
Java Demo: Optimizando capas
● Jib
● Conteineriza y publica aplicaciones Java
● No es necesario el Docker daemon
● Imagen optimizada (distroless)
● Integrado con Maven y Gradle
● Desarrollado por Google
https://github.com/GoogleContainerTools/jib
Java Demo: Optimizando capas
<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
Java Demo: Optimizando capas
● Añadir un cambio en el servicio
$ kubectl rollout restart deployment demoservice-dply
$ ./mvnw compile jib:build -Dimage=micaelgallego/demoservice-k8s2:latest
Java Demo: Optimizando capas
Java Demo: Recarga Automática con Okteto
● Podemos optimizar aún más
el proceso?
● Podemos transferir
únicamente los ficheros .class
nuevos del laptop al pod k8s
cuando hacemos un cambio?
● Si tenemos hot reload, eso
permitiría un reinicio del
servicio prácticamente
instantáneo...
Java Demo: Recarga Automática con Okteto
● Sincroniza ficheros del laptop a un pod desplegado en Kubernetes
● Redirige el log del pod a tu shell (ideal para desarrollo)
● Permite acceder en local a procesos del pod (con redirección de puertos)
Java Demo: Recarga Automática con Okteto
<project ...>
...
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.6.1</version>
<configuration>
<from>
<image>gcr.io/distroless/java:debug</image>
</from>
</configuration>
</plugin>
</plugins>
</build>
</project>
pom.xml
$ ./mvnw compile jib:build -Dimage=micaelgallego/demoservice-k8s3:latest
Java Demo: Recarga Automática con Okteto
name: demoservice-dply
command:
- java
- -cp
- /app/resources:/app/classes:/app/libs/*
- es.codeurjc.k8sdevtools.demoservice.K8sdevtoolsApplication
mountpath: /app/classes
subpath: target/classes
forward:
- 8080:8080
okteto.yml
$ okteto up
$ kubectl apply -f k8s
Java Demo: Recarga Automática con Okteto
+
2
Java Demo: Recarga Automática con Okteto
VSCode Remote Development
● Entornos de desarrollo aislados, replicables e integrados
● Contenedores, WSL y SSH
● Independencia de la máquina local
● Extensiones: debugger, linter, test frameworks…
VSCode Remote SSH
VSCode Remote Kubernetes
Otros Puntos de Fricción Desarrollando en Kubernetes
● Inner-loop muy lento
● Complejidad de los Kubernetes manifest
● Complejidad de kubectl y acceso a logs y errores
● IDE plugins y debuggers
● Correr todos mis microservicios en local
● Instalar Kubernetes en local
Conclusiones
Docker Kubernetes Okteto
Muchas Gracias!
24-25 September, 2019

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

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
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenVidu
 
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
 
Hack2Progress - Consejos para afrontar un Hackathon
Hack2Progress - Consejos para afrontar un HackathonHack2Progress - Consejos para afrontar un Hackathon
Hack2Progress - Consejos para afrontar un Hackathon
 
Codemotion 2015 crash y youdebug
Codemotion 2015   crash y youdebugCodemotion 2015   crash y youdebug
Codemotion 2015 crash y youdebug
 
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!
 
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
 
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
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
Java poliglota
Java poliglotaJava poliglota
Java poliglota
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event manager
 
20170405 - Ecosistema Javascript
20170405 - Ecosistema Javascript20170405 - Ecosistema Javascript
20170405 - Ecosistema Javascript
 
Taller Grails
Taller GrailsTaller Grails
Taller Grails
 
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
 
Creación de Plataformas
Creación de PlataformasCreación de Plataformas
Creación de Plataformas
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 
Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!Jenkins, no me rompas los builds!
Jenkins, no me rompas los builds!
 
Implementando una Arquitectura de Microservicios
Implementando una Arquitectura de MicroserviciosImplementando una Arquitectura de Microservicios
Implementando una Arquitectura de Microservicios
 
DevOps: una breve introducción
DevOps: una breve introducciónDevOps: una breve introducción
DevOps: una breve introducción
 

Similar a Dev Tools para Kubernetes - Codemotion 2019

Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
Jaime Perera Merino
 

Similar a Dev Tools para Kubernetes - Codemotion 2019 (20)

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]
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
 
Atica Dev Ops II
Atica Dev Ops IIAtica Dev Ops II
Atica Dev Ops II
 
Docker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 HuancayoDocker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 Huancayo
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Workshop docker: Iniciando en el Mundo de los Contenedores
Workshop docker: Iniciando en el Mundo de los ContenedoresWorkshop docker: Iniciando en el Mundo de los Contenedores
Workshop docker: Iniciando en el Mundo de los Contenedores
 
Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
 
Docker love WordPress
Docker love WordPressDocker love WordPress
Docker love WordPress
 
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...
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
Gwt II - trabajando con gwt
Gwt II - trabajando con gwtGwt II - trabajando con gwt
Gwt II - trabajando con gwt
 
Docker Ecosystem - Part I - Engine
Docker Ecosystem - Part I - EngineDocker Ecosystem - Part I - Engine
Docker Ecosystem - Part I - Engine
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para Docker
 
Construccion de proyectos con gradle
Construccion de proyectos con gradleConstruccion de proyectos con gradle
Construccion de proyectos con gradle
 
[ES] Primeros pasos con Maven
[ES] Primeros pasos con Maven[ES] Primeros pasos con Maven
[ES] Primeros pasos con Maven
 
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
 
Earthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroidesEarthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroides
 
Migrando CI a Docker
Migrando CI a DockerMigrando CI a Docker
Migrando CI a Docker
 
Despliegue de aplicaciones Java con Docker y Kubernetes
Despliegue de aplicaciones Java con Docker y KubernetesDespliegue de aplicaciones Java con Docker y Kubernetes
Despliegue de aplicaciones Java con Docker y Kubernetes
 
Usando Django con Docker
Usando Django con DockerUsando Django con Docker
Usando Django con Docker
 

Más de Micael Gallego

Más de Micael Gallego (19)

Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
 
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...
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTest
 
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. 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
 
TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2
 
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
 
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)
 

Último

TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptxTECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
UPSE
 
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdfTECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
UPSE
 

Último (10)

TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptxTECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
 
El necesario mal del Legacy Code (Drupal Iberia 2024)
El necesario mal del Legacy Code (Drupal Iberia 2024)El necesario mal del Legacy Code (Drupal Iberia 2024)
El necesario mal del Legacy Code (Drupal Iberia 2024)
 
Tipos de datos en Microsoft Access definiciones.pdf
Tipos de datos en Microsoft Access definiciones.pdfTipos de datos en Microsoft Access definiciones.pdf
Tipos de datos en Microsoft Access definiciones.pdf
 
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
 
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdfTECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
 
Modelado de Casos de uso del negocio
Modelado de  Casos  de  uso  del negocioModelado de  Casos  de  uso  del negocio
Modelado de Casos de uso del negocio
 
CIBERSEGURIDAD Y SEGURIDAD INFORMÁTICA.pptx
CIBERSEGURIDAD  Y SEGURIDAD INFORMÁTICA.pptxCIBERSEGURIDAD  Y SEGURIDAD INFORMÁTICA.pptx
CIBERSEGURIDAD Y SEGURIDAD INFORMÁTICA.pptx
 
contabilidad para la inflacion, contabilidad superior
contabilidad para la inflacion, contabilidad superiorcontabilidad para la inflacion, contabilidad superior
contabilidad para la inflacion, contabilidad superior
 
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptxCiberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
 
Especificación casos de uso del negocio
Especificación  casos de uso del negocioEspecificación  casos de uso del negocio
Especificación casos de uso del negocio
 

Dev Tools para Kubernetes - Codemotion 2019

  • 1. Dev Tools para Kubernetes Micael Gallego Carrillo y Pablo Chico de Guzmán 24-25 September, 2019
  • 2. ● Fundada en Abril del 2014 ● Con Javier Provecho y Pablo Moncada ● 4.000 miembros ● ¡Ven a presentar con nosotros! ● https://meetup.com/Docker-Madrid @DockerMadrid Docker Madrid
  • 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. About Us Micael Gallego ● @micael_gallego ● CodeURJC - Universidad Rey Juan Carlos ● Java Developer
  • 5. Agenda ● ¿Qué es Docker? ¿Qué es Kubernetes? ● Desarrollo de Aplicaciones Nativas de Kubernetes ● Inner Loop Muy Lento: ● Python Demo ● Java Demo ● Otros Puntos de Fricción: https://t.co/z2BSi0UFp6 ● Conclusiones https://github.com/micaelgallego/k8s-dev-tools-code mo19
  • 6. ¿Qué es Docker? ● Build, Ship and Run. Any application, anywhere ● Proceso ligero, aislado y portable
  • 7. ¿Qué es Kubernetes? ● Orquestador open source ● Evolución de Borg, Google ● Contenedores en producción ● Declarativo, Respuesta a fallo ● Standard Run API ● Gran comunidad
  • 8. ¿Qué es una Aplicación Nativa de Kubernetes? ● Una aplicación que solo puede correr en Kubernetes ● Acceso a la Kubernetes API ● Otros casos (entornos integrados): ● Acoplada con Config Maps, Secretos, Volúmenes ● Microservices, Service Discovery de Kubernetes ● Networking, Service mesh
  • 11. Python Demo ● PullAways (imagePullStrategy) puede recargar una aplicación con: ● IfNotPresent and rebuild image (solo local) ● Mount volume and hot reload (solo local) kubectl rollout restart deployment deployment-name
  • 12. Java Demo: desarrollo clásico con Eclipse ● Java es un lenguaje que necesita compilación ● Los IDEs (como Eclipse) permiten compilación incremental: ● Durante la edición: Para ayudar al developer (autocompletar y errores) ● Al guardar el fichero: Genera los binarios (.class) en disco
  • 13. Java Demo: desarrollo clásico con Eclipse ● Para el desarrollador la experiencia es “similar” a los lenguajes de script ● No hay esperas por el proceso de compilación ● Es todo automático ● Frameworks web tienen Hot Reload: Guardar y actualizar
  • 14. Java Demo: desarrollo clásico con Eclipse
  • 15. Java Demo: build/push/redeploy ● Compilación y construcción del contenedor FROM maven 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
  • 16. Java Demo: build/push/redeploy ● 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
  • 17. Java Demo: build/push/redeploy ● Añadir un cambio en el servicio ● Compilación servicio Java ● Descarga librerías Maven ● Construye el uber 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
  • 19. Java Demo: Optimizando capas ● Construcción del contenedor y transferencia más rápida ● Separar librerías y aplicación en capas diferentes ● Se aprovecha la caché con las librerías al construir ● Se reduce la transferencia al código de la aplicación ● Extra bonus! La aplicación arrancará más rápido* * Exploded jar: https://spring.io/blog/2018/12/12/how-fast-is-spring
  • 20. Java Demo: Optimizando capas ● Jib ● Conteineriza y publica aplicaciones Java ● No es necesario el Docker daemon ● Imagen optimizada (distroless) ● Integrado con Maven y Gradle ● Desarrollado por Google https://github.com/GoogleContainerTools/jib
  • 21. Java Demo: Optimizando capas <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
  • 22. Java Demo: Optimizando capas ● Añadir un cambio en el servicio $ kubectl rollout restart deployment demoservice-dply $ ./mvnw compile jib:build -Dimage=micaelgallego/demoservice-k8s2:latest
  • 24. Java Demo: Recarga Automática con Okteto ● Podemos optimizar aún más el proceso? ● Podemos transferir únicamente los ficheros .class nuevos del laptop al pod k8s cuando hacemos un cambio? ● Si tenemos hot reload, eso permitiría un reinicio del servicio prácticamente instantáneo...
  • 25. Java Demo: Recarga Automática con Okteto ● Sincroniza ficheros del laptop a un pod desplegado en Kubernetes ● Redirige el log del pod a tu shell (ideal para desarrollo) ● Permite acceder en local a procesos del pod (con redirección de puertos)
  • 26. Java Demo: Recarga Automática con Okteto <project ...> ... <build> <plugins> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.6.1</version> <configuration> <from> <image>gcr.io/distroless/java:debug</image> </from> </configuration> </plugin> </plugins> </build> </project> pom.xml $ ./mvnw compile jib:build -Dimage=micaelgallego/demoservice-k8s3:latest
  • 27. Java Demo: Recarga Automática con Okteto name: demoservice-dply command: - java - -cp - /app/resources:/app/classes:/app/libs/* - es.codeurjc.k8sdevtools.demoservice.K8sdevtoolsApplication mountpath: /app/classes subpath: target/classes forward: - 8080:8080 okteto.yml $ okteto up $ kubectl apply -f k8s
  • 28. Java Demo: Recarga Automática con Okteto + 2
  • 29. Java Demo: Recarga Automática con Okteto
  • 30. VSCode Remote Development ● Entornos de desarrollo aislados, replicables e integrados ● Contenedores, WSL y SSH ● Independencia de la máquina local ● Extensiones: debugger, linter, test frameworks…
  • 33. Otros Puntos de Fricción Desarrollando en Kubernetes ● Inner-loop muy lento ● Complejidad de los Kubernetes manifest ● Complejidad de kubectl y acceso a logs y errores ● IDE plugins y debuggers ● Correr todos mis microservicios en local ● Instalar Kubernetes en local