如何将LXD VM移动/迁移到Linux上的另一个主机

时间:2020-01-09 10:39:32  来源:igfitidea点击:

如何在由Ubuntu Linux或Fedora Linux驱动的两个Linux节点之间迁移LXD VM /容器?
有两种方法可以在两个节点之间迁移LXD VM。

推荐使用方法2。它更加优雅,也支持实时迁移。

如何将LXD VM移动/迁移到Linux上的另一个主机

我将在本教程中演示两种不同的方法。

方法1:使用ssh进行备份和还原

首先,您需要备份/var/lib/lxd包括存储池。
接下来,您需要将备份副本复制到/var/lib/lxd /中的远程LXD实例,包括存储池。

要查看server1上的vms列表,请执行:

$ lxc list

输出示例:

+-----------------+---------+---------------------+------+------------+-----------+
|      NAME       |  STATE  |        IPV4         | IPV6 |    TYPE    | SNAPSHOTS |
+-----------------+---------+---------------------+------+------------+-----------+
| newsletter      | RUNNING | 10.105.28.45 (eth0) |      | PERSISTENT | 0         |
+-----------------+---------+---------------------+------+------------+-----------+
| www-vm          | RUNNING | 10.105.28.42 (eth0) |      | PERSISTENT | 0         |
+-----------------+---------+---------------------+------+------------+-----------+

我将假设您使用DIR作为备份存储池。

步骤1在server1上创建www-vm的备份

输入以下tar命令:

$ sudo tar -zcvf /root/www-vm.tar.gz /var/lib/lxd/storage-pools/default/containers/www-vm/

步骤2将www-vm-tar.gz从server1复制到server2

执行以下scp命令/rsync命令:

$ sudo scp /root/www-vm.tar.gz root@server2:/root/

或者

$ sudo rsync -v /root/www-vm.tar.gz root@server2:/root/

步骤3在server2上还原名为www-vm-tar.gz的备份文件

在/var/lib/lxd/storage-pools/default/containers /目录中,执行以下tar命令解压缩名为www-vm.tar.gz的tar包:

$ sudo -i
# cd /var/lib/lxd/storage-pools/default/containers/
# tar -zxvf /root/www-vm-tar.gz

最后,使用ln命令创建一个软链接,运行:

# cd /var/lib/lxd/containers/
# ln -s /var/lib/lxd/storage-pools/default/containers/www-vm/

步骤4在server2上还原并导入容器

LXD在每个容器存储卷中维护一个backup.yaml文件。
使用它来恢复或还原给定的容器,例如容器配置,连接的设备和存储。
可以通过以下命令处理此文件:

# lxd import {containerNameHere}
# lxd import www-vm

步骤5在server2上启动导入的容器

执行以下命令:

$ lxc list
$ lxc start www-vm
$ lxc list
$ lxc exec www-vm bash

方法2:使用LXD API和Simplestreams进行LXD VM容器迁移

这是我使用LXD API和Simplestreams协议进行迁移的示例设置:
使用LXD API从本地到远程主机和容器迁移

同样,您需要两个配置了LXD的服务器。
您将在本地计算机上调用server1,将在远程服务器上调用server2。

步骤1配置名为server2的远程服务器

执行以下命令以启用通过API的远程访问题描述:

$ lxc config set core.https_address 192.168.1.6:8443

设置server2 lxd守护程序的密码:

$ lxc config set core.trust_password PASSWORDhere

在此处用实际密码替换PASSWORD。
您需要在下面的步骤2中使用相同的命令。
您必须在Ubuntu Linux上使用ufw防火墙打开端口8443,运行:

$ sudo ufw allow from 192.168.1.5 to 192.168.1.6 port 8443 proto tcp comment 'Allow lxd client to talk to lxd-server'

步骤2配置名为server1的本地服务器

在server1上执行以下命令以添加server2:

$ lxc remote add server2 192.168.1.6

输出示例:

Certificate fingerprint: f4fb0a34a61498d79726079bc...
ok (y/n)? y
Admin password for server2: PASSWORDhere
Client certificate stored at server:  server2

您可以列出您的遥控器,然后将看到server2列出如下:

$ lxc remote list

输出示例:

+-----------------+------------------------------------------+---------------+--------+--------+
|      NAME       |                   URL                    |   PROTOCOL    | PUBLIC | STATIC |
+-----------------+------------------------------------------+---------------+--------+--------+
| server2         | https://192.168.1.6:8443                 | lxd           | NO     | NO     |
+-----------------+------------------------------------------+---------------+--------+--------+
| images          | https://images.linuxcontainers.org       | simplestreams | YES    | NO     |
+-----------------+------------------------------------------+---------------+--------+--------+
| local (default) | unix://                                  | lxd           | NO     | YES    |
+-----------------+------------------------------------------+---------------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | simplestreams | YES    | YES    |
+-----------------+------------------------------------------+---------------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | simplestreams | YES    | YES    |
+-----------------+------------------------------------------+---------------+--------+--------+

您必须允许两个服务器之间的通信。
还要打开server1上的端口8443:

$ sudo ufw allow from 192.168.1.6 to 192.168.1.5 port 8443 proto tcp comment 'Allow lxd server2 client to talk to server1 lxd-server'

步骤3将名为www-vm的容器从server1复制到server2

首先通过运行以下命令创建快照(第一个快照将命名为snap0,依此类推)。
以下要求首先停止www-vm,但我将复制快照,并在源容器运行时执行以下操作:

$ lxc snapshot www-vm
$ lxc info www-vm
$ lxc copy www-vm/snap0 server2:www-vm --verbose

输出示例:

INFO[08-15|20:03:32] Connecting to a local LXD over a Unix socket 
INFO[08-15|20:03:32] Sending request to LXD                   etag= method=GET url=http://unix.socket/1.0
INFO[08-15|20:03:32] Connecting to a remote LXD over HTTPs 
INFO[08-15|20:03:32] Sending request to LXD                   etag= method=GET url=https://192.168.1.6:8443/1.0
INFO[08-15|20:03:33] Sending request to LXD                   etag= method=GET url=http://unix.socket/1.0/containers/www-vm/snapshots/snap0
INFO[08-15|20:03:33] Sending request to LXD                   etag= method=POST url=http://unix.socket/1.0/containers/www-vm/snapshots/snap0
INFO[08-15|20:03:33] Sending request to LXD                   etag= method=POST url=https://192.168.1.6:8443/1.0/containers
INFO[08-15|20:03:33] Sending request to LXD                   etag= method=GET url=https://192.168.1.6:8443/1.0/operations/f4df846e-d7ca-4c15-a429-6d1256180a84
Transferring container: www-vm: 341.40MB (56.87MB/s)

步骤4在server2上启动名为www-vm的容器

在server1上执行以下命令:

$ lxc list server2:
$ lxc start server2:www-vm
$ lxc list cbz02:
$ lxc exec server2:www-vm bash