Agenda #netcoreconf
Docker y K8S
lecciones aprendidas
• De un developer
Sponsors
#netcoreconf
#netcoreconf
Como developer
• Esto no es así el 95% del tiempo
• Ser super especialista tiende a hacer todo más lento
• Las interdependencia generan demoras
• La falta de conocimiento, al menos mínimo, el otras áreas atenta
contra la resolución de problemas
• Ser extremistas en cuanto a “como se deben hacer las cosas” no nos
lleva a ninguna parte
Agenda #netcoreconf
Docker y K8S
lecciones aprendidas
• De un developer
Agenda #netcoreconf
¿Quién soy?
• Leonardo Micheloni
• Developer +18 años
• Trabajo en Tokiota Madrid
• Microsoft MVP 8 años
• Auth0 Ambassador
• CSM 10 años
• https://twitter.com/leomicheloni
¿Tenemos que preocuparnos de
todas estas cosas?
#netcoreconf
Contexto
• Developer
• Full stack? Viejos tiempos
• Consultora
• Todo tipo de proyectos
• Entregar valor
• Agilidad
• Resolver
• “Shipear”
#netcoreconf
De qué vamos a hablar entonces?
• La vida real
• Mi, vida real
• Aprendizajes
• Experiencia
• Dar soluciones
• Ser ágiles
• Que mis tareas funcionen en el entorno que deben
• Cuaderno de recetas
Ownership
#netcoreconf
¿De qué NO vamos a hablar?
• Arquitectura “correctas”
• Buenas prácticas
• “En un mundo ideal”
• “Esto es un anti-patrón”
• “No es la forma de hacer las cosas”
• “Esa es responsabilidad de…”
• No vamos a juzgar nada
• Show me the code running in the correct environment
#netcoreconf
Escenarios
• Existe algo hecho
• El cliente tiene know how de todo
• El cliente solo sabe que quiere usar eso
• Existe microservicios
• Escucharon la palabra “Docker” por ahí (o Kubernetes)
#netcoreconf
¿Qué nos vamos a llevar?
• Un conjunto de recetas
• Tips
• Reflexiones
Comenzamos
Programación
Escribimos
código
Unit tests
Integration
tests
Pruebas
locales
Integración
Resilencia
Etc.
Ejecución local
#netcoreconf
Docker
• Dockerfile
• Crear imagen
• Ejecutar container
• Puede tener comandos que debemos saber
• Puede depender de ficheros que deben copiarse durante el build
• Puede tener muchas variables de entorno
• Depende de runtimes que debemos especificar
#netcoreconf
Docker
• Usar siempre el mismo Dockerfile de producción
• Usar multistage
#netcoreconf
Docker
#netcoreconf
Docker-compose
• Variables de entorno
• Comandos
#netcoreconf
• Docker compose con imagen local
• Con variables
• Comandos
• Podemos “escriptear” publish + Docker build + Docker-compose up
#netcoreconf
Entonces
• Tenemos que saber Docker
• Comandos de build, push, pull
• Dockerfile
• Tenemos que saber Docker-compose
• Creación
• Comandos
• Opciones
Dependencias
#netcoreconf
Dependencias propias
• Nuestro servicio utiliza otros servicios propios
• Levantar esos otros servicios
• Probar resilencia
• Docker-compose
• Abrir puertos
• Tirar de las imágenes de desarrollo (autorización)
• Incluir ambos en la misma red de Docker
#netcoreconf
Abrir puertos
#netcoreconf
Compartir la misma red
#netcoreconf
Servicios de terceros
• Qué pasa si dependemos de servicios de terceros?
• Base de datos
• Message brokers
• Docker-compose
• Usando las mismas versiones
• Estamos limitados si se usan clusters o cosas similares
#netcoreconf
#netcoreconf
Kubernetes
• Nuestra aplicación se va a ejecutar en K8S
• Lo ideal es utilizar un deployment local para probar
• Combinar Docker-compose con K8S Docker Desktop para
• Servicios de los que depende
• Servicios de terceros
• En estos casos es indispensable abrir los puertos en el Docker-compose
#netcoreconf
Kubernetes
• Configuración
• Utilizar Config maps
• Montar configuraciones como volúmenes
• En general en entornos productivos los yaml cambian por temas de recursos,
user accounts, etc.
#netcoreconf
Desarrollo resumen
• Servicios de terceros
• Docker-compose
• Servicios que no estamos desarrollando ahora
• Docker-compose
• K8S docker desktop
• Probar escalamiento horizontal
• Tips
• Build local desde compose
• Push al registry de desarrollo
• Probar algo en dev con un tag temporal
Troubleshooting
#netcoreconf
El Pod se reinicia / no inicia
• Exec -it
• Get logs
• Describe pod
• Exec $print
• Cp de configuración carpeta, etc.
#netcoreconf
Describe Pod
#netcoreconf
logs
#netcoreconf
El Pod no inicia
• get pods
• describe pod [pod_id]
• El pod se reinicia
• Entrar en el pod
• Exec –it
• Si no levanta no podemos
• Sobre escribir el comando en el deployment
#netcoreconf
Ingresar en un Pod
#netcoreconf
Leer un fichero dentro del Pod
#netcoreconf
Ejecutar un comando dentro del Pod
#netcoreconf
Leer environment variables
#netcoreconf
Copiar ficheros desde y hasta un Pod
#netcoreconf
Sobre-escribir el comando de inicio del Dockerfile
#netcoreconf
Montar parte común del appsettings como volume
#netcoreconf
Reflexión final
• En el mundo de la consultoría
• >Agilidad
• <Especialización
• -Silos de conocimiento
• +Velocidad de resolución de problemas
• +Capacidad de proponer diferentes soluciones
• >Ownership
#netcoreconf
¿Preguntas?
#netcoreconf
SPONSORS
#netcoreconf
Referencias
• https://docs.docker.com/build/building/multi-stage/
• https://github.com/dotnet-architecture/eShopOnContainers
• https://docs.docker.com/compose/networking/
• https://kubernetes.io/docs/concepts/storage/volumes/

Docker_K8S_lecciones_netcoreconf_2022.pdf