使用 LXMIN 备份 LXD 实例

LXD 是 Canonical Ltd. 为 Linux 系统开发的下一代系统容器和虚拟机管理器。LXD 允许您使用简单的命令行工具或 REST API 来管理您的容器。
LXMIN (lex-min) 是一款简单的 LXD 实例(容器或虚拟机)备份和恢复工具,它使用 MinIO 对象存储。它提供命令行工具和 REST API 用于备份和恢复实例。
使用 LXMIN,您可以轻松地将实例从一台主机备份和迁移到另一台主机。这使您可以将对 VM(和容器)配置的更改作为不可变副本持久保存到对象存储中,同时使用本地驱动器进行临时存储,从而确保良好的性能和可扩展性。
让我们试一试吧!
基本设置
您将需要
- 已安装的
lxmin
程序 - 从我们的发布页面获取 https://github.com/minio/lxmin/releases。请注意,这只是一个早期版本,在撰写本文时,只有候选版本可用。 - 访问 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/
存储桶需要在可以使用 lxmin
之前创建 - 使用从 这里 下载的 MinIO 客户端 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 实例并从备份中恢复它们。

就是这样!
REST 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 使用 curl
列出备份并发出备份请求到 LXMIN。由于服务器返回 JSON 输出,因此我们将其管道传输到 jq
以使其格式更美观。
该 API 提供与命令行相同的函数。

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