Los contenedores son una parte importante de la informática moderna y, a medida que evoluciona la infraestructura en torno a los contenedores, han comenzado a surgir nuevas y mejores herramientas. Solía ser que podía ejecutar contenedores solo con LXC, y luego Docker ganó popularidad y las cosas comenzaron a volverse más complejas. Finalmente, obtuvimos el sistema de administración de contenedores que todos merecíamos con Podman, un motor de contenedores sin demonios que hace que los contenedores y los pods sean fáciles de construir, ejecutar y administrar.
Los contenedores interactúan directamente con las capacidades del kernel de Linux, como cgroups y espacios de nombres, y generan muchos procesos nuevos dentro de esos espacios de nombres. En resumen, ejecutar un contenedor es literalmente ejecutar un sistema Linux dentro un sistema Linux. Desde el punto de vista del sistema operativo, se parece mucho a una actividad administrativa y privilegiada. Los usuarios normales no suelen tener rienda suelta sobre los recursos del sistema como exigen los contenedores, por lo que, de forma predeterminada, root o sudo
Se requieren permisos para ejecutar Podman. Sin embargo, esa es solo la configuración predeterminada, y de ninguna manera es la única configuración disponible o prevista. Este artículo demuestra cómo configurar su sistema Linux para que un usuario normal pueda ejecutar Podman sin el uso de sudo
("sin raíz").
ID de usuario del espacio de nombres
Contenedores Linux
- ¿Qué son los contenedores de Linux?
- Una introducción a la terminología de contenedores
- Descargar:Introducción a los contenedores
- Operadores de Kubernetes:automatización de la plataforma de orquestación de contenedores
- eBook:Patrones de Kubernetes para diseñar aplicaciones nativas de la nube
- ¿Qué es Kubernetes?
Un espacio de nombres del kernel es esencialmente una construcción imaginaria que ayuda a Linux a realizar un seguimiento de qué procesos pertenecen juntos. Son las cuerdas rojas de la cola de Linux. En realidad, no hay una diferencia entre los procesos en una cola y otra, pero es útil aislarlos entre sí. Mantenerlos separados es la clave para declarar un grupo de procesos como un "contenedor" y el otro grupo de procesos como su sistema operativo.
Linux rastrea qué usuario o grupo posee cada proceso por ID de usuario (UID) e ID de grupo (GID). Normalmente, un usuario tiene acceso a aproximadamente mil UID subordinados para asignar a procesos secundarios en un espacio de nombres. Debido a que Podman ejecuta un sistema operativo subordinado completo asignado al usuario que inició el contenedor, necesita mucho más que la asignación predeterminada de subids y subgids.
Puede otorgar a un usuario más subuids y subgids con el usermod
dominio. Por ejemplo, para otorgar más subids y subgids al usuario tux
, elija un UID adecuadamente alto que no tenga ningún usuario asignado (como 200 000) e increméntelo en varios miles:
$ sudo usermod \
--add-subuids 200000-265536 \
--add-subgids 200000-265536 \
tux
Acceso al espacio de nombres
También hay límites en los espacios de nombres. Por lo general, esto se establece muy alto, pero puede verificar la asignación de espacios de nombres del usuario con systctl
, la herramienta de parámetros del kernel:
$ sysctl --all --pattern user_namespaces
user.max_user_namespaces = 28633
Esos son muchos espacios de nombres, y probablemente sea lo que su distribución ha establecido de manera predeterminada. Si su distribución no tiene esa propiedad o la tiene muy baja, puede crearla ingresando este texto en el archivo /etc/sysctl.d/userns.conf
:
user.max_user_namespaces=28633
Cargue esa configuración:
$ sudo sysctl -p /etc/sysctl.d/userns.conf
Ejecutar un contenedor sin root
Una vez que haya establecido su configuración, reinicie su computadora para asegurarse de que los cambios en su usuario y los parámetros del kernel estén cargados y activos.
Después de reiniciar, intente ejecutar una imagen de contenedor:
$ podman run -it busybox echo "hello"
hello
Contenedores como comandos
Los contenedores pueden parecer misteriosos si es nuevo en ellos, pero en realidad, no son diferentes a su sistema Linux existente. Son literalmente procesos que se ejecutan en su sistema, sin el costo o la barrera de un entorno emulado o una máquina virtual. Todo lo que separa un contenedor de su sistema operativo son los espacios de nombres del núcleo, por lo que en realidad son solo procesos nativos con diferentes etiquetas en ellos. Podman hace que esto sea más evidente que nunca, y una vez que configura Podman para que sea un comando sin raíz, los contenedores se sienten más como comandos que como entornos virtuales. Podman hace que los contenedores y las vainas sean fáciles, así que pruébalo.