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

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 の完全な例を見るには展開してください
user@host:~$ lxd init
Would you like to use LXD clustering? (yes/no) [default=no]: yesWhat 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]: noWhat member name should be used to identify this server in the cluster? [default=server1]:Setup password authentication on the cluster? (yes/no) [default=no]: noDo 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 を実行する完全な例を見るには展開してください
user@host:~$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]: yesWhat 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]: yesDo you have a join token? (yes/no/[token]) [default=no]: yesPlease provide join token: eyJzZXJ2ZXJfbmFtZSI6InJwaTAxIiwiZmluZ2VycHJpbnQiOiIyNjZjZmExZDk0ZDZiMjk2Nzk0YjU0YzJlYzdjOTMwNDA5ZjIzNjdmNmM1YjRhZWVjOGM0YjAxYTc2NjU0MjgxIiwiYWRkcmVzc2VzIjpbIjE3Mi4xNy4zMC4xODM6ODQ0MyJdLCJzZWNyZXQiOiJmZGI1OTgyNjgxNTQ2ZGQyNGE2ZGE0Mzg5MTUyOGM1ZGUxNWNmYmQ5M2M3OTU3ODNkNGI5OGU4MTQ4MWMzNmUwIn0=All existing data is lost when joining a cluster, continue? (yes/no) [default=no] yesChoose "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自体はネットワークとクラスタ内で使用するのに適したストレージが設定された状態になります。