我可以在有或没有“Stateful”选项的 ZFS 池上对 LXC 进行快照。我找不到有关它的任何信息。这是什么意思?
答案1
应用程序(或服务等)可以有一个状态。这基本上就是应用程序所处的状况,通常是由于过去发生的事情造成的。
您可以区分有状态和无国籍者应用程序。在一个无国籍者应用程序,无需考虑应用程序的当前状态即可完成手头的任务。如果任务中断,只需重试即可。
让我们想象一个简单的 Web 服务器。您的浏览器请求文件welcome.html
,然后服务器传送该文件。为了执行此任务,服务器无需考虑之前谁请求了哪些文件、您是谁、您之前做过什么等等。如果 Web 服务器在向您发送文件的过程中关闭,您只需在服务器重新启动后再次请求该文件即可。
另一方面,有状态的可以说,过去很重要。任务的结果取决于任务启动时应用程序所处的状态。如果任务被中断,则需要以某种方式存储状态,并可能在下次尝试之前重新创建状态。
让我们想象一个更复杂的 Web 服务器:在请求文件之前,您必须登录。如果您未登录,服务器将不会向welcome.html
您提供文件。因此,当您的浏览器请求文件时,服务器需要考虑过去的情况。您是否登录过?如果登录过,您以哪个用户帐户登录?等等。如果 Web 服务器在向您发送文件的过程中关闭,它需要在下次尝试之前重新创建该状态,即过去的结果。
如果应用程序位于容器内,则类似的考虑也适用于容器。假设您将第一个简单的 Web 服务器容器化。在这种情况下,您不必考虑在哪里存储应用程序的状态、如何将状态包含在备份中、如何在恢复备份时恢复状态、如何在将容器转移到其他主机时转移状态等。您可能会说,该容器是无国籍者本身。
如果您将第二个更复杂的 Web 服务器容器化,则需要考虑其状态。您需要考虑有关存储、备份、恢复、传输等所有问题,以及容器中所有内容的状态。您可能会说,该容器是有状态的本身。
简而言之,有状态容器包含有状态的内容(应用程序、服务等)。容器及其上的操作需要考虑状态。无状态容器包含无状态的内容。容器及其上的操作不需要考虑状态。
答案2
LXD 中的状态快照需要启用 CRIU(LXD snap 包中默认未启用)。
状态快照的目的是拍摄实时容器的快照,然后在同一个 LXD 安装上恢复,或者更有趣的是恢复到远程 LXD 安装。