OverlayBD Artifact Streaming

Installation

Flatcar Container Linux offers support for the installation and customization of containerd’s accelerated container image artifact streaming. Both accelerated-container-image and the overlaybd back-end are combined in an optional, system dependent sysext .

The sysext can be provisioned simply by adding the line overlaybd to /etc/flatcar/enabled-sysext.conf. Since these sysexts are system dependent (compiled against the system’s C library), they will be updated automatically in lockstep with the operating system.

Example Butane configuration:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
---
# config.yaml
# butane < config.yaml > config.json
variant: flatcar
version: 1.0.0

storage:
  files:
  - path: /etc/flatcar/enabled-sysext.conf
    contents:
      inline: |
        overlaybd

Usage

The below usage largely follows upstream’s Getting started guide .

The sysext includes upstream’s overlaybd.json and config.json and will populate /etc/overlaybd/ and /etc/overlaybd-snapshotter/ at extension merge time.

Containerd configuration needs to be amended to use overlaybd and the snapshotter plugin. Since Flatcar does not support containerd drop-in configuration at the time of writing, our Butane config needs to include the full containerd toml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
---
# config.yaml
# butane < config.yaml > config.json
variant: flatcar
version: 1.0.0

storage:
  files:
  - path: /etc/flatcar/enabled-sysext.conf
    contents:
      inline: |
        overlaybd
    - path: /etc/containerd/config.toml
      contents:
        inline: |
          version = 2
          
          # persistent data location
          root = "/var/lib/containerd"
          # runtime state information
          state = "/run/containerd"
          # set containerd as a subreaper on linux when it is not running as PID 1
          subreaper = true
          # set containerd's OOM score
          oom_score = -999
          disabled_plugins = []
          
          # grpc configuration
          [grpc]
          address = "/run/containerd/containerd.sock"
          # socket uid
          uid = 0
          # socket gid
          gid = 0
          
          [plugins."io.containerd.runtime.v1.linux"]
          # shim binary name/path
          shim = "containerd-shim"
          # runtime binary name/path
          runtime = "runc"
          # do not use a shim when starting containers, saves on memory but
          # live restore is not supported
          no_shim = false
          
          [plugins."io.containerd.grpc.v1.cri"]
          # enable SELinux labeling
          enable_selinux = true
          
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          # setting runc.options unsets parent settings
          runtime_type = "io.containerd.runc.v2"
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
          SystemdCgroup = true
          
          [proxy_plugins.overlaybd]
             type = "snapshot"
             address = "/run/overlaybd-snapshotter/overlaybd.sock"

systemd:
  units:
    - name: containerd.service
      dropins:
        - name: 10-configtoml.conf
          contents: |
            [Service]
            ExecStart=
            ExecStart=/usr/bin/containerd --config /etc/containerd/config.toml

After the instance provisioned successfully, accelerated container images can be started in accordance with upstream’s guilde :

1
2
sudo /opt/overlaybd/snapshotter/ctr rpull -u {user}:{pass} registry.hub.docker.com/overlaybd/redis:6.2.1_obd
sudo ctr run --net-host --snapshotter=overlaybd --rm -t registry.hub.docker.com/overlaybd/redis:6.2.1_obd demo