Introducci贸n a contenedores

2/20
Recursos

Aportes 6

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

馃枼 M谩quinas compartidas 馃捇 VMs/bare metal 馃摝 Contenedores
鉂 Sin Aislamiento 鉁 Aislamiento 鉁 Aislamiento
鉂 Librer铆as en com煤n 鉁 Sin librer铆as en com煤n 鉁 Sin librer铆as en com煤n
鉂 Alto acoplamiento entre apps y OS 鉂 Caras e ineficientes 鉁 Menos overhead
- 鉂 Dif铆ciles de mantener 鉁 Menos dependencia del sistema operativo hu茅sped

1. M谩quinas Compartidas

Los administradores de sistemas tenian que conseguir ejecutar varios servidores f铆sicos.

Existen Dependencias aplicativas como:

  • Kernel (requerido)
  • Otras dependencias (opcionales)
    • Runtimes del Lenguaje (Java, Node.js, etc.)
    • Modulos del Kernel
    • Herramientas del sistema
    • Librer铆as de sistema
    • Configuraci贸n

![[Dependencias aplicativas.png]]

La manera antigua: Instalar aplicaciones en el host

  • M煤ltiples aplicaciones por m谩quina
  • Dependencias compartidas
    Beneficios:
  • Ejecutables de tama帽o peque帽o
  • Menos uso de almacenamiento y memoria
  • Mayor utilizaci贸n de recursos
    Problemas
  • Las dependencias se mezclaban unas con otras y con la m谩quina hu茅sped
  • Una aplicaci贸n puede acaparar recursos, impactando a otras
  • Dif铆cil de replicar y com煤nmente exist铆an diferencias
    entre ambientes (隆corre bien en desarrollo!)

La soluci贸n (temporal)

  • Dedicar m谩quinas hu茅sped para las aplicaciones cr铆ticas
  • Empaquetar todas las dependencias con la aplicaci贸n
    Problemas
  • Dedicar m谩quinas hu茅sped desperdiciaba recursos
  • M谩quinas f铆sicas toman tiempo en aprovisionar y configurar

2. VMs/bare metal

Se segmentaba una m谩quina en varias m谩quinas virtuales (Virtualizaci贸n)

  • Permitir que el hardware f铆sico sea compartido entre aplicaciones
    como m谩quinas virtuales (VMs)
  • Soluciones como Chef/Puppet/Ansible eran com煤nmente utilizadas
    para administrar m谩quinas hu茅sped y aplicativos
  • VMs inmutables daban despliegues y rollbacks predecibles
    Problemas
  • Recursos desperdiciados (mucho overhead)
  • Las VMs tardan mucho en iniciar

3. Contenedores

Mientras tanto en Google 帽os desarrolladores a帽adieron capacidades al kernel de Linux para soportar el aislamiento de procesos, poniendo las bases para la contenerizaci贸n:

  • Grupos de control (cgroups) --l铆mites de recursos.
  • Namespaces 鈥攁islamiento de procesos.
  • Change Root (chroot) 鈥 aislamiento del sistema de archivos (ya exist铆a).

Esto permiti贸 a las apps/procesos:

  • Correr con cpu y memoria asignada (espec铆fica)
  • Aislar de otros procesos
  • Proveer acceso limitado al sistema de archivos

La nueva manera es desplegar contenedores

  • Virtualizaci贸n a nivel OS (namespaces, cgroups, 鈥)

  • Aislado, entre otros procesos y el host

    • L谩s im谩genes de contenedor tienen su propio sistema de archivos, sus propios recursos y se ejecutan como su propio proceso
  • R谩pido

  • Portable entre sistemas operativos y entre nubes

    • Siempre y cuando el kernel objetivo fuera el mismo que el de la m谩quina hu茅sped
  • Ambientes consistentes entre desarrollo y producci贸n

    • Creando im谩genes inmutables durante el proceso de construcci贸n, en lugar de durante el proceso de despliegue

Lo que me encanta de todos los cursos de GCP es que te cuentan como ha evolucionado la forma de hacer las cosas, pero aun hoy existen empresas que usan tecnolog铆a muuuuy vieja :C

Mi reflexi贸n

El software no est谩 listo cuando el c贸digo est谩 funcionando en mi computadora.
.
Tampoco cuando se pasan las pruebas y alguien aprueba la revisi贸n del c贸digo.
.
Ni cuando se termina un ciclo y se lo entrega al usuario.
.
Piensa que 鈥淪i funciona, no lo toques鈥 pero:
.

驴Si algo funciona, no significa que necesariamente esta bien hecho?

.
Entregar un software, consiste en todo el trabajo que debe realizar para que el c贸digo est茅 disponible para un cliente, contemplando la ejecuci贸n del c贸digo en los servidores de producci贸n.
.
La automatizaci贸n es el acto de mejorar el XD (Experience Development) haciendo que el c贸digo sea resistente a interrupciones y resiliente a operaciones y fiable a entregas cint铆nuas,

El est谩ndar actual para el despliegue de aplicaciones son los CONTENEDORES debido a la cantidad de beneficios que nos brindan con respecto a las dos anteriores. Sobretodo la PORTABILIDAD y la CONSISTENCIA que brinda a nuestras apps

Por si alguien m谩s tiene la duda de que se refiere con overhead

Siempre es bueno saber algo de historia!
Gracias!