第十二章:iocage 奖金

到目前为止,我们已经使用iocage作为编辑 /etc/jail.conf 的命令行替代方案。然而,它还有一些其他功能使其引人注目。虽然你可以用标准jail模拟iocage导入/导出,但iocage以一种非常方便的方式处理它们。在FreeBSD世界的其他地方,没有真正等同于iocage插件的东西,尽管其他轻量级虚拟化系统已经拥有它们多年了。

第十二章:iocage 奖金迁移 Jails迁移和默认值导出 Jail导入 Jail迁移清理Iocage 插件

迁移 Jails

iocage程序允许您轻松地将一个jail捆绑在一个主机上,并在另一个主机上将其提取出来,同时保留其所有设置。虽然创建一个jail的tarball并从 jail.conf 复制设置并不繁重,但我们都知道,最终会有人把它搞砸,导致更多的停机时间。使用iocage将jail从一个主机迁移到另一个主机是自动的、确定的和可靠的。

假设所有主机的配置都是类似的,那就是。

迁移和默认值

jail的配置只包含iocage默认值和jail设置之间的差异。如果主机的所有jail都需要特定的设置,您可以在特殊jail默认设置中设置该设置,它将适用于所有jail。

我在主机之间迁移jail时遇到的问题来自每台主机的不同默认值。如果一个主机默认运行vnet jail,而另一个主机使用共享网络,则迁移的jail的配置将需要调整才能工作。您最好在迁移jail的所有主机上保持默认iocage设置同步。您始终可以比较默认配置文件 /iocage/defaults.json 以识别差异。

宿主之间的物理差异也会干扰jail迁移。假设一个主机使用接口 em0 用于jail,而新主机使用 ixgbe0 。在迁移的jail开始之前,必须触摸所有编码了接口名称的 ip4_addrip6_addr 参数。这就是为什么我建议在所有主机上为专用于jail的接口提供一个统一的标准名称。 jailether 的底层是什么设备驱动程序并不重要;迁移的jail可以通过名字找到它并使用它,而不需要你笨拙的手指改变任何东西。

假设您的jail有足够相似的默认值,您可以在主机之间透明地迁移jail。

导出 Jail

导出一个jail会将jail复制成一捆,以便运输和安装在另一个iocage主机上。

在使用 iocage export 命令导出之前,您必须关闭jail。在这里,数据库团队需要为主机 dba2 提供比其当前主机所能提供的更多的资源,因此我导出了jail:

这需要一段时间,具体取决于jail的大小和存储速度。所有导出的jail最终都会显示在 /iocage/images 中。导出的jail是thick jail;它们不再依赖于任何模板或版本。

导出会创建两个文件:一个以jail和当前日期命名,另一个是第一个文件的加密哈希。通过最佳可用方式将两者发送到目标主机。

导入 Jail

在导出的jail的新主机上,复制jail文件并验证导出文件在传输过程中没有损坏。在这里,我为文件生成一个加密哈希,并将其与源主机上生成的哈希进行比较。

哈希值一个在另一个之上,很容易比较。请注意,此检查不能防止故意渎职,只能防止意外损坏。如果入侵者可以在传输过程中替换jail的zip文件,他们也可以替换其中包含的sha256哈希文件。如果你真的多疑,可以将到达的jail的哈希值与原始主机上仍然存在的文件的哈希值进行比较。如果导出文件通过了严格的验证,则正确的jail会完好无损地到达,您现在可以导入它。请提供jail的名称或简短的UUID,而不是整个文件名。

jail现在将显示在iocage列表中,如果主机的iocage默认值没有太大差异,就可以启动。

迁移清理

不管你怎么想,导出的jail在导出后仍然留在主机上。导出jail不会释放原始主机上的任何磁盘空间,直到您将其销毁。销毁jail不会销毁导出文件。如果导出的jail设置为在系统启动时自动启动,它将与主机一起重新启动。确保你移除了部署在其他地方的jail。

导出的jail仍可供系统管理员使用。jail可能相当大,在网络中移动它们可能需要很长时间。您可以导出数据库jail,重新启动它,将导出发送到全国各地,安装它,然后在切换之前传输数据库。或者,导出可能是一个冷备份,你会让原来的jail继续运行。在迁移后销毁已停止的jail比在迁移失败后从备份中恢复jail要容易得多。

捆绑的jail比标准的jail tarball和 jail.conf 的片段更容易在网络中移动。

Iocage 插件

我们安装jail来运行和隔离软件集合。你可能有一个运行备份服务器、网络服务器、数据库服务器、Nethack等的jail。但有些软件经常被关进jail,以至于它的设置已经完全自动化了。iocage插件是jail的自动安装,包括运行服务的包和配置。虽然插件仍然是新的,但插件的数量正在迅速增加,质量也在提高。插件与Docker不同,但有相似之处。

使用 iocage fetch 获取当前插件信息。 -P 标志表示您正在处理插件,而 -R 则触发检查公共远程插件存储库。

这将显示当前插件,并在 /iocage/.plugin_index 中安装一个副本。去看看。虽然INDEX描述了可用的插件,但我发现最简单的方法就是查看文件名。每个文件代表一个插件。

有一个文件 plexmediaserver.json 。我一直想安装一个Plex服务器,看看有什么大惊小怪的。让我们试试看。运行 iocage fetch -P 获取插件。使用 -n 指定插件名称,并为jail分配一个有效的IP。

该插件将安装jail和所有必要的软件包,然后运行安装后脚本来配置jail。最后你会看到:

Plex现在安装在jail里。不过,我仍然需要为我的环境配置它。除了jail所需的服务外,没有其他服务被启用,所以如果你想要SSH或sudo或其他类似的服务,你需要设置它。

您可以通过下载插件定义文件并使用文件中定义的插件名称,在官方存储库之外使用插件。

虽然插件jail显示在iocage列表中,但只显示 iocage list -P 中的插件jail。

插件jail绝大多数由社区维护,因此其质量和完整性各不相同。不过,它们已经达到了临界质量,可用插件的数量也在不断增加。

插件允许您快速部署许多专门构建的jail。

不过,读完这本书后,你现在可以以任何方式、出于任何目的部署jail。祝你好运。