SlideShare una empresa de Scribd logo
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 (20)

PDF
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Micael Gallego
 
PDF
WebRTC en tu web con OpenVidu
Micael Gallego
 
PDF
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Micael Gallego
 
PPTX
Hack2Progress - Consejos para afrontar un Hackathon
Carlos Azaustre
 
PDF
Codemotion 2015 crash y youdebug
jmiguel rodriguez
 
PDF
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
Iván López Martín
 
PDF
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
César Hernández
 
PDF
Kubernetes: Caso de uso real con mememtum y Taniwa
Joselu Marina
 
KEY
Java poliglota
Domingo Suarez Torres
 
PDF
Java mission control para monitoreo, administración y profilig de aplicacione...
César Hernández
 
PPTX
Proyect Evenge. Event manager
Ivan Ortega
 
PDF
20170405 - Ecosistema Javascript
Daniel Pecos Martínez
 
ODP
Taller Grails
Dani Latorre
 
PDF
Desarrollo con Java y metodologías agiles
Jobsket
 
PPT
Creación de Plataformas
Jose Juan R. Zuñiga
 
PDF
Jobsket Spring 2GX Madrid
Jobsket
 
PDF
Jenkins, no me rompas los builds!
Gonzalo Sainz Trápaga
 
PDF
Implementando una Arquitectura de Microservicios
Federico Damián Lozada Mosto
 
PDF
DevOps: una breve introducción
Christian Rodriguez
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Micael Gallego
 
WebRTC en tu web con OpenVidu
Micael Gallego
 
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Micael Gallego
 
Hack2Progress - Consejos para afrontar un Hackathon
Carlos Azaustre
 
Codemotion 2015 crash y youdebug
jmiguel rodriguez
 
T3chFest 2016 - De Java a Groovy: ¡Hora de Aventuras!
Iván López Martín
 
Mejorando la productividad en proyectos java EE con CI y CD - OTN 2015
César Hernández
 
Kubernetes: Caso de uso real con mememtum y Taniwa
Joselu Marina
 
Java poliglota
Domingo Suarez Torres
 
Java mission control para monitoreo, administración y profilig de aplicacione...
César Hernández
 
Proyect Evenge. Event manager
Ivan Ortega
 
20170405 - Ecosistema Javascript
Daniel Pecos Martínez
 
Taller Grails
Dani Latorre
 
Desarrollo con Java y metodologías agiles
Jobsket
 
Creación de Plataformas
Jose Juan R. Zuñiga
 
Jobsket Spring 2GX Madrid
Jobsket
 
Jenkins, no me rompas los builds!
Gonzalo Sainz Trápaga
 
Implementando una Arquitectura de Microservicios
Federico Damián Lozada Mosto
 
DevOps: una breve introducción
Christian Rodriguez
 

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

PDF
Despliegue de aplicaciones Java con Docker y Kubernetes
Jaime Perera Merino
 
PDF
El camino de Java a Kubernetes
Mauricio (Salaboy) Salatino
 
PPTX
Game of pods - Kubernetes
jdezine
 
PDF
Kubernetes para developers
Jaime Perera Merino
 
PDF
La nube, tu app y tu
BelnGonzlezGarca1
 
PDF
Google Kubernetes Engine (GKE)
Edith Puclla
 
PPTX
Kubernetes 101
Paco Ocampo
 
PDF
Empaquetando aplicaciones Java con Docker y Kubernetes
Víctor Leonel Orozco López
 
PPTX
Devops episodio 1. devOpsTnf
Erasmo Domínguez Jiménez
 
PPTX
Kubernetes workshop
Raúl Requero García
 
PDF
Cloud Native Mexico - Introducción a Kubernetes
Domingo Suarez Torres
 
PPTX
Google Cloud Storage ambiente en desarrollo en la nube
efrenquinterogelvis1
 
PDF
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Restorando
 
PDF
meetup digital ocean kubernetes
Domingo Suarez Torres
 
PDF
FROM lost to the docker
Irene Alonso Candelario
 
PDF
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
Francisco Javier Barrena
 
PDF
Gradle: BUILD SUCCESSFUL – CLOJUG 23 MAYO 2015
Alexander Mera
 
PDF
Kubernetes Operator 101 - Edith Puclla
Edith Puclla
 
PPTX
Esos contenedores, ¡a producción! (Commit Conf 2018)
Eduard Tomàs
 
Despliegue de aplicaciones Java con Docker y Kubernetes
Jaime Perera Merino
 
El camino de Java a Kubernetes
Mauricio (Salaboy) Salatino
 
Game of pods - Kubernetes
jdezine
 
Kubernetes para developers
Jaime Perera Merino
 
La nube, tu app y tu
BelnGonzlezGarca1
 
Google Kubernetes Engine (GKE)
Edith Puclla
 
Kubernetes 101
Paco Ocampo
 
Empaquetando aplicaciones Java con Docker y Kubernetes
Víctor Leonel Orozco López
 
Devops episodio 1. devOpsTnf
Erasmo Domínguez Jiménez
 
Kubernetes workshop
Raúl Requero García
 
Cloud Native Mexico - Introducción a Kubernetes
Domingo Suarez Torres
 
Google Cloud Storage ambiente en desarrollo en la nube
efrenquinterogelvis1
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Restorando
 
meetup digital ocean kubernetes
Domingo Suarez Torres
 
FROM lost to the docker
Irene Alonso Candelario
 
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
Francisco Javier Barrena
 
Gradle: BUILD SUCCESSFUL – CLOJUG 23 MAYO 2015
Alexander Mera
 
Kubernetes Operator 101 - Edith Puclla
Edith Puclla
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Eduard Tomàs
 
Publicidad

Más de Micael Gallego (19)

PDF
Modernizando el desarrollo de decenas de mini-apps web con Kubernetes - TechF...
Micael Gallego
 
PDF
Software libre para videoconferencias
Micael Gallego
 
PDF
La evaluación con realimentación y posibilidad de recuperación para evitar el...
Micael Gallego
 
PDF
Testing cloud and kubernetes applications - ElasTest
Micael Gallego
 
PDF
Introducción a las Pruebas Software
Micael Gallego
 
PDF
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Micael Gallego
 
PDF
Using Docker to build and test in your laptop and Jenkins
Micael Gallego
 
PDF
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Micael Gallego
 
PDF
Como ser mas productivo en el desarrollo de aplicaciones
Micael Gallego
 
PDF
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
Micael Gallego
 
PDF
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
Micael Gallego
 
PDF
El mundo real en el aula, con la ayuda del profesor
Micael Gallego
 
PDF
Angular 2 Campus Madrid Septiembre 2016
Micael Gallego
 
PDF
GRASP con PR para el SRFLP en el MAEB 2016
Micael Gallego
 
PDF
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
Micael Gallego
 
PDF
TypeScript - Angular 2 - ionic 2
Micael Gallego
 
PDF
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Micael Gallego
 
PDF
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
Micael Gallego
 
PDF
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
Micael Gallego
 
Modernizando el desarrollo de decenas de mini-apps web con Kubernetes - TechF...
Micael Gallego
 
Software libre para videoconferencias
Micael Gallego
 
La evaluación con realimentación y posibilidad de recuperación para evitar el...
Micael Gallego
 
Testing cloud and kubernetes applications - ElasTest
Micael Gallego
 
Introducción a las Pruebas Software
Micael Gallego
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Micael Gallego
 
Using Docker to build and test in your laptop and Jenkins
Micael Gallego
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Micael Gallego
 
Como ser mas productivo en el desarrollo de aplicaciones
Micael Gallego
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
Micael Gallego
 
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
Micael Gallego
 
Angular 2 Campus Madrid Septiembre 2016
Micael Gallego
 
GRASP con PR para el SRFLP en el MAEB 2016
Micael Gallego
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
Micael Gallego
 
TypeScript - Angular 2 - ionic 2
Micael Gallego
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Micael Gallego
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
Micael Gallego
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
Micael Gallego
 
Publicidad

Último (12)

PPT
Cap. 1DESistemasOperativosMonopuesto.ppt
davidperez4125081
 
PPTX
Taller de ROBOTICA- clase sobre arduino - 1.pptx
sotosanmartinfrancis
 
PPT
Cap. 2.DeSistemasOperativosMonopuestoppt
davidperez4125081
 
PPTX
Algoritmos de localizacion de Robots móviles
yrosascunam
 
PDF
Trabajo Grupal de Tecnología I.E Liceo Departamental
marianasinisterra200
 
PPTX
La Inteligencia Artificial en la Vida Cotidiana
Romeo Santos
 
PPTX
Evaluación de la arquitectura de software.pptx
DanielMartinez382863
 
PPTX
IMPLEMENTACION-DE-UN-PLAN-DE-CAPACITACION-DE-HERRAMIENTAS-OFIMATICAS-Y-MANTEN...
jhoannys1
 
PDF
UML (Lenguaje unificado Modelado) como estandar para proyectos
somespark13
 
PPTX
QUINTO BÁSICO 5 DE MAYO- clases de algoritmos.pptx
sotosanmartinfrancis
 
PDF
Trejos Intereses de investigación en Informática v1.pdf
Ignacio Trejos Zelaya
 
PDF
Descargar Micromundos Pro y proceso de instalación
AngelitoDeLaNoche
 
Cap. 1DESistemasOperativosMonopuesto.ppt
davidperez4125081
 
Taller de ROBOTICA- clase sobre arduino - 1.pptx
sotosanmartinfrancis
 
Cap. 2.DeSistemasOperativosMonopuestoppt
davidperez4125081
 
Algoritmos de localizacion de Robots móviles
yrosascunam
 
Trabajo Grupal de Tecnología I.E Liceo Departamental
marianasinisterra200
 
La Inteligencia Artificial en la Vida Cotidiana
Romeo Santos
 
Evaluación de la arquitectura de software.pptx
DanielMartinez382863
 
IMPLEMENTACION-DE-UN-PLAN-DE-CAPACITACION-DE-HERRAMIENTAS-OFIMATICAS-Y-MANTEN...
jhoannys1
 
UML (Lenguaje unificado Modelado) como estandar para proyectos
somespark13
 
QUINTO BÁSICO 5 DE MAYO- clases de algoritmos.pptx
sotosanmartinfrancis
 
Trejos Intereses de investigación en Informática v1.pdf
Ignacio Trejos Zelaya
 
Descargar Micromundos Pro y proceso de instalación
AngelitoDeLaNoche
 

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