Skip to content

Commit

Permalink
Merge pull request #31 from OSInside/doc_update
Browse files Browse the repository at this point in the history
Update documentation
  • Loading branch information
schaefi authored Jan 9, 2024
2 parents fc8efd1 + af4ae29 commit 443b438
Show file tree
Hide file tree
Showing 3 changed files with 169 additions and 37 deletions.
82 changes: 45 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# Flake Pilot

## Semi Transparent Container/VM instances

1. [Introduction](#introduction)
1. [Use Cases](#usecases)
2. [Installation](#installation)
3. [Quick Start OCI containers](#oci)
1. [Use Cases](#usecases)
4. [Quick Start FireCracker VMs](#fire)
1. [Use FireCracker VM image from components](#components)
2. [Networking](#networking)
Expand All @@ -29,6 +31,46 @@ OCI container or a FireCracker VM. There are two main components:
```flake-ctl``` is the management utility to list, register,
remove, and-more... flake applications on your host.

The main idea for flake-pilot was not only to launch isolated apps like
native binaries but also allow to run a provision step prior calling
the application. This concept then allows to run semi transparent
container/VM instances which can take information from other places
prior its execution. The following diagram visualizes this concept:

![](images/transparency.png)

As a result we see some interesting use cases described in the following
section.

### Use Cases <a name="usecases"/>

* delta containers used together with a base container such that
only small delta containers gets pulled to the registry used with
a base that exists only once.

* include arbitrary data without harming the host integrity e.g custom
binaries, proprietary software not following package guidelines and
standards, e.g automotive industry processes which we will not be
able to change in this live ;)

* layering of several containers, e.g deltas on top of a base. Building
up a solution stack e.g base + python + python-app.

* provisioning app dependencies from the host instead of providing them
in the container, e.g a delta container providing the app using a base
container but take the certificates or other sensitive information
from the host; three way dependency model.

Actually all of the above use cases are immaterial if a proper packaging,
release and maintenance of the application is possible. However, I have
learned the world is not an ideal place and there might be a spot for
this project to be useful, supporting users with "special" needs and
adding an adaptive feature to the OS.

For demo purposes and to showcase the mentioned use cases, some
example images were created. See [How To Build Your Own App Images](#images)
for further details

## Installation <a name="installation"/>

flake-pilot components are written in rust and available as packages
Expand Down Expand Up @@ -78,40 +120,6 @@ connected to the ```aws-cli``` container provided by Amazon on
aws ec2 help
```

### Use Cases <a name="usecases"/>

Apart from this very simple example you can do a lot more. The main
idea for flake-pilot was not only to launch container based apps but
also allow to run a provision step prior calling the application.
This concept then allows for use cases like:

* delta containers used together with a base container such that
only small delta containers gets pulled to the registry used with
a base that exists only once.

* include arbitrary data without harming the host integrity e.g custom
binaries, proprietary software not following package guidelines and
standards, e.g automotive industry processes which we will not be
able to change in this live ;)

* layering of several containers, e.g deltas on top of a base. Building
up a solution stack e.g base + python + python-app.

* provisioning app dependencies from the host instead of providing them
in the container, e.g a delta container providing the app using a base
container but take the certificates or other sensitive information
from the host; three way dependency model.

Actually all of the above use cases are immaterial if a proper packaging,
release and maintenance of the application is possible. However, I have
learned the world is not an ideal place and there might be a spot for
this project to be useful, supporting users with "special" needs and
adding an adaptive feature to the OS.

For demo purposes and to showcase the mentioned use cases, some
example images were created. See [How To Build Your Own App Images](#images)
for further details

## Quick Start FireCracker VMs <a name="fire"/>

Using containers to isolate applications from the host system is a common
Expand Down Expand Up @@ -346,14 +354,14 @@ One option is to use the **Open Build Service** which is able to build
software packages and images and therefore allows to maintain the
complete application stack.

For demo purposes and to showcase the mentioned <a name="usecases"/>
For demo purposes and to showcase the mentioned [Use Cases](#usecases)
some example images were created and could be considered as a simple
```flake store```. Please find them here:

* https://build.opensuse.org/project/show/home:marcus.schaefer:delta_containers

Feel free to browse through the project and have some fun testing. There
is a short description in each application build how to use them.
is a short description for each application how to use them.

**_NOTE:_** All images are build using the
[KIWI](https://github.com/OSInside/kiwi) appliance builder which is
Expand Down
124 changes: 124 additions & 0 deletions images/transparency.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<mxfile host="app.diagrams.net" modified="2024-01-03T12:28:08.805Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" etag="kcBJz8NqlKbwGJXIVSVG" version="22.1.16" type="device">
<diagram name="Seite-1" id="Hmg_-aTZ7hJYmr36nkXa">
<mxGraphModel dx="2661" dy="594" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="KFLii3N69ctTYGw0aZqz-67" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="KFLii3N69ctTYGw0aZqz-1" target="KFLii3N69ctTYGw0aZqz-44" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-1" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=#97d077;gradientDirection=north;" parent="1" vertex="1">
<mxGeometry x="-1570" y="380" width="660" height="80" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-2" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=south;fillColor=#d5e8d4;gradientColor=#97d077;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1440" y="240" width="40" height="190" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-3" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=south;fillColor=#f8cecc;strokeColor=#b85450;gradientColor=#ea6b66;" parent="1" vertex="1">
<mxGeometry x="-1520" y="200" width="40" height="180" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-5" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=south;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-1350" y="260" width="40" height="80" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-6" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=west;fillColor=#dae8fc;gradientColor=#7ea6e0;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1360" y="340" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-7" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=south;fillColor=#fad7ac;strokeColor=#b46504;" parent="1" vertex="1">
<mxGeometry x="-1300" y="260" width="40" height="80" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-8" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=south;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-1300" y="180" width="40" height="80" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-9" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=west;fillColor=#d5e8d4;gradientColor=#97d077;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1200" y="340" width="200" height="80" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-10" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=south;fillColor=#fad7ac;strokeColor=#b46504;" parent="1" vertex="1">
<mxGeometry x="-1140" y="240" width="40" height="100" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-11" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=south;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-1140" y="160" width="40" height="80" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-18" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-1018" y="420" as="sourcePoint" />
<mxPoint x="-958" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-19" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-1430" y="430" as="sourcePoint" />
<mxPoint x="-1370" y="430" as="targetPoint" />
<Array as="points">
<mxPoint x="-1390" y="430" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-20" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-1380" y="430" as="sourcePoint" />
<mxPoint x="-1380" y="380" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-21" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-982" y="420" as="sourcePoint" />
<mxPoint x="-982" y="380" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-27" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/splashyIcons/marker_rounded_light_blue.png" parent="1" vertex="1">
<mxGeometry x="-1376" y="400" width="16" height="16" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-29" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/splashyIcons/marker_rounded_light_blue.png" parent="1" vertex="1">
<mxGeometry x="-1040" y="310" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-30" value="&lt;h3&gt;With Host Dependencies&lt;/h3&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1020" y="305" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-32" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;&amp;nbsp;App&lt;/b&gt;&lt;/font&gt;" style="text;align=center;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=270;" parent="1" vertex="1">
<mxGeometry x="-1550" y="275" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-33" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;Compatible App&lt;/b&gt;&lt;/font&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=270;" parent="1" vertex="1">
<mxGeometry x="-1518" y="320" width="196" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-36" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;App&lt;/b&gt;&lt;/font&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=270;" parent="1" vertex="1">
<mxGeometry x="-1364" y="285" width="64" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-37" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;&amp;nbsp;Base&amp;nbsp;&lt;/b&gt;&lt;/span&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=0;" parent="1" vertex="1">
<mxGeometry x="-1340" y="345" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-38" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;Layer&amp;nbsp;&lt;/b&gt;&lt;/span&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=270;" parent="1" vertex="1">
<mxGeometry x="-1310" y="285" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-39" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;App&lt;/b&gt;&lt;/font&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=270;" parent="1" vertex="1">
<mxGeometry x="-1305" y="205" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-40" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;Compatible Base&amp;nbsp;&lt;/b&gt;&lt;/font&gt;" style="text;align=center;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=0;" parent="1" vertex="1">
<mxGeometry x="-1170" y="365" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-41" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;Layer&amp;nbsp;&lt;/b&gt;&lt;/span&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=270;" parent="1" vertex="1">
<mxGeometry x="-1190" y="275" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-42" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;App&lt;/b&gt;&lt;/font&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=270;" parent="1" vertex="1">
<mxGeometry x="-1190" y="185" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-43" value="&lt;h1&gt;Host OS (Can be immutable)&lt;/h1&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1410" y="430" width="340" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-44" value="" style="rounded=1;whiteSpace=wrap;html=1;fillStyle=auto;shadow=0;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="-1570" y="480" width="660" height="40" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-45" value="&lt;h1&gt;Hardware&lt;/h1&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1410" y="485" width="340" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-54" value="" style="rounded=1;whiteSpace=wrap;html=1;direction=south;fillColor=#f8cecc;gradientColor=#ea6b66;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-1190" y="260" width="40" height="80" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-56" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;App&lt;/b&gt;&lt;/font&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=270;" parent="1" vertex="1">
<mxGeometry x="-1240" y="285" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="KFLii3N69ctTYGw0aZqz-60" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn2.iconfinder.com/data/icons/splashyIcons/marker_rounded_light_blue.png" parent="1" vertex="1">
<mxGeometry x="-970" y="395" width="16" height="16" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Binary file added images/transparency.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 443b438

Please sign in to comment.