使用 LXMIN 备份 LXD 实例
LXD 是 Canonical Ltd. 的下一代 Linux 系统容器和虚拟机管理器。LXD 允许您使用简单的命令行工具或通过 REST API 管理容器。
LXMIN (lex-min) 是一个简单的备份和恢复工具,用于使用 MinIO 对象存储的 LXD 实例(容器或虚拟机)。它提供了一个命令行工具和一个 REST API 来备份和恢复实例。
使用 LXMIN,您可以轻松地将您的实例从一台主机备份和迁移到另一台主机。这使您可以将对 VM(和容器)配置的更改作为对象存储上的不可变副本持久保存,同时使用本地驱动器进行临时存储,确保良好的性能和可扩展性。
让我们试一试吧!
基本设置
你会需要:
安装的程序- 从我们的发布页面https://github.com/minio/lxmin/releases
lxmin获取它。请注意,这是一个早期的外观,在撰写本文时只有发布候选版本可用。访问 MinIO 安装 - 准备好服务器端点、存储桶和访问密钥。如果你在家里跟随,你可以使用这里的设置,因为他们使用公共MinIO Play服务器,或者下载 MinIO。
LXD 安装。
lxmin通过命令行标志和环境变量接受配置。这里我们将使用以下环境:
export LXMIN_ENDPOINT=https://play.minio.io:9000 export LXMIN_BUCKET=lxmin-backups export LXMIN_ACCESS_KEY=Q3AM3UQ867SPQQA43P2F export LXMIN_SECRET_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG export LXMIN_STAGING_ROOT=/tmp/
需要先创建存储桶,然后才能使用- 使用从此处下载的lxminMinIO 客户端创建它,运行:mc
mc mb play/lxmin-backups
上面配置的暂存目录是本地机器上的一个目录,备份数据在备份/恢复操作中被暂存。这是一个有足够磁盘空间用于备份的位置。
让我们启动几个 LXD 实例来试试lxmin:
lxc launch images:ubuntu/22.04 ubu --vm lxc launch images:alpine/3.13 alp
第一个是虚拟机,第二个是容器。
使用命令行
让我们备份这两个实例,删除它们并从备份中恢复它们。
对于备份,我们使用--optimized标志来打开 LXC 的优化存储格式——这将节省一些磁盘空间,并且仅支持 ZFS 和 BTRFS 存储后端。恢复实例时,目标 LXD 服务器需要使用相同的存储池后端。
除了实例映像之外,LXMIN 还备份与实例关联的配置文件。这确保在恢复过程中,如果目标 LXD 节点上不存在配置文件,则会首先创建它们。

备份完成后,我们可以列出它们:

现在,让我们清理 LXD 实例并从备份中恢复它们。

就是这样!
休息API
除了命令行界面,LXMIN 还包括一个用于远程管理备份的 REST API。此 API 使用双向 TLS 或 mTLS(即使用客户端 TLS 证书)进行身份验证。REST API 允许您以您选择的任何语言在 LXMIN 的功能之上构建。
对于此演示,我们将使用使用mkcert生成的自签名证书。该工具生成本地 CA 并将其添加到系统的信任库中。然后我们为本地主机 LXMIN 服务器生成一个证书和密钥对,并为客户端身份验证生成一个证书和密钥对:
mkcert -install mkcert example.org localhost 127.0.0.1 ::1 mkcert -client example.org localhost 127.0.0.1
现在我们可以将 LXMIN 配置为使用此证书对侦听端口 8000:
export LXMIN_ADDRESS=":8000" export LXMIN_NOTIFY_ENDPOINT="http://localhost:8080" export LXMIN_TLS_CERT="c/example.org+3.pem" export LXMIN_TLS_KEY="c/example.org+3-key.pem"
在备份和恢复操作中,LXMIN 在操作完成时向给定端点发送通知。
要与服务器交互,任何 HTTPS 客户端都可以与先前生成的客户端证书一起使用。
在这里,我们展示了如何列出备份并通过 REST API 向 LXMIN 发出备份请求curl。由于服务器返回 JSON 输出,我们通过管道jq将其格式化。
API 提供与命令行相同的功能。

结论
我们快速了解了即将推出的 LXMIN 工具,以及它如何让您以相同的方式轻松管理 VM 和容器的备份。作为一个除了静态编译的二进制文件之外没有任何依赖的轻量级工具,它提供了一种方便的方法来管理对象存储上的备份。