What’s Sysbox by Nestybox?

What’s Sysbox
Source https://blog.nestybox.com/2020/10/06/related-tech-comparison.html

Docker

Docker
Docker

Open Container Initiative

Container Runtime Interface

CRI-O and containerd

  • CRI-O which is an implementation working specifically for Kubernetes
  • containerd which works with Docker and with its CRI plugin to work with Kubernetes

Command-line tools

  • kubectl to communicate with the Kube API.
  • crictl to communicate with the CRI interface.
  • Docker or nerdctl (a Docker compatible implementation) and Podman to manage containers.

Container Runtime alternatives

  • either with an applicative layer for gVisor
  • either with a microVM for KataContainer

Sysbox — Container Runtime

Sysbox — System Container

Sysbox — Use Cases

  • Build Container Images inside an unprivileged Sysbox container.
  • Tests Configurations and Deployments using Kubernetes, Nomad, Docker Compose, or Docker Swarm inside a Sysbox container.

Sysbox Image

FROM ubuntu:focalSHELL ["/bin/bash", "-c"]# Install baseline packages
RUN apt-get update && \
DEBIAN_FRONTEND="noninteractive" apt-get install --yes \
apt-transport-https \
bash \
build-essential \
ca-certificates \
curl \
dbus \
dnsutils \
docker.io \
gnupg-agent \
htop \
iptables \
iproute2 \
iputils-ping \
jq \
kmod \
libsystemd0 \
locales \
lsb-release \
man \
openssh-server \
python3 \
python3-pip \
rsyslog \
software-properties-common \
sudo \
systemd \
systemd-sysv \
udev \
unzip \
vim \
wget && \
# Install Docker using official repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add — && \
apt-key fingerprint 0EBFCD88 && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
apt-get update && apt-get install --no-install-recommends --yes \
docker-ce \
docker-ce-cli \
containerd.io && \
# Install latest Git using their official PPA
add-apt-repository ppa:git-core/ppa && \
DEBIAN_FRONTEND="noninteractive" apt-get install --yes git && \
# Housekeeping
apt-get autoremove --yes && \
apt-get clean --yes && \
rm -rf \
/tmp/* \
/var/lib/apt/lists/* \
/var/tmp/*
# Prevents journald from reading kernel messages from /dev/kmsg
RUN echo "ReadKMsg=no" >> /etc/systemd/journald.conf
# Create default ‘admin/admin’ user
RUN useradd admin \
--create-home \
--shell /bin/bash \
--groups docker \
--uid=1000 \
--user-group && \
echo "admin:admin" | chpasswd && \
echo "admin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/admin && \
mkdir /home/admin/.ssh && \
chown admin:admin /home/admin/.ssh
# Make use of stopsignal (instead of sigterm) to stop systemd containers.
STOPSIGNAL SIGRTMIN+3
# Expose OpenSSH server
EXPOSE 22
# Set systemd as entrypoint.
ENTRYPOINT [ "/sbin/init", " — log-level=err" ]
$ docker build -t sysbox-base .
$ docker tag sysbox-base <registry>/sysbox-base:latest
$ docker push <registry>/sysbox-base:latest

Sysbox on Docker host

Installation

Docker-in-Docker

Docker-in-Docker (DinD)
  1. To run the sysbox-base image, just built above, execute the docker run command with the runtime parameter.
    $ docker run --runtime=sysbox-runc --hostname=sysbox -it sysbox-base
  2. A regular VM startup displays on your terminal, followed by a login prompt.
  3. Login with admin username and admin password
  4. Check systemd services by executing the following command
    admin@sysbox$ systemctl status
  5. Execute a docker run command inside the Sysbox container
    admin@sysbox$ docker run hello-world
  6. Now, shut down the “container VM.”
    admin@sysbox$ sudo shutdown now

Sysbox on Kubernetes Cluster

Installation

  1. To prepare the Sysbox installation on a Kubernetes cluster, add the sysbox-install=yes label to the worker nodes
    $ kubectl label nodes <node> sysbox-install=yes
  2. Apply the required manifests to add the required RBAC, install Sysbox on each worker node, and add sysbox-runc runtime.
$ kubectl apply -f https://raw.githubusercontent.com/nestybox/sysbox/master/sysbox-k8s-manifests/rbac/sysbox-deploy-rbac.yaml
$ kubectl apply -f https://raw.githubusercontent.com/nestybox/sysbox/master/sysbox-k8s-manifests/daemonset/sysbox-deploy-k8s.yaml
$ kubectl apply -f https://raw.githubusercontent.com/nestybox/sysbox/master/sysbox-k8s-manifests/runtime-class/sysbox-runtimeclass.yaml

Docker-in-Kubernetes

Docker-in-Kubernetes (DinK)
  1. First, create a Pod manifest using sysbox-runc as runtimeClassName, and annotation to indicate to CRI-O to auto-assign user-namespace mappings, see the manifest content below.
  2. Then, apply this manifest to launch a related Pod on the Kubernetes cluster.
    $ kubectl apply -f sysbox.yaml
  3. Check the sysbox Pod is running well with the following command
    $ kubectl get pods sysbox
  4. Expose the SSH port as NodePort
    $ kubectl expose pod sysbox --port=22 --name=sysbox --type=NodePort
  5. Connect with SSH using the exposed NodePort (replace <node> with a node name.
    $ ssh admin@<node> -p $(kubectl get service sysbox -o jsonpath="{.spec.ports[0].nodePort}")
  6. Check systemd services by executing the following command
    admin@sysbox$ systemctl status
  7. Execute a docker run command inside the Sysbox container
    admin@sysbox$ docker run hello-world
  8. Now, shut down the “container VM.”
    admin@sysbox$ sudo shutdown now
apiVersion: v1
kind: Pod
metadata:
name: sysbox
annotations:
io.kubernetes.cri-o.userns-mode: "auto:size=65536"
labels:
run: sysbox
spec:
runtimeClassName: sysbox-runc
containers:
— name: sysbox
image: <registry>/sysbox-base
ports:
- containerPort: 22
restartPolicy: Never

References

--

--

--

Open source advocate since last century

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Nupokati, or contract-based CI/CD of mobile apps

Salesforce Authentication with .NET (OAuth)

What’s new in MicroK8s v1.23?

I feel sad for students who get into CS for a high salary and financial security.

Programming

Learning Java as Your First Language: For and Against

Using Python Scripts in the Robot Framework

Write code for humans, not for machines

In-Depth Comparison of Time-Tracking Software as a Service Products Based on Market Segmentation

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Stéphane Este-Gracias

Stéphane Este-Gracias

Open source advocate since last century

More from Medium

Kubernetes-in-Docker with kubeadm and Sysbox

What’s new in MicroK8s v1.23?

Getting Started with Shipa

Containers landscape: seen through OCI and CNCF standards lens