クラスタを形成するには#

LXD クラスタを形成するときはブートストラップサーバから始めます。 このブートストラップサーバは既存の LXD サーバでもよいですし新しくインストールしたものでもよいです。

ブートストラップサーバを初期化した後、クラスタに追加のサーバをジョインできます。 詳細は クラスタメンバー を参照してください。

LXD クラスタを形成するために初期化プロセス中に設定をインタラクティブに指定することもできますし、完全な設定を含むプリシードファイルを使うこともできます。

素早く自動的にベーシックなLXDクラスタをセットアップするにはMicroCloudが使えます。 ただし、このプロジェクトはまだ初期段階なことに注意してください。

クラスタをインタラクティブに設定する#

クラスタを形成するには、まずブートストラップサーバ上で lxd init を実行する必要があります。その後クラスタにジョインさせたい他のサーバ上でもそのコマンドを実行します。

クラスタをインタラクティブに形成する際、クラスタを設定するために lxd init のプロンプトの質問に回答します。

ブートストラップサーバを初期化する#

ブートストラップサーバを初期化するには、 lxd init を実行して希望の設定に応じて質問に回答します。

ほとんどの質問はデフォルト値を受け入れることができますが、以下の質問には適切に答えるようにしてください。

  • Would you like to use LXD clustering?

    yes を選択。

  • What IP address or DNS name should be used to reach this server?

    他のサーバがアクセスできる IP または DNS のアドレスを確実に使用してください。

  • Are you joining an existing cluster?

    no を選択。

  • Setup password authentication on the cluster?

    認証トークン (推奨) を使う場合 no を、トラストパスワード を使う場合 yes を選択。

ブートストラップ上での lxd init の完全な例を見るには展開してください
Would you like to use LXD clustering? (yes/no) [default=no]: yes
What IP address or DNS name should be used to reach this server? [default=192.0.2.101]:
Are you joining an existing cluster? (yes/no) [default=no]: no
What member name should be used to identify this server in the cluster? [default=server1]:
Setup password authentication on the cluster? (yes/no) [default=no]: no
Do you want to configure a new local storage pool? (yes/no) [default=yes]:
Name of the storage backend to use (btrfs, dir, lvm, zfs) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
Size in GiB of the new loop device (1GiB minimum) [default=9GiB]:
Do you want to configure a new remote storage pool? (yes/no) [default=no]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]:
Would you like to create a new Fan overlay network? (yes/no) [default=yes]:
What subnet should be used as the Fan underlay? [default=auto]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

初期化プロセスが終了したら、最初のクラスタメンバーが起動してネットワーク上で利用可能になるはずです。 これは lxc cluster list で確認できます。

追加のサーバをジョインさせる#

これでクラスタに追加のサーバをジョインできるようになりました。

注釈

追加するサーバは新規にインストールした LXD サーバにしたほうがよいです。 既存のサーバを使う場合、既存のデータは消失するので、ジョインする前にデータを確実にクリアしてください。

クラスタにサーバをジョインさせるには、クラスタ上で lxd init を実行します。 既存のクラスタにジョインするには root 権限が必要ですので、コマンドを root で実行するか sudo をつけて実行するのを忘れないでください。

基本的に、初期化プロセスは以下のステップからなります。

  1. 既存のクラスタにジョインをリクエストする。

    lxd init の最初の質問に適切に回答します。

    • Would you like to use LXD clustering?

      yes を選択。

    • What IP address or DNS name should be used to reach this server?

      他のサーバがアクセスできる IP または DNS のアドレスを確実に使用してください。

    • Are you joining an existing cluster?

      yes を選択。

    • Do you have a join token?

      ブートストラップサーバを 認証トークン (推奨) を使うように設定した場合 yes を、トラストパスワード を使うように設定した場合 no を選択。

  2. クラスタで認証する。

    ブートスラップサーバを設定する際に選んだ認証方法に応じて2 つの方法があります。

    認証トークン を使うようにクラスタを設定した場合、新メンバーごとにジョイントークンを生成する必要があります。 そのためには、既存のクラスタメンバー (例えばブートストラップサーバ) で以下のコマンドを実行します。

    lxc cluster add <new_member_name>
    

    このコマンドは設定時に有効な(cluster.join_token_expiry参照)一回限りのジョイントークンを返します。 lxd init のプロンプトでジョイントークンを求められたときにこのトークンを入力してください。

    ジョイントークンは既存のオンラインメンバーのアドレス、一回限りのシークレットとクラスタ証明書のフィンガープリントを含みます。 ジョイントークンがこれらの質問に自動で回答できるので、 lxd init 中に回答が必要な質問の量を減らすことができます。

  3. クラスタにジョインする際サーバの全てのローカルデータが消失することを確認します。

  4. サーバ固有の設定を行います (詳細は メンバー設定 を参照)。

    デフォルト値を受け入れることもできますし、各サーバにカスタム値を指定することもできます。

追加のサーバ上で lxd init を実行する完全な例を見るには展開してください
Would you like to use LXD clustering? (yes/no) [default=no]: yes
What IP address or DNS name should be used to reach this server? [default=192.0.2.102]:
Are you joining an existing cluster? (yes/no) [default=no]: yes
Do you have a join token? (yes/no/[token]) [default=no]: yes
Please provide join token: eyJzZXJ2ZXJfbmFtZSI6InJwaTAxIiwiZmluZ2VycHJpbnQiOiIyNjZjZmExZDk0ZDZiMjk2Nzk0YjU0YzJlYzdjOTMwNDA5ZjIzNjdmNmM1YjRhZWVjOGM0YjAxYTc2NjU0MjgxIiwiYWRkcmVzc2VzIjpbIjE3Mi4xNy4zMC4xODM6ODQ0MyJdLCJzZWNyZXQiOiJmZGI1OTgyNjgxNTQ2ZGQyNGE2ZGE0Mzg5MTUyOGM1ZGUxNWNmYmQ5M2M3OTU3ODNkNGI5OGU4MTQ4MWMzNmUwIn0=
All existing data is lost when joining a cluster, continue? (yes/no) [default=no] yes
Choose "size" property for storage pool "local":
Choose "source" property for storage pool "local":
Choose "zfs.pool_name" property for storage pool "local":
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

初期化プロセスが終わった後、サーバが新しいクラスタメンバーとして追加されます。 これは lxc cluster list で確認できます。

クラスタをプリシードファイルで設定する#

クラスタを形成するには、まずブートストラップサーバ上で lxd init を実行します。 その後、クラスタにジョインさせたい他のサーバでもこのコマンドを実行します。

lxd init の質問にインタラクティブに回答する代わりに、プリシードファイルを使って必要な情報を提供できます。 以下のコマンドを使って lxd init にファイルをフィードできます。

cat <preseed-file> | lxd 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
networks:
- name: lxdbr0
  type: bridge
profiles:
- name: default
  devices:
    root:
      path: /
      pool: default
      type: disk
    eth0:
      name: eth0
      nictype: bridged
      parent: lxdbr0
      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: ""

MicroCloudを使う#

LXDクラスタを手動でセットアップする代わりに、MicroCloudを使ってすぐに使えるLXDクラスタとCephストレージの環境を作ることができます。

これに必要なsnapパッケージをインストールするには、以下のコマンドを実行します。

snap install lxd microceph microcloud

次に以下のコマンドでブートストラッププロセスを開始します。

microcloud init

初期化の行程中に、MicroCloudは他のサーバを検出、クラスタをセットアップし、Cephに追加するディスクを尋ねるプロンプトを表示します。

初期化が完了したら、CephとLXDクラスタの両方が作られ、LXD自体はネットワークとクラスタ内で使用するのに適したストレージが設定された状態になります。