
Un "runc" de próxima generación y código abierto que permite que los contenedores sin root ejecuten cargas de trabajo como Systemd, Docker, Kubernetes, igual que las máquinas virtuales.
Sysbox es un runtime de contenedores de código abierto y gratuito (un "runc" especializado), desarrollado originalmente por Nestybox (adquirida por Docker en 05/2022), que mejora los contenedores de dos maneras clave:
Mejora el aislamiento de los contenedores:
User-namespace de Linux en todos los contenedores (es decir, el usuario root en el contenedor tiene cero privilegios en el host).
Virtualiza partes de procfs y sysfs dentro del contenedor.
Oculta información del host dentro del contenedor.
Bloquea los montajes iniciales del contenedor, y más.
Permite que los contenedores ejecuten las mismas cargas de trabajo que las VMs:
Con Sysbox, los contenedores pueden ejecutar software a nivel de sistema como systemd, Docker, Kubernetes, K3s, buildx (incluyendo builds multi-arquitectura), aplicaciones heredadas, aplicaciones multi-arquitectura, y más, de forma fluida y segura.
Este software puede ejecutarse dentro de los contenedores Sysbox sin modificaciones y sin usar versiones especiales del software (por ejemplo, variantes rootless).
Sin contenedores privilegiados, sin imágenes complejas, sin entrypoints complicados, sin montajes de volúmenes especiales, etc.
Piense en ello como un "supercargador de contenedores": permite que sus gestores / orquestadores de contenedores existentes (por ejemplo, Docker, Kubernetes, etc.) desplieguen contenedores con aislamiento reforzado y que puedan ejecutar casi cualquier carga de trabajo que se ejecuta en VMs.
Sysbox logra esto haciendo que el contenedor se asemeje lo más posible a un entorno tipo VM, utilizando técnicas avanzadas de virtualización del sistema operativo.
A diferencia de runtimes alternativos como Kata y KubeVirt, no utiliza VMs. Esto lo hace más fácil de usar (particularmente en entornos cloud al evitar la virtualización anidada), aunque no proporciona el nivel de aislamiento que ofrecen los runtimes basados en VMs. Ver aquí para una comparación.
No es necesario aprender nuevas herramientas ni modificar sus imágenes de contenedor o flujos de trabajo existentes para aprovechar Sysbox. Simplemente instálelo y apunte su gestor de contenedores / orquestador hacia él para desplegar contenedores mejorados.
Sysbox puede convivir con otros runtimes de contenedores en el mismo host (por ejemplo, el runc OCI predeterminado, Kata, etc.). Puede elegir fácilmente qué contenedores o pods ejecutar con cada uno, según sus necesidades.
Sysbox es gratuito y de código abierto, licenciado bajo la Apache License, Versión 2.0. Consulte el archivo LICENSE para más detalles.
Sysbox fue desarrollado originalmente por Nestybox. Como Nestybox ahora es parte de Docker, Docker es el principal patrocinador del proyecto Sysbox.
Dicho esto, Sysbox es un proyecto comunitario de código abierto y no está oficialmente soportado por Docker (es decir, las suscripciones de Docker no incluyen soporte para Sysbox). El soporte se brinda según disponibilidad a través de este repositorio de Github o del Espacio de trabajo de Sysbox en Slack.
Animamos la participación de la comunidad para ayudar a evolucionar y mejorar Sysbox, con el objetivo de aumentar los casos de uso y los beneficios que permite. Se reciben mantenedores y contribuidores externos.
Sysbox resuelve problemas tales como:
Mejorar el aislamiento de los microservicios contenerizados (root en el contenedor se asigna a un usuario no privilegiado en el host).
Habilitar un usuario root altamente capaz dentro del contenedor sin comprometer la seguridad del host.
Asegurar los pipelines de CI/CD al habilitar Docker-in-Docker (DinD) o Kubernetes-in-Docker (KinD) sin contenedores privilegiados inseguros ni montajes del socket Docker del host.
Permitir el uso de contenedores como entornos "tipo VM" para desarrollo, pruebas locales, aprendizaje, etc., con un aislamiento sólido y la capacidad de ejecutar systemd, Docker, IDEs y más dentro del contenedor.
Ejecutar aplicaciones heredadas dentro de contenedores (en lugar de VMs menos eficientes).
Reemplazar las VMs con una alternativa basada en contenedores más fácil, rápida, eficiente y portable, que pueda desplegarse fácilmente en entornos cloud.
Dividir hosts de metal desnudo en múltiples entornos de cómputo aislados con el doble de densidad que las VMs (es decir, desplegar el doble de contenedores tipo VM que VMs en el mismo hardware con el mismo rendimiento).
Dividir instancias cloud (por ejemplo, EC2, GCP, etc.) en múltiples entornos de cómputo aislados sin recurrir a costosas virtualizaciones anidadas.
Sysbox se instala fácilmente en hosts Linux (metal desnudo, VM, on-prem, cloud, etc.). Funciona en todos los principales servicios IaaS y Kubernetes basados en cloud (por ejemplo, EC2, GCP, GKE, EKS, AKS, Rancher, etc.).
Una vez instalado, Sysbox trabaja bajo el capó: usted usa Docker, Kubernetes, etc. para desplegar contenedores con él.
Por ejemplo, este sencillo comando de Docker crea un contenedor con Sysbox:
$ docker run --runtime=sysbox-runc -it any_image
Obtiene un contenedor bien aislado, capaz de ejecutar sin problemas microservicios así como software a nivel de sistema que normalmente se ejecuta en VMs (por ejemplo, systemd, Docker, Kubernetes, etc.).
Más sobre cómo usar Sysbox aquí.
Como se muestra, Sysbox permite que los contenedores no privilegiados ejecuten cargas de trabajo a nivel de sistema como systemd, Docker, Kubernetes, etc., de forma fluida, dando un enfoque equilibrado entre aislamiento de contenedores, rendimiento, eficiencia y portabilidad.
Y lo hace con cambios mínimos de configuración en su infraestructura existente: solo instale Sysbox y configure su gestor/orquestador de contenedores para lanzar contenedores con él, usando la imagen que prefiera.
Tenga en cuenta que, si bien Sysbox refuerza el aislamiento de los contenedores estándar y elimina la necesidad de contenedores privilegiados inseguros en muchos escenarios, no proporciona (aún) el mismo nivel de aislamiento que las alternativas basadas en VMs o los SO de espacio de usuario como gVisor. Por lo tanto, para escenarios donde se requiere el más alto nivel de aislamiento, alternativas como KubeVirt pueden ser preferibles (a costa de un menor rendimiento y eficiencia y una mayor complejidad y costo).
Ver esta publicación de blog para más información.
El proyecto Sysbox está dirigido a cualquier persona interesada en experimentar, inventar, aprender y construir sistemas usando contenedores de sistema. Es virtualización de SO de vanguardia, y las contribuciones son bienvenidas.
Antes de la adquisición por Docker en 05/2022, Nestybox ofrecía Sysbox Enterprise como una versión mejorada de Sysbox (por ejemplo, más seguridad, más cargas de trabajo y soporte oficial).
Sin embargo, después de la adquisición, Sysbox Enterprise ya no se ofrece como producto independiente, sino que se ha incorporado a Docker Desktop (ver Docker Hardened Desktop).
NOTA: Como Sysbox Enterprise ya no se ofrece como producto independiente, Docker planea poner algunas características de Sysbox Enterprise a disposición en Sysbox Community Edition. Las características están por determinar y sus comentarios al respecto son bienvenidos.
La siguiente tabla resume las características clave del runtime de contenedores Sysbox.
También proporciona una comparación entre la Sysbox Community Edition (es decir, este repositorio) y la anteriormente disponible Sysbox Enterprise Edition (ahora obsoleta).
Más sobre las características de Sysbox aquí.
Si tiene preguntas, puede contactarnos aquí.
Llamamos a los contenedores desplegados por Sysbox contenedores de sistema, para resaltar el hecho de que pueden ejecutar no solo microservicios (como hacen los contenedores regulares), sino también software de sistema como Docker, Kubernetes, Systemd, contenedores internos, etc.
Más sobre contenedores de sistema aquí.
El host de Sysbox debe cumplir los siguientes requisitos:
Debe ejecutar una de las distribuciones de Linux soportadas y ser una máquina con una arquitectura soportada (por ejemplo, amd64, arm64).
Recomendamos un mínimo de 4 CPUs (por ejemplo, 2 núcleos con 2 hyperthreads) y 4GB de RAM. Aunque no es un requisito estricto, configuraciones más pequeñas pueden ralentizar Sysbox.
El método de instalación depende del entorno donde se instalará Sysbox:
Para instalar Sysbox en un clúster Kubernetes, use el daemonset sysbox-deploy-k8s.
De lo contrario, use el paquete Sysbox para su distribución.
Alternativamente, si un paquete para su distribución aún no está disponible, o si desea obtener los últimos cambios de upstream, puede compilar e instalar Sysbox desde el código fuente.
Una vez instalado Sysbox, usted crea un contenedor usando su gestor de contenedores u orquestador (por ejemplo, Docker o Kubernetes) y una imagen de su elección.
Ejemplo de comando Docker:
$ docker run --runtime=sysbox-runc --rm -it --hostname my_cont registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
root@my_cont:/#
Ejemplo de pod de Kubernetes:
apiVersion: v1
kind: Pod
metadata:
name: ubu-bio-systemd-docker
annotations:
io.kubernetes.cri-o.userns-mode: "auto:size=65536"
spec:
runtimeClassName: sysbox-runc
containers:
- name: ubu-bio-systemd-docker
image: registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
command: ["/sbin/init"]
restartPolicy: Never
Puede elegir la imagen de contenedor que desee; Sysbox no impone requisitos sobre la imagen.
Nestybox pone a disposición varias imágenes de referencia en sus repositorios de Dockerhub y GitHub Container Registry. Estas son imágenes que típicamente incluyen systemd, Docker, Kubernetes y más dentro de los contenedores. Los Dockerfiles están aquí. Siéntase libre de usarlos y modificarlos según sus necesidades.
Nos esforzamos por proporcionar buena documentación; es un componente clave del proyecto Sysbox.
Tenemos varios documentos para ayudarle a comenzar y a aprovechar al máximo Sysbox.
Documento de compatibilidad de distribuciones de Sysbox
Guía de inicio rápido de Sysbox
Sysbox es rápido y eficiente, como se describe en esta publicación de blog de Nestybox.
Los contenedores creados por Sysbox tienen un rendimiento similar a los creados por el OCI runc (el runtime predeterminado para Docker y Kubernetes).
Incluso los contenedores desplegados dentro de los contenedores de sistema tienen un excelente rendimiento, aunque hay una ligera sobrecarga para el IO de red (como se espera, ya que los paquetes emitidos por los contenedores internos pasan a través de una interfaz / puente de red adicional dentro del contenedor de sistema).
Ahora bien, si usa Sysbox para desplegar contenedores de sistema que reemplazan VMs, entonces las ganancias de rendimiento y eficiencia son significativas: puede desplegar 2X más contenedores de sistema que VMs en el mismo servidor y obtener el mismo rendimiento, y hacerlo con una fracción del consumo de memoria y almacenamiento. La publicación de blog referenciada anteriormente tiene más información al respecto.
Sysbox se bifurcó del excelente OCI runc a principios de 2019 y se apoya en el trabajo realizado por los desarrolladores de OCI runc.
Dicho esto, Sysbox añade funcionalidad significativa por encima. Está escrito en Go, y actualmente se compone de tres componentes: sysbox-runc, sysbox-fs, y sysbox-mgr.
Sysbox utiliza muchas características de virtualización del SO del kernel de Linux y las complementa con técnicas de virtualización del SO implementadas en el espacio de usuario. Estas incluyen el uso de todos los namespaces de Linux (en particular el user-namespace), la virtualización parcial de procfs y sysfs, la captura selectiva de syscalls, y más.
Más sobre el diseño de Sysbox se puede encontrar en la Guía de usuario de Sysbox.
Aunque los contenedores generados por Sysbox se asemejan a máquinas virtuales en algunos aspectos (por ejemplo, puede ejecutar como root, ejecutar múltiples servicios y desplegar Docker y K8s en su interior), Sysbox no utiliza virtualización por hardware.
Sysbox es una tecnología pura de virtualización del SO destinada a crear contenedores que pueden ejecutar aplicaciones así como software a nivel de sistema, de manera fácil y segura.
Esto hace que los contenedores creados por Sysbox sean rápidos, eficientes y portables (es decir, no están atados a un hipervisor).
En cuanto al aislamiento, es justo decir que los contenedores Sysbox proporcionan un aislamiento más fuerte que los contenedores Docker regulares (en virtud del uso del user-namespace de Linux y un shim de SO ligero), pero un aislamiento más débil que las VMs (al compartir el kernel de Linux entre los contenedores).
Damos la bienvenida a las contribuciones a Sysbox, ya sean pequeños cambios de documentación, correcciones de errores o adiciones de características. Consulte las pautas de contribución y la guía del desarrollador para más información.
Consulte el Capítulo de Seguridad de la Guía del Usuario para obtener información sobre cómo Sysbox asegura los contenedores.
Si encuentra errores o problemas que puedan exponer una vulnerabilidad de Sysbox, por favor repórtelos enviando un correo electrónico a [email protected]. No abra problemas de seguridad en este repositorio. ¡Gracias!
Además, recientemente se han encontrado algunas vulnerabilidades en el kernel de Linux que en algunos casos reducen o anulan el aislamiento mejorado proporcionado por los contenedores Sysbox. Afortunadamente, todas están corregidas en kernels de Linux recientes. Consulte el capítulo Vulnerabilidades y CVEs de la Guía del Usuario de Sysbox para más información, y comuníquese a través del canal de Slack de Sysbox para más preguntas.
El soporte se ofrece actualmente sobre la base de "mejor esfuerzo".
Si tiene una pregunta o comentario, nos encantaría escucharlo. Puede contactarnos en nuestro canal de Slack o abrir un issue en este repositorio de GitHub.
Si detecta un problema con Sysbox, busque en los issues existentes, ya que pueden describir el problema y proporcionar una solución alternativa.
Consulte también el documento de Solución de problemas.
Antes de desinstalar Sysbox, asegúrese de que todos los contenedores desplegados con él estén detenidos y eliminados.
El método de desinstalación depende del método utilizado para instalar Sysbox:
Para desinstalar Sysbox en un clúster Kubernetes, siga estas instrucciones.
De lo contrario, para desinstalar el paquete Sysbox, siga estas instrucciones.
Si Sysbox se compiló e instaló desde el código fuente, siga estas instrucciones.
La siguiente es una lista de características en la hoja de ruta de Sysbox.
Las listamos aquí para que nuestros usuarios puedan tener una mejor idea de hacia dónde vamos y puedan darnos su opinión sobre cuáles les gustan más (o menos).
Aquí hay una lista breve; el rastreador de issues de Sysbox tiene muchas más.
Soporte para más distribuciones de Linux.
Más mejoras a la virtualización de procfs y sysfs.
Mejoras continuas al aislamiento de contenedores.
Exponer dispositivos del host dentro de los contenedores de sistema con los permisos adecuados.
Slack: Espacio de trabajo de Sysbox en Slack
Email: [email protected]
Estamos disponibles de lunes a viernes, de 9am a 5pm hora del Pacífico.
Le agradecemos muchísimo por usar y/o contribuir a Sysbox. Esperamos que lo encuentre interesante y que le ayude a usar contenedores de maneras nuevas y más poderosas.