diferencia entre cgroups y espacios de nombres

83

Recientemente comencé a aprender Docker y parece que la mayor parte del trabajo pesado lo realiza el kernel de Linux, utilizando espacios de nombres y cgroups.

Algunas cosas que encuentro confusas son:

  1. ¿Cuál es la diferencia entre un espacio de nombres y un cgroup? ¿Cuáles son los diferentes casos de uso que abordan?

  2. ¿Qué ha implementado Docker además de esto para ganar popularidad?

  3. Me gustaría conocer los aspectos internos de estas funciones y cómo se implementan.

Viajero insaciable
fuente

Respuestas:

104

Los enlaces adecuados para esas dos nociones se han corregido en PR 14307 :

Bajo el capó, Docker se basa en los siguientes componentes:

Los cgroups y las namespacescapacidades del kernel de Linux

Con:

  • cgroup : Los grupos de control proporcionan un mecanismo para agregar / dividir conjuntos de tareas, y todos sus futuros hijos, en grupos jerárquicos con comportamiento especializado.
  • espacio de nombres : envuelve un recurso del sistema global en una abstracción que les hace parecer a los procesos dentro del espacio de nombres que tienen su propia instancia aislada del recurso global.

En breve:

  • Cgroups = limita la cantidad que puede usar;
  • espacios de nombres = limita lo que puede ver (y por lo tanto usar)

Vea más en " Anatomía de un contenedor: espacios de nombres, cgroups y algo de magia del sistema de archivos " por Jérôme Petazzoni .

Los grupos C implican la medición y limitación de recursos:

  • memoria
  • UPC
  • bloquear E / S
  • red

Los espacios de nombres proporcionan a los procesos su propia vista del sistema

Múltiples espacios de nombres:

VonC
fuente
Gracias. ¿Se chrootbasa en algún espacio de nombres? ¿Puede chrootser reemplazado por algún espacio de nombres?
Tim
1
No, chroot no se basa en un espacio de nombres: ver itnext.io/… . Sin embargo, más de tres años después, tenga en cuenta que el nuevo Docker (19.03, todavía en versión beta) se puede ejecutar sin root: github.com/moby/moby/blob/… . Y puede exponer recursos en el espacio de nombres de host: github.com/moby/moby/pull/38913
VonC
¿Puede chrootser reemplazado por algún espacio de nombres?
Tim
1
@Tim No de forma nativa. ¿Quizás con pivot_root? ( unix.stackexchange.com/a/456777/7490 ) Consulte también github.com/vincentbernat/jchroot
VonC
1
twitter.com/b0rk/status/1225445956734390273 para la ilustración del contenedor
VonC
2

Cgroups (grupos de control) gestiona los recursos.
Determina la cantidad de recursos de la máquina host que se darán a los contenedores.

por ejemplo: - definimos recursos en el archivo yaml docker-compose para crear servicios como:

recursos:
  límites:
    cpus: "0.1" (100 milicores)
    memoria: 50M

Aquí, en este ejemplo, pedimos explícitamente a cgroups que asigne estos recursos a un contenedor en particular.


Espacios de nombres : proporciona aislamiento de procesos, aislamiento completo de contenedores, sistema de archivos separado.


Hay 6 tipos de espacios de nombres:
1. mount ns: para el sistema de archivos.
2. UTS (tiempo compartido único) ns: comprueba los diferentes nombres de host de los contenedores en ejecución
3. IPC ns: comunicación entre procesos
4. Network ns: se encarga de la asignación de IP diferente a diferentes contenedores
5. PID ns: aislamiento de id de proceso
6. usuario ns- nombre de usuario diferente (uid)

Mahima Mangal
fuente