
Um "runc" open-source de próxima geração que capacita contêineres rootless a executar cargas de trabalho como Systemd, Docker, Kubernetes, assim como VMs.
O Sysbox é um runtime de contêineres gratuito e de código aberto (um "runc" especializado), originalmente desenvolvido pela Nestybox (adquirida pela Docker em 05/2022), que aprimora contêineres de duas maneiras principais:
Aprimora o isolamento de contêineres:
User-namespace do Linux em todos os contêineres (ou seja, o usuário root no contêiner não tem privilégios no host).
Virtualiza partes do procfs e sysfs dentro do contêiner.
Oculta informações do host dentro do contêiner.
Bloqueia os mounts iniciais do contêiner, entre outros.
Permite que contêineres executem os mesmos workloads que VMs:
Com o Sysbox, os contêineres podem executar software de nível de sistema, como systemd, Docker, Kubernetes, K3s, buildx (incluindo builds multi-arquitetura), aplicativos legados, aplicativos multi-arquitetura e muito mais, de forma integrada e segura.
Esse software pode ser executado dentro de contêineres Sysbox sem modificação e sem usar versões especiais do software (por exemplo, variantes rootless).
Sem contêineres privilegiados, sem imagens complexas, sem entrypoints complicados, sem mounts de volume especiais, etc.
Pense nele como um "supercarregador de contêineres": ele permite que seus gerenciadores/orquestradores de contêineres existentes (por exemplo, Docker, Kubernetes etc.) implantem contêineres com isolamento reforçado e que podem executar quase qualquer workload que rode em VMs.
O Sysbox faz isso fazendo com que o contêiner se assemelhe o máximo possível a um ambiente semelhante a VM, usando técnicas avançadas de virtualização de SO.
Diferentemente de runtimes alternativos como Kata e KubeVirt, ele não usa VMs. Isso o torna mais fácil de usar (principalmente em ambientes de nuvem, ao evitar virtualização aninhada), embora não forneça o nível de isolamento que runtimes baseados em VM oferecem. Veja aqui para uma comparação.
Não é necessário aprender novas ferramentas nem modificar suas imagens de contêiner ou fluxos de trabalho existentes para aproveitar o Sysbox. Basta instalá-lo e apontar seu gerenciador/orquestrador de contêineres para ele, a fim de implantar contêineres aprimorados.
O Sysbox pode coexistir com outros runtimes de contêiner no mesmo host (por exemplo, o runc OCI padrão, Kata etc.). Você pode escolher facilmente quais contêineres ou pods executar com cada um, dependendo das suas necessidades.
O Sysbox é gratuito e de código aberto, licenciado sob a Apache License, Versão 2.0. Consulte o arquivo LICENSE para obter detalhes.
O Sysbox foi originalmente desenvolvido pela Nestybox. Como a Nestybox agora faz parte da Docker, a Docker é a principal patrocinadora do projeto Sysbox.
Dito isso, o Sysbox é um projeto comunitário de código aberto e não é oficialmente suportado pela Docker (ou seja, as assinaturas da Docker não incluem suporte ao Sysbox). O suporte é fornecido em regime de melhor esforço por meio deste repositório do Github ou do Sysbox Slack Workspace.
Incentivamos a participação da comunidade para ajudar a evoluir e melhorar o Sysbox, com o objetivo de ampliar os casos de uso e os benefícios que ele proporciona. Mantenedores e contribuidores externos são bem-vindos.
O Sysbox resolve problemas como:
Aprimorar o isolamento de microsserviços conteinerizados (o root no contêiner é mapeado para um usuário sem privilégios no host).
Permitir um usuário root altamente capaz dentro do contêiner sem comprometer a segurança do host.
Proteger pipelines de CI/CD ao habilitar Docker-in-Docker (DinD) ou Kubernetes-in-Docker (KinD) sem contêineres privilegiados inseguros ou mounts do socket Docker do host.
Permitir o uso de contêineres como ambientes "semelhantes a VM" para desenvolvimento, testes locais, aprendizado etc., com forte isolamento e a capacidade de executar systemd, Docker, IDEs e muito mais dentro do contêiner.
Executar aplicativos legados dentro de contêineres (em vez de VMs menos eficientes).
Substituir VMs por uma alternativa baseada em contêineres mais fácil, rápida, eficiente e portátil, que possa ser implantada facilmente em ambientes de nuvem.
Particionar hosts bare-metal em vários ambientes de computação isolados com 2X a densidade de VMs (ou seja, implantar duas vezes mais contêineres semelhantes a VM do que VMs no mesmo hardware, com o mesmo desempenho).
Particionar instâncias de nuvem (por exemplo, EC2, GCP etc.) em vários ambientes de computação isolados sem recorrer à virtualização aninhada cara.
O Sysbox instala facilmente em hosts Linux (bare-metal, VM, on-prem, nuvem etc.). Ele funciona em todos os principais serviços de IaaS baseados em nuvem e Kubernetes (por exemplo, EC2, GCP, GKE, EKS, AKS, Rancher etc.)
Uma vez instalado, o Sysbox trabalha nos bastidores: você usa Docker, Kubernetes etc. para implantar contêineres com ele.
Por exemplo, este simples comando Docker cria um contêiner com o Sysbox:
$ docker run --runtime=sysbox-runc -it any_image
Você obtém um contêiner bem isolado, capaz de executar microsserviços, bem como software de nível de sistema que normalmente roda em VMs (por exemplo, systemd, Docker, Kubernetes etc.).
Mais sobre como usar o Sysbox aqui.
Como mostrado, o Sysbox permite que contêineres sem privilégios executem workloads de nível de sistema, como systemd, Docker, Kubernetes etc., de forma integrada, ao mesmo tempo em que oferece uma abordagem equilibrada entre isolamento de contêineres, desempenho, eficiência e portabilidade.
E ele faz isso com mudanças mínimas de configuração na sua infraestrutura existente: basta instalar o Sysbox e configurar seu gerenciador/orquestrador de contêineres para iniciar contêineres com ele, usando a imagem de sua escolha.
Observe que, embora o Sysbox reforce o isolamento dos contêineres padrão e elimine a necessidade de contêineres privilegiados inseguros em muitos cenários, ele ainda não fornece o mesmo nível de isolamento que alternativas baseadas em VM ou SOs em espaço de usuário, como o gVisor. Portanto, para cenários em que o nível mais alto de isolamento é necessário, alternativas como o KubeVirt podem ser preferíveis (às custas de menor desempenho e eficiência e maior complexidade e custo).
Consulte este post no blog para saber mais.
O projeto Sysbox é destinado a qualquer pessoa que queira experimentar, inventar, aprender e construir sistemas usando contêineres de sistema. É virtualização de SO de ponta, e contribuições são bem-vindas.
Antes da aquisição pela Docker em 05/2022, a Nestybox oferecia o Sysbox Enterprise como uma versão aprimorada do Sysbox (por exemplo, mais segurança, mais workloads e suporte oficial).
Após a aquisição, no entanto, o Sysbox Enterprise não é mais oferecido como produto autônomo, tendo sido incorporado ao Docker Desktop (veja Docker Hardened Desktop).
NOTA: Como o Sysbox Enterprise não é mais oferecido como produto autônomo, a Docker planeja disponibilizar alguns recursos do Sysbox Enterprise na Sysbox Community Edition. Os recursos estão por definir (TBD) e seu feedback sobre isso é bem-vindo.
A tabela abaixo resume as principais funcionalidades do runtime de contêineres Sysbox.
Ela também fornece uma comparação entre a Sysbox Community Edition (ou seja, este repositório) e a Sysbox Enterprise Edition anteriormente disponível (agora obsoleta).
Mais sobre as funcionalidades do Sysbox aqui.
Se tiver dúvidas, você pode nos contatar aqui.
Chamamos os contêineres implantados pelo Sysbox de contêineres de sistema para destacar o fato de que eles podem executar não apenas microsserviços (como os contêineres comuns fazem), mas também software de sistema, como Docker, Kubernetes, Systemd, contêineres internos etc.
Mais sobre contêineres de sistema aqui.
O host do Sysbox deve atender aos seguintes requisitos:
Ele deve estar executando uma das distros Linux suportadas e ser uma máquina com uma arquitetura suportada (por exemplo, amd64, arm64).
Recomendamos no mínimo 4 CPUs (por exemplo, 2 núcleos com 2 hyperthreads) e 4GB de RAM. Embora isso não seja um requisito obrigatório, configurações menores podem deixar o Sysbox mais lento.
O método de instalação depende do ambiente em que o Sysbox será instalado:
Para instalar o Sysbox em um cluster Kubernetes, use o daemonset sysbox-deploy-k8s.
Caso contrário, use o pacote Sysbox para sua distro.
Alternativamente, se um pacote para sua distro ainda não estiver disponível, ou se você quiser obter as últimas alterações do upstream, você pode compilar e instalar o Sysbox a partir do código-fonte.
Depois que o Sysbox está instalado, você cria um contêiner usando seu gerenciador ou orquestrador de contêineres (por exemplo, Docker ou Kubernetes) e uma imagem de sua escolha.
Exemplo de comando Docker:
$ docker run --runtime=sysbox-runc --rm -it --hostname my_cont registry.nestybox.com/nestybox/ubuntu-bionic-systemd-docker
root@my_cont:/#
Exemplo de especificação de pod 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
Você pode escolher qualquer imagem de contêiner que desejar; o Sysbox não impõe requisitos sobre a imagem.
A Nestybox disponibiliza várias imagens de referência em seus repositórios no Dockerhub e no GitHub Container Registry. São imagens que normalmente incluem systemd, Docker, Kubernetes e muito mais dentro dos contêineres. Os Dockerfiles estão aqui. Sinta-se à vontade para usar e modificar conforme suas necessidades.
Nós nos esforçamos para fornecer boa documentação; é um componente-chave do projeto Sysbox.
Temos vários documentos para ajudar você a começar e a obter o melhor do Sysbox.
Documento de Compatibilidade de Distros do Sysbox
Guia de Início Rápido do Sysbox
O Sysbox é rápido e eficiente, conforme descrito neste post do blog da Nestybox.
Os contêineres criados pelo Sysbox têm desempenho semelhante aos criados pelo OCI runc (o runtime padrão para Docker e Kubernetes).
Até mesmo os contêineres implantados dentro dos contêineres de sistema têm excelente desempenho, embora haja uma pequena sobrecarga para E/S de rede (como esperado, já que os pacotes emitidos pelos contêineres internos passam por uma interface de rede / bridge adicional dentro do contêiner de sistema).
Agora, se você usar o Sysbox para implantar contêineres de sistema que substituem VMs, os ganhos de desempenho e eficiência são significativos: você pode implantar 2X mais contêineres de sistema do que VMs no mesmo servidor e obter o mesmo desempenho, e fazer isso com uma fração do consumo de memória e armazenamento. O post do blog mencionado acima traz mais detalhes sobre isso.
O Sysbox foi bifurcado (fork) do excelente OCI runc no início de 2019 e se apoia no trabalho realizado pelos desenvolvedores do OCI runc.
Dito isso, o Sysbox adiciona funcionalidades significativas por cima. Ele é escrito em Go e atualmente é composto por três componentes: sysbox-runc, sysbox-fs e sysbox-mgr.
O Sysbox utiliza muitos recursos de virtualização de SO do kernel Linux e complementa isso com técnicas de virtualização de SO implementadas em espaço de usuário. Isso inclui o uso de todos os namespaces do Linux (em particular o user-namespace), virtualização parcial de procfs e sysfs, captura seletiva de syscalls e muito mais.
Mais detalhes sobre o design do Sysbox podem ser encontrados no Guia do Usuário do Sysbox.
Embora os contêineres gerados pelo Sysbox se assemelhem a máquinas virtuais em alguns aspectos (por exemplo, você pode executar como root, executar vários serviços e implantar Docker e K8s internamente), o Sysbox não usa virtualização de hardware.
O Sysbox é uma tecnologia pura de virtualização de SO criada para gerar contêineres que podem executar aplicativos e também software de nível de sistema, de forma fácil e segura.
Isso torna os contêineres criados pelo Sysbox rápidos, eficientes e portáteis (ou seja, eles não estão vinculados a um hipervisor).
Em termos de isolamento, é justo dizer que os contêineres do Sysbox oferecem isolamento mais forte do que os contêineres Docker comuns (devido ao uso do user-namespace do Linux e do shim leve de SO), mas isolamento mais fraco do que VMs (por compartilhar o kernel Linux entre os contêineres).
Aceitamos contribuições para o Sysbox, sejam pequenas mudanças na documentação, correções de bugs ou adições de funcionalidades. Consulte as diretrizes de contribuição e o guia do desenvolvedor para obter mais informações.
Consulte o Capítulo de Segurança do Guia do Usuário para obter informações sobre como o Sysbox protege os contêineres.
Se você encontrar bugs ou problemas que possam expor uma vulnerabilidade do Sysbox, reporte-os enviando um e-mail para [email protected]. Por favor, não abra issues de segurança neste repositório. Obrigado!
Além disso, algumas vulnerabilidades foram recentemente encontradas no kernel Linux que, em alguns casos, reduzem ou anulam o isolamento aprimorado fornecido pelos contêineres do Sysbox. Felizmente, todas são corrigidas em kernels Linux recentes. Consulte o capítulo Vulnerabilidades e CVEs do Guia do Usuário do Sysbox para obter mais informações e entre em contato pelo canal Slack do Sysbox para mais dúvidas.
O suporte é atualmente oferecido em regime de melhor esforço.
Se você tiver uma pergunta ou comentário, adoraríamos ouvi-lo. Você pode nos contatar em nosso canal do Slack ou abrir uma issue neste repositório do GitHub.
Se você notar um problema com o Sysbox, pesquise as issues existentes, pois elas podem descrever o problema e fornecer uma solução alternativa.
Consulte também o documento de Solução de Problemas.
Antes de desinstalar o Sysbox, certifique-se de que todos os contêineres implantados com ele estejam parados e removidos.
O método de desinstalação depende do método usado para instalar o Sysbox:
Para desinstalar o Sysbox em um cluster Kubernetes, siga estas instruções.
Caso contrário, para desinstalar o pacote Sysbox, siga estas instruções.
Se o Sysbox foi compilado e instalado a partir do código-fonte, siga estas instruções.
A seguir, uma lista de funcionalidades no roteiro do Sysbox.
Nós as listamos aqui para que nossos usuários possam ter uma ideia melhor de para onde estamos indo e possam nos dar feedback sobre quais delas mais gostam (ou menos).
Esta é uma lista resumida; o rastreador de issues do Sysbox tem muitas outras.
Suporte a mais distros Linux.
Mais melhorias na virtualização de procfs e sysfs.
Melhorias contínuas no isolamento de contêineres.
Expor dispositivos do host dentro dos contêineres de sistema com as permissões adequadas.
Slack: Sysbox Slack Workspace
E-mail: [email protected]
Estamos disponíveis de segunda a sexta-feira, das 9h às 17h (Horário do Pacífico).
Agradecemos muito por usar e/ou contribuir com o Sysbox. Esperamos que você o ache interessante e que ele ajude você a usar contêineres de maneiras novas e mais poderosas.