如何组建集群

组建 Incus 集群时,您需要从引导服务器开始。此引导服务器可以是现有 Incus 服务器,也可以是新安装的服务器。

初始化引导服务器后,您可以将其他服务器加入集群。有关更多信息,请参阅 集群成员

您可以通过在初始化过程中提供配置信息或使用包含完整配置的预播文件来交互式地组建 Incus 集群。

交互式配置集群

要组建集群,您必须首先在引导服务器上运行 incus admin init。之后,在您要加入集群的其他服务器上运行它。

交互式组建集群时,您需要回答 incus admin init 提示您进行集群配置的问题。

初始化引导服务器

要初始化引导服务器,请运行 incus admin init 并根据您的所需配置回答问题。

对于大多数问题,您可以接受默认值,但请确保根据需要回答以下问题

  • 您是否要使用 Incus 集群?

    选择 **是**。

  • 要使用什么 IP 地址或 DNS 名称访问此服务器?

    请确保使用其他服务器可以访问的 IP 或 DNS 地址。

  • 您是否要加入现有集群?

    选择 **否**。

展开查看引导服务器上 incus admin init 的完整示例
user@host:~$ incus admin init
使用 Incus 集群 吗? (yes/no) [default=no]: yes 使用 哪个 IP 地址 DNS 名称 访问 服务器? [default=192.0.2.101]: 是在 加入 一个 现有 集群 吗? (yes/no) [default=no]: no 集群 什么 成员 名称 识别 服务器? [default=server1]: 配置 一个 新的 本地 存储 吗? (yes/no) [default=yes]: 使用 哪个 存储 后端 名称 (btrfs, dir, lvm, zfs) [default=zfs]: 创建一个 新的 ZFS 吗? (yes/no) [default=yes]: 使用 一个 现有 设备 (例如 磁盘 分区) 吗? (yes/no) [default=no]: 循环 设备 的大小 (GiB) (最小 1GiB) [default=9GiB]: 配置 一个 新的 远程 存储 吗? (yes/no) [default=no]: 配置 Incus 使用 一个 现有 桥接 主机 接口 吗? (yes/no) [default=no]: 希望 过时 缓存 映像 自动 更新 吗? (yes/no) [default=yes]: 想要 打印 一个 YAML "incus admin init" 预设 吗? (yes/no) [default=no]:

初始化过程完成后,您的第一个集群成员应该已经启动并在网络上可用。您可以使用 incus cluster list 检查这一点。

将现有服务器转换为引导服务器

如果您打算将现有具有实例的 Incus 服务器转换为新集群的引导服务器,则需要使用稍微不同的步骤。

首先,确保 core.https_address(或 cluster.https_address)已使用 incus config set core.https_address [IP_OR_DNS]:8443 配置为特定 IP 或 DNS 地址。集群模式下不能使用默认通配符值。

然后,您可以运行 incus cluster enable memberName 并继续执行以下步骤以加入其他集群成员。

加入其他服务器

现在,您可以将更多服务器加入到集群中。

注意

您添加的服务器应该是新安装的 Incus 服务器。如果您使用的是现有服务器,请确保在加入之前清除其内容,因为它们上任何现有数据都将丢失。

要将服务器加入集群,请在集群上运行 incus admin init。加入现有集群需要 root 权限,因此请确保以 root 身份运行该命令或使用 sudo

基本上,初始化过程包括以下步骤

  1. 请求加入现有集群。

    根据 incus admin init 提出的问题相应地回答。

    • 您是否要使用 Incus 集群?

      选择 **是**。

    • 要使用什么 IP 地址或 DNS 名称访问此服务器?

      请确保使用其他服务器可以访问的 IP 或 DNS 地址。

    • 您是否要加入现有集群?

      选择 **是**。

  2. 对集群进行身份验证。

    根据您在配置引导服务器时选择的身份验证方法,有两种替代方法。

    如果您将集群配置为使用 身份验证令牌,则必须为每个新成员生成一个加入令牌。为此,请在现有集群成员(例如引导服务器)上运行以下命令

    incus cluster add <new_member_name>
    

    该命令返回一个一次性加入令牌,该令牌在可配置的时间内有效(请参阅 cluster.join_token_expiry)。当 incus admin init 提示您输入加入令牌时,请输入此令牌。

    加入令牌包含现有在线成员的地址,以及一次性密钥和集群证书的指纹。这减少了您在 incus admin init 期间必须回答的问题数量,因为加入令牌可用于自动回答这些问题。

  3. 确认加入集群时将丢失服务器的所有本地数据。

  4. 配置服务器特定设置(有关更多信息,请参阅 成员配置)。

    您可以接受默认值,也可以为每个服务器指定自定义值。

展开以查看在其他服务器上使用 incus admin init 的完整示例
user@host:~$ sudo incus admin init
使用 Incus 集群 吗? (yes/no) [默认值=no]: yes 使用 哪个 IP 地址 DNS 名称 访问 服务器? [默认值=192.0.2.102]: 加入 现有 集群 吗? (yes/no) [默认值=no]: yes 加入 令牌 吗? (yes/no/[令牌]) [默认值=no]: yes 提供 加入 令牌: eyJzZXJ2ZXJfbmFtZSI6InJwaTAxIiwiZmluZ2VycHJpbnQiOiIyNjZjZmExZDk0ZDZiMjk2Nzk0YjU0YzJlYzdjOTMwNDA5ZjIzNjdmNmM1YjRhZWVjOGM0YjAxYTc2NjU0MjgxIiwiYWRkcmVzc2VzIjpbIjE3Mi4xNy4zMC4xODM6ODQ0MyJdLCJzZWNyZXQiOiJmZGI1OTgyNjgxNTQ2ZGQyNGE2ZGE0Mzg5MTUyOGM1ZGUxNWNmYmQ5M2M3OTU3ODNkNGI5OGU4MTQ4MWMzNmUwIn0=加入 集群 所有 现有 数据 丢失, 继续 吗? (yes/no) [默认值=no] yes 存储 "local" 选择 "size" 属性: 存储 "local" 选择 "source" 属性: 存储 "local" 选择 "zfs.pool_name" 属性: 打印 一个 YAML "incus admin init" 预安装 吗? (yes/no) [默认值=no]:

初始化过程完成后,您的服务器将作为新的集群成员添加。您可以使用 incus cluster list 检查这一点。

通过预安装文件配置集群

要组建集群,您必须首先在引导服务器上运行 incus admin init。之后,在您要加入集群的其他服务器上运行它。

您可以通过预安装文件提供所需信息,而不是交互式地回答 incus admin init 的问题。您可以使用以下命令将文件提供给 incus admin init

cat <preseed-file> | incus admin init --preseed

您需要为每台服务器准备不同的预安装文件。

初始化引导服务器

为了启用集群,引导服务器的预安装文件必须包含以下字段

config:
  core.https_address: <IP_address_and_port>
cluster:
  server_name: <server_name>
  enabled: true

以下是以引导服务器为例的预安装文件

config:
  core.https_address: 192.0.2.101:8443
  images.auto_update_interval: 15
storage_pools:
- name: default
  driver: dir
- name: my-pool
  driver: zfs
networks:
- name: incusbr0
  type: bridge
profiles:
- name: default
  devices:
    root:
      path: /
      pool: my-pool
      type: disk
    eth0:
      name: eth0
      nictype: bridged
      parent: incusbr0
      type: nic
cluster:
  server_name: server1
  enabled: true

加入其他服务器

新集群成员的预安装文件只需要一个 cluster 部分,其中包含特定于加入服务器的数据和配置值。

其他服务器的预安装文件必须包含以下字段

cluster:
  enabled: true
  server_address: <IP_address_of_server>
  cluster_token: <join_token>

以下是以新集群成员为例的预安装文件

cluster:
  enabled: true
  server_address: 192.0.2.102:8443
  cluster_token: eyJzZXJ2ZXJfbmFtZSI6Im5vZGUyIiwiZmluZ2VycHJpbnQiOiJjZjlmNmVhMWIzYjhiNjgxNzQ1YTY1NTY2YjM3ZGUwOTUzNjRmM2MxMDAwMGNjZWQyOTk5NDU5YzY2MGIxNWQ4IiwiYWRkcmVzc2VzIjpbIjE3Mi4xNy4zMC4xODM6ODQ0MyJdLCJzZWNyZXQiOiIxNGJmY2EzMDhkOTNhY2E3MGJmYThkMzE0NWM4NWY3YmE0ZmU1YmYyNmJiNDhmMmUwNzhhOGZhMDczZDc0YTFiIn0=
  member_config:
  - entity: storage-pool
    name: default
    key: source
    value: ""
  - entity: storage-pool
    name: my-pool
    key: source
    value: ""
  - entity: storage-pool
    name: my-pool
    key: driver
    value: "zfs"