Raspberry Pi上的鞭炮入门

2020-11-24 00:14:37

传统上,服务是在裸机上部署的,在过去的几十年中,我们看到了虚拟化(在操作系统进程中运行其他操作系统)和最近的容器化(在与其他进程分开的安全上下文中运行操作系统进程)的兴起。同一主机)。虚拟化和容器化通过将某些操作系统功能移至客户系统来提供不同级别的隔离。

在本文中,我将深入研究Firecracker,以及如何将其用于在Raspberry Pi(4B)上部署服务。

这里没有几条路。首先,我将使用Ubuntu尝试简单的方法。稍后,我们将研究Alpine Linux的使用,它比Ubuntu轻巧得多,非常适合RPI之类的设备。

我们需要一个64位的Ubuntu映像和一个microSD卡。对于成像,我使用Balena Etcher,它使成像过程变得异常简单。

预安装意味着我们将拥有一个可以正常运行的操作系统,并且在启动后无需执行其他安装步骤。使用Balena Etcher,将压缩的图像文件写入sd卡并在准备好后启动系统非常容易。 SSHD在安装后启动,如果我们知道DHCP服务器发布给设备的IP地址(假设我们的LAN中存在DHCP服务器),则可以通过ssh登录。

我通常删除的Ubuntu几乎没有什么烦人的东西(快照,无人值守的升级)。我也更喜欢在系统等效项上使用Chrony。这些的Ansible回购可在这里找到:https://github.com/l1x/rpi/blob/main/ubuntu.20/ansible/roles/os/tasks/main.yml

Firecracker:主要组件,它是一个虚拟机监视器(VMM),它使用Linux内核虚拟机(KVM)创建和运行microVM。

Jailer:要在生产模式下启动Firecracker,请应用cgroup / namespace隔离屏障,然后放弃特权。那里

Firectl的安装有点麻烦,因为没有发行二进制文件,并且需要Golang 1.14进行编译。我们可以分两个步骤完成这些操作。

我们拥有运行第一个microVM所需的所有工具,唯一缺少的是:需要运行的东西。

稍后,我们将研究如何创建自己的版本,但现在,我们将使用来自

为了使microVM正常运行,我们需要一个网络设备。对于这种情况,我们将使用tap并创建一个设备:

sudo ip tuntap添加dev tap0模式tapsudo ip addr添加172.16.0.1/24 dev tap0 sudo ip链接集tap0 upip addr显示dev tap0

如果要授予对虚拟机的访问权限,则必须启用IP转发:

DEVICE_NAME = eth0sudo sh -c“ echo 1> / proc / sys / net / ipv4 / ip_forward” sudo iptables -t nat -A POSTROUTING -o $ DEVICE_NAME -j MASQUERADEsudo iptables -A FORWARD -m conntrack --ctstate相关,成立- j接受sudo iptables -A FORWARD -i tap0 -o $ DEVICE_NAME -j接受

这就是我们启动第一个microVM的方式。我通常在屏幕上启动它,因此我可以轻松地打开一个新会话,因为它将使用新启动的控制台的标准输入和输出(除非您将其重定向)。

在启动通常的方式并登录后,我们需要修复一些问题:

root @ fadfdd4af58a:〜#apt update得到:1 http://ports.ubuntu.com/ubuntu-ports仿生InRelease [242 kB]得到:2 http://ports.ubuntu.com/ubuntu-ports仿生更新InRelease [ 88.7 kB]命中:3 http://ports.ubuntu.com/ubuntu-ports bionic-backports InReleaseHit:4 http://ports.ubuntu.com/ubuntu-ports bionic-security InReleaseGet:5 http:// ports。 ubuntu.com/ubuntu-ports仿生/宇宙arm64软件包[11.0 MB]获得:6 http://ports.ubuntu.com/ubuntu-ports仿生/多宇宙arm64软件包[153 kB]得到:7 http:// ports。 ubuntu.com/ubuntu-ports bionic / main arm64软件包[1285 kB]获取:8 http://ports.ubuntu.com/ubuntu-ports bionic / restricted arm64软件包[572 B] Get:9 http:// ports。 ubuntu.com/ubuntu-ports bionic-updates / universe arm64软件包[1865 kB] Get:10 http://ports.ubuntu.com/ubuntu-ports bionic-updates / restricted arm64软件包[2262 B] Get:11 http: //ports.ubuntu.com/ubuntu-ports bionic-updates / main arm64软件包[1431 kB]获取:12 http://ports.ubuntu.com/ubuntu-ports bionic-updates / mu ltiverse arm64软件包[5758 B]在6s(2543 kB / s)中获取16.1 MB正在读取软件包列表...错误!E:/ var / lib / dpkg / status上的flAbsPath失败-realpath(2:无此类文件或目录) E:无法打开文件-打开(2:无此类文件或目录)E:打开问题E:无法解析或打开包列表或状态文件。

下次,我们将讨论如何编译新内核并使用不同的rootfs(可能使用Alpine)。