使用 LXMIN 备份 LXD 实例

Backing up LXD Instances with LXMIN

LXD 是 Canonical Ltd. 为 Linux 系统开发的下一代系统容器和虚拟机管理器。LXD 允许您使用简单的命令行工具或 REST API 来管理您的容器。

LXMIN (lex-min) 是一款简单的 LXD 实例(容器或虚拟机)备份和恢复工具,它使用 MinIO 对象存储。它提供命令行工具和 REST API 用于备份和恢复实例。

使用 LXMIN,您可以轻松地将实例从一台主机备份和迁移到另一台主机。这使您可以将对 VM(和容器)配置的更改作为不可变副本持久保存到对象存储中,同时使用本地驱动器进行临时存储,从而确保良好的性能和可扩展性。

让我们试一试吧!

基本设置

您将需要

  1. 已安装的 lxmin 程序 - 从我们的发布页面获取 https://github.com/minio/lxmin/releases。请注意,这只是一个早期版本,在撰写本文时,只有候选版本可用。
  2. 访问 MinIO 安装 - 准备好服务器端点、存储桶和访问密钥。如果您在家中操作,可以使用此处的设置,因为它们使用了公共的 MinIO Play 服务器,或 下载 MinIO
  3. 一个 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 和容器的备份。作为一款轻量级的工具,除了静态编译的二进制文件之外没有任何依赖项,它提供了一种方便的方式来管理您在对象存储上的备份。