SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
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/

Más contenido relacionado

Similar a Docker_K8S_lecciones_netcoreconf_2022.pdf

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

Similar a Docker_K8S_lecciones_netcoreconf_2022.pdf (20)

Java Dev Day 2019 No kuberneteen por convivir
Java Dev Day 2019  No kuberneteen por convivirJava Dev Day 2019  No kuberneteen por convivir
Java Dev Day 2019 No kuberneteen por convivir
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMP
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker
 
Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf
 
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
 
Dynamics saturday madrid 2018 bc-on-docker - jakub
Dynamics saturday madrid 2018   bc-on-docker - jakubDynamics saturday madrid 2018   bc-on-docker - jakub
Dynamics saturday madrid 2018 bc-on-docker - jakub
 
Earthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroidesEarthly, Dockerfile con esteroides
Earthly, Dockerfile con esteroides
 
Argentesting 2017 - Taller de Jenkins
Argentesting 2017 - Taller de JenkinsArgentesting 2017 - Taller de Jenkins
Argentesting 2017 - Taller de Jenkins
 
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
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
 
Docker: de principante a pro
Docker: de principante a proDocker: de principante a pro
Docker: de principante a pro
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
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
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
VLCSofting 2021 - HARD AS A POD 落. HARDENING DE DESPLIEGUES EN KUBERNETES CON...
 
Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
 
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...
 
Docker for losers
Docker for losersDocker for losers
Docker for losers
 

Más de Leonardo Micheloni

Más de Leonardo Micheloni (16)

Docker dotnet netbaires
Docker dotnet netbairesDocker dotnet netbaires
Docker dotnet netbaires
 
Mas alla de javascript con typescript
Mas alla de javascript con typescriptMas alla de javascript con typescript
Mas alla de javascript con typescript
 
Workshop clean code javascript
Workshop clean code javascriptWorkshop clean code javascript
Workshop clean code javascript
 
2019 commit solid typescript
2019 commit solid typescript2019 commit solid typescript
2019 commit solid typescript
 
Solid con typescript
Solid con typescriptSolid con typescript
Solid con typescript
 
Tdd desde las trincheras
Tdd desde las trincherasTdd desde las trincheras
Tdd desde las trincheras
 
Docker Dotnet Málaga
Docker Dotnet MálagaDocker Dotnet Málaga
Docker Dotnet Málaga
 
Pipeline continuo con VSTS Azure DevOps
Pipeline continuo con VSTS Azure DevOpsPipeline continuo con VSTS Azure DevOps
Pipeline continuo con VSTS Azure DevOps
 
Clean code javascript + live coding
Clean code javascript + live codingClean code javascript + live coding
Clean code javascript + live coding
 
Un viaje por Cosmos DB
Un viaje por Cosmos DBUn viaje por Cosmos DB
Un viaje por Cosmos DB
 
Cosmos db gab2018
Cosmos db gab2018Cosmos db gab2018
Cosmos db gab2018
 
Cosmos DB in a nutshell
Cosmos DB in a nutshellCosmos DB in a nutshell
Cosmos DB in a nutshell
 
Esp8266 iothub Azure data analysis in real time
Esp8266 iothub Azure data analysis in real timeEsp8266 iothub Azure data analysis in real time
Esp8266 iothub Azure data analysis in real time
 
Clean code javascript
Clean code javascriptClean code javascript
Clean code javascript
 
Tdd y pair programming
Tdd y pair programmingTdd y pair programming
Tdd y pair programming
 
Blockchain, smart contracts y azure
Blockchain, smart contracts y azureBlockchain, smart contracts y azure
Blockchain, smart contracts y azure
 

Docker_K8S_lecciones_netcoreconf_2022.pdf