第6章 Satellite でのベアメタルホストの検出

Red Hat Satellite 6.5 には Discovery プラグインが同梱されています。Discovery プラグインを使用すると、プロビジョニングネットワーク上にある不明ホストで、自動的にベアメタルを検出できます。これらの新規ホストは Satellite Server に登録され、クライアントの Puppet エージェントは、Facter が収集するシステムのファクト (シリアル ID、ネットワークインターフェース、メモリー、ディスク情報など) をアップロードします。登録後、ホストは Satellite Web UI の 検出されたホスト ページに表示されます。事前に定義された検出ルールを使用して、プロビジョニングを手動 (Web UI、CLI、または API を使用) か、または自動で開始することができます。

Discovery プラグインは、プロビジョニングネットワークと Satellite Server インスタンスの両方に直接アクセスできる Satellite Capsule Server 経由で通信します。Satellite Server からホストを直接検出することができますが、Red Hat では以下の設定の使用を推奨しています。

Satellite Server (Satellite Server Discovery plug-in) <--> Satellite Capsule (Satellite Capsule Discovery plug-in) <--> Discovered Host (Satellite Discovery image)

Satellite Discovery プラグインは 3 つの異なるコンポーネントで構成されています。

Satellite Server Discovery プラグイン
これは Satellite Server で実行し、検出されたホストと使用できるように API および UI 機能を提供します。tfm-rubygem-foreman_discovery パッケージにはこのプラグインが含まれます。
The Satellite Capsule Server Discovery プラグイン
これは、プロビジョニングネットワークで検出されたホストと Satellite Server との間の通信プロキシーです。rubygem-smart_proxy_discovery パッケージにはこのプラグインが含まれます。
Satellite Discovery イメージ
これは、 Red Hat Enterprise Linux をベースとする最小オペレーティングシステムです。このオペレーティングシステムはホスト上で PXE で起動し、初期のハードウェア情報を取得し、Satellite Server にチェックインするために使用されます。検出されたホストは、Anaconda で再起動するまで Satellite Discovery イメージを実行し続けます。その後にプロビジョニングプロセスを開始します。foreman-discovery-image パッケージにはこのイメージが含まれます。これは TFTP サービスを提供する Satellite Capsule Server にインストールされる必要があります。

6.1. PXE ベースの検出に対するネットワーク設定

検出プロセスは PXE に基づいています。システムは、LAN または VLAN への 1 つの Ethernet 接続を使用して、ネットワークから起動できます。その他のすべてのネットワークインターフェース設定 (ボンディング、チーミング、ブリッジ、DSL、Wi-Fi など) はサポートされていません。

検出および PXE には、異なる LAN または VLAN が必要です。VLAN トランクを使用するようにシステムを設定することはできますが、プロビジョニング VLAN に正しい VLAN タグを持つプロビジョニングインターフェースも設定し、インストール後のスクリプトを使用して本番環境の VLAN へのタグを変更する必要があります。

検出したシステムが kexec を使用して、PXE 起動を完全に回避する Anaconda を使用して新しいカーネルをロードする 非 PXE モードで特別なネットワーク設定を使用することが技術的に可能であっても、検出イメージは現在このような設定を許可しません。検出の拡張やスクリプトを使用してネットワークの再設定は可能ですが、Satellite 6 検出プラグインは、このような設定では動作しません。

検出プロセスでは、ネットワークインターフェースを設定する可能性は現在制限されているため、そしてプロビジョニングインターフェースはプライマリーインターフェースでもあるため、設定を簡易にするには、プライマリーインターフェースと、本番環境で使用するインターフェースを分けます。Satellite 6 テンプレート機能は、必要に応じて、インターフェースを設定するインストール後のスクリプトをデプロイするのに使用できます。

6.2. Satellite Discovery プラグインの設定

以下のセクションでは、Satellite Discovery プラグインを設定する方法および Satellite Server で PXE 起動テンプレートを準備する方法について説明します。

6.2.1. Satellite Discovery イメージのデプロイ

Satellite Discovery イメージを含むパッケージを、TFTP サービスを提供する Satellite Capsule Server (Satellite Server 自体ではない) にインストールします。

# yum install foreman-discovery-image

このパッケージには、Linux カーネルと PXE で起動される検出されるホストに使用される起動可能な ISO ファイルとしての初期 RAM ディスクイメージが含まれます。以下のコマンドを実行してパッケージの内容を検査します。以下のような出力が生成されます。

$ rpm -ql foreman-discovery-image
/usr/share/foreman-discovery-image
/usr/share/foreman-discovery-image/fdi-image-rhel_7-2.1.0-20150212.1.iso

このパッケージのインストール時に、ISO ファイルのカーネルとイメージが TFTP ディレクトリーに抽出され、イメージおよびカーネルの最新バージョンへのシンボリックリンクが作成されます。PXE 起動のプロビジョニングテンプレートのシンボリックリンクを使用すると、foreman-discovery-image パッケージがアップグレードされるたびにテンプレートのバージョンを変更する必要がありません。以下は例になります。

$ find /var/lib/tftpboot/boot
/var/lib/tftpboot/boot
/var/lib/tftpboot/boot/fdi-image-rhel_7-2.1.0-20150212.1-img
/var/lib/tftpboot/boot/fdi-image-rhel_7-2.1.0-20150212.1-vmlinuz
/var/lib/tftpboot/boot/fdi-image-rhel_7-img
/var/lib/tftpboot/boot/fdi-image-rhel_7-vmlinuz
注記

現時点では、Red Hat Enterprise Linux 6 の Satellite 6 インストールの場合でも Red Hat Enterprise Linux 7 Discovery イメージのみが提供されます。foreman-discovery-image パッケージのアップグレード時に実行中の検出されたホストがある場合は、すぐにすべて再起動して更新されたバージョンのイメージをロードします。これは、Satellite 6 Web UI または CLI、API で実行できます。

6.2.2. PXE 起動の設定

不明のホストがプロビジョニングネットワークで起動する場合、Satellite Server は、ローカルハードドライブから起動するという 1 つのオプションを含む PXELinux ブートメニューを提供します。以下の手順では、ハードウェアの検出を有効にするために、Satellite に PXE テンプレートを構築します。

PXE-booting でホスト検出の設定

  1. Satellite Web UI で、ホスト > プロビジョニングテンプレート に移動します。
  2. プロビジョニングテンプレート ページの右上で、PXE デフォルトのビルド をクリックして OK をクリックします。

テンプレートは、すべての TFTP サーバーでデフォルトのテンプレートになります。プロビジョニングサブネットにある不明な新しいホストはすべてこの設定を使用し、Foreman Discovery Image をデフォルトとして使用します。

6.2.3. グローバル Discovery 設定の確認

Satellite Web UI で Discovery プラグインに関連するグローバル設定を確認できます。管理 > 設定 に移動して、Discovered タブを開きます。以下の設定に留意してください。

組織の検出、ロケーションの検出
これらの変数は、検出されたホストを配置する場所を指定します。デフォルトでは、検出されたホストは最初に作成された組織とロケーションの下に自動的に配置されます。
インターフェースのファクト
この変数は検出されたホストの MAC アドレスを判別するために使用される受信ファクトを指定します。デフォルトでは、PXELinux BOOTIF カーネルコマンドラインのオプションが使用されます。
ホスト名のファクト
この変数は、ホスト名に使用するファクトを一覧表示できます。ファクトはコンマで区切られ、最初のファクトが優先されます。
自動プロビジョニング
この変数は、指定したルールに従って自動プロビジョニングを有効にします。デフォルトでは false に設定されています。Red Hat は、自動プロビジョニングを有効にする前に手動プロビジョニングで行った設定をテストすることを推奨します。詳細は「検出されたホストのプロビジョニング」を参照してください。
再起動
この変数は、プロビジョニング時に PXE が検出したホストの自動再実行、もしくはローカルメディアから起動したホストに kexec を使用することを有効にします。デフォルトでは true に設定されています。
ホスト名の接頭辞
この変数は、ホスト名に使用するデフォルトの接頭辞を指定します。デフォルトでは "mac" に指定されます。この変数は文字で始める必要があります。
ファクトの列
この変数により、検出されたホストの一覧の追加列に Facter がレポートするファクトを追加できます。
強調表示したファクト
この変数は正規表現を使用して、強調表示したセクションにファクトを整理します。
ストレージのファクト
この変数は正規表現を使用して、ストレージセクションにファクトを整理します。
ハードウェアのファクト
この変数は正規表現を使用して、ハードウェアセクションにファクトを整理します。
ネットワークのファクト
この変数は正規表現を使用して、ネットワークセクションにファクトを整理します。
IPMI のファクト
この変数は正規表現を使用して、IPMI セクションにファクトを整理します。

6.3. Satellite Capsule Server Discovery プラグインの設定

foreman_url 設定が Satellite Capsule Server 設定ファイルにあることを確認します。設定は以下のように表示されます。

# grep foreman_url /etc/foreman-proxy/settings.yml
:foreman_url: https://satellite.example.com

satellite-installer コマンドはこの変数を自動的に設定しますが、Red Hat ではホストが正常に反応し、通信をブロックするファイアウォールのルールがないことを確認することを推奨します。

6.3.1. Discovery 用サブネットの設定

検出されたホストを持つすべてのサブネットが Satellite Server または Capsule Server に通信して、ホストを検出およびプロビジョニングできるように設定する必要があります。まず、Capsule を有効にして、サブネット用のテンプレートをプロビジョニングするプロキシーサーバーを提供できるようにする必要があります。サブネットのテンプレート Capsule は、TFTP Capsule として設定した Capsule と同じにする必要はありません。

新規サブネットを設定する場合には、『プロビジョニングガイド』「Satellite Server へのサブネットの追加」を参照してください。

テンプレート Capsule を有効化します。

Satellite の統合 Capsule と外部の Capsule Server を有効化して、以下のコマンドでテンプレートをプロビジョニングするプロキシーサーバーを提供します。

# satellite-installer --foreman-proxy-templates=1

Capsule Server がテンプレートのプロキシーサーバーを提供していることを確認します。

  1. インフラストラクチャー > Capsules (スマートプロキシー) に移動します。
  2. アクション メニューから 更新 を選択して、リストが最新であることを確認します。
  3. 機能 コラムで、「テンプレート」の用語を検索します。

TFTP Capsule、テンプレート Capsule、Discovery Capsule でサブネットを設定します。

  1. Satellite Web UI で、インフラストラクチャー > Capsule に移動します。
  2. 設定するサブネットを選択します。
  3. Capsules タブで、このサブネットに対して TFTP CapsuleTemplate Capsule および Discovery Capsule を選択します。

6.3.2. Discovery プラグインでの Hammer の使用

Discovery プラグインで hammer コマンドを使用するには、以下のように /etc/hammer/cli.modules.d/foreman_discovery.yml で Discovery プラグインを有効にする必要があります。

:foreman_discovery:
  :enable_module: true

hammer が使用するファイルおよびディレクトリーの詳細は、「hammer configuration directories」 を参照してください。

6.3.3. ユーザーの各種パーミッションの確認

最初の起動時に、Satellite Capsule Server Discovery プラグインは Discovery というロールを作成します。このロールを管理者以外のユーザーに割り当て、それらのユーザーが Discovery プラグインを使用できるようにします。または、perform_discovery パーミッションを既存ロールに割り当てることもできます。ロールおよびパーミッションの詳細は『Red Hat Satellite の管理』「ユーザーの作成および管理」を参照してください。

6.4. 検出されたホストのプロビジョニング

Satellite Server と Capsule Server の両方で Discovery プラグインを適切に設定すると、ベアメタルホストが自動的に検出できるようになります。これを行うには「PXE 起動の設定」の説明通りに、PXE 設定テンプレートで設定されたプロビジョニングネットワークでマシンを起動します。マシンは Satellite Server に自動的に登録され、Satellite Web UI の ホスト > 検出されたホストの一覧に表示されます。

検出されたホストは手動でプロビジョニングすることも、自動プロビジョニングを設定することもできます。

6.4.1. ホストの手動プロビジョニング

以下の手順では、Satellite Web UI で検出されたホストを手動でプロビジョニングする方法を説明します。

検出されたホストを手動でプロビジョニングする方法:

  1. ホスト > 検出されたホスト に移動します。
  2. プロビジョニングするホストを選択し、プロビジョニング をクリックします。
  3. ホストの 編集 ページに必要な詳細を入力し、保存 をクリックします。

ホスト設定の保存時に、Satellite は TFTP サーバーのホストの PXELinux ファイルを変更し、検出されたホストを再起動します。次に選択したオペレーティングシステムのインストーラーを起動し、最終的にはインストールしたオペレーティングシステムを起動します。

検出された既存ホストのプロビジョニングを再実行する場合は、マシンからオペレーティングシステムを削除して再起動します。その後ホストは 検出されたホスト ページに再度表示されます。

6.4.2. 検出されたホストの使用停止

Red Hat Satellite で特定のホストを管理する必要がなくなった場合は、ホストの使用を停止にして、検出されないようにする必要があります。

検出されたホストを使用停止にする方法:

  1. ホストをシャットダウンします。
  2. ホスト > 検出されたホスト に移動します。
  3. 名前 コラムで、使用を停止するホストを検出し、編集 ドロップダウンメニューから 削除 を選択します。

6.4.3. ホストの自動プロビジョニング

Satellite 6.5 では、プロビジョニングされたホストに、ホストグループを割り当ててプロビジョニングを自動的にトリガーするプロビジョニングルールを定義できます。

プロビジョニングルールを作成する方法:

  1. 設定 > 検出ルール に移動します。
  2. 新規ルール をクリックします。プロビジョニングルールの以下のパラメーターを指定します。

    • 名前 はルールの一覧に表示されるルールの名前です。この名前には、英数字以外の文字やスペースを使用することはできません。
    • 検索 は、特定のルールで検出されたホストを一致させる検索ステートメントです。スコープ指定の検索構文を使用してこれを定義できます。スコープ指定の検索例は「スコープ指定の検索構文」を参照してください。
    • ホストグループ は、プロビジョニングプロセスを開始する前に一致するホストに割り当てられるホストグループです。選択したホストグループには必要なパラメーターがすべて設定されていることを確認します。必要なパラメーターにはアスタリスク (*) のマークが付けられます。
    • ホスト は、人間の判読できるホスト名を、一致するホストに割り当てるパターンを定義します。これを空白のままにすると、割り当てられるホスト名はデフォルトで「macMACADDRESS」形式となります。プロビジョニングテンプレートに使用される構文と同じ構文が使用されます。詳細と例は「ホスト名のパターン」を参照してください。
    • ホストの制限 は、ルールに基づいてプロビジョニングされるホストの最大数です。制限に達すると、1 つ以上のホストが削除されるまでルールは有効になりません。通常のユースケースでは、ホスト名やホストグループなどのプロビジョニングパラメーターをエントリーごとに変更する必要がある場合に、サーバーラックまたは行ごとにルールを使用します。この値をゼロ (0) に設定すると制限なしに設定できます。
    • 優先度 は、ルールの実行順序を指定します。値はゼロ以上である必要があります。値が低いほど優先度が高くなります。2 つのルールの優先度が同じ場合には、最初に検出されるルールが適用されます。
    • 有効化 は、ルールを一時的に有効または無効にするオプションを提供します。
  3. 送信 をクリックしてルールを保存します。

デフォルトで、Satellite はホストの自動検出を有効にしません。以下の手順では、自動プロビジョニング変数を有効にし、指定されたルールに基づいて自動プロビジョニングを行う方法について説明します。

自動プロビジョニングを有効にする方法:

  1. Satellite Web UI で、管理 > 設定 > Discovered に移動します。
  2. 名前 コラムで自動プロビジョニングを探し、その値を true に設定します。
  3. 保存 をクリックします。

Red Hat は、ルールを定義した後に、ホストに対して 自動検出 ボタンを使用してホストを検出し、ルールを適用することを推奨します。これにより、グローバルオプションを有効にせずに自動プロビジョンがトリガーされます。

6.4.4. スコープ指定の検索構文

このセクションでは、選択したパラメーターに応じて検出されたホストにフィルターを設定するスコープ指定の検索構文を使用する方法を説明します。これは自動プロビジョニングのルールを作成する際に便利です (「ホストの自動プロビジョニング」 を参照)。

Satellite Web UI の検索フィールドは自動補完に対応しているため、検索構文の作成が容易になります。たとえば、ホスト > 検出したホスト ページで検索パターンをテストすることができます。以下は通常の検索クエリーの例になります。

  • facts.architecture = x86_64
  • facts.bios_vendor ~ 'Dell*'
  • facts.macaddress = "aa:bb:cc:dd:ee:ff"
  • facts.macaddress_eth0 = "aa:bb:cc:dd:ee:ff"
  • facts.ipaddress_eth1 ~ "192.168.*"
  • facts.architecture ^ (x86_64,i386)
注記

スコープ指定検索のキャレット記号 (^) は「in」(SQL と同じ用法) を意味し、正規表現に使用される「starts with」を意味しません。スコープ指定の検索演算子の完全一覧は https://github.com/wvanbergen/scoped_search/blob/master/lib/scoped_search/query_language/tokenizer.rb を参照してください。

Satellite 6.5 では、すべてのファクトは文字列のため、数値比較を実行することはできません。ただし、3 つの重要なファクトが抽出され、数字に変換されます。詳細は表6.1「数値比較を可能にするファクト」で説明されています。

表6.1 数値比較を可能にするファクト

検索パラメーター説明使用法の例

cpu_count

CPU の数

cpu_count >= 8

disk_count

割り当てられたディスクの数

disk_count < 10

disks_size

ディスク空き容量の合計 (MiB 単位)

disks_size > 1000000

6.4.5. ホスト名のパターン

本セクションでは、自動プロビジョニングのルールを作成する際に使用できるホスト名のパターンを一覧表示します (「ホストの自動プロビジョニング」を参照)。

ターゲットホスト名のテンプレートパターンには、プロビジョニングテンプレート (ERB) と同じ構文が使用されます。ドメインは自動的に追加されます。@host 属性のほかに、ランダムな整数の rand() 関数が利用できます。以下は例になります。

  • application-server-<%= rand(99999) %>
  • load-balancer-<%= @host.facts['bios_vendor'] + '-' + rand(99999) %>
  • wwwsrv-<%= @host.hostgroup.name %>
  • minion-<%= @host.discovery_rule.name %>
  • db-server-<%= @host.ip.gsub('.','-') + '-' + @host.hostgroup.subnet.name %>
重要

ホスト名のパターンを作成する際に、作成されるホスト名が固有の名前であることを確認してください。ホスト名は数字で始めることができません。Facter (MAC アドレス、BIOS、またはシリアル ID) で提供される固有情報を使用するのか、またはホスト名をランダム化することは適切な方法です。

6.4.6. コマンドラインでの Discovery プラグインの使用

hammer コマンドを使用して、検出に関連する特定のタスクを実行できます。hammer -h コマンドを実行して設定を確認します。

$ hammer -h | grep discovery
discovery                     Manipulate discovered hosts.
discovery_rule                Manipulate discovered rules.

hammer discovery -h コマンドを使用して利用可能なオプションを表示します。たとえば、以下のコマンドを使用して検出されるホストを再起動できます (以下は ID が 130 の場合)。

$ hammer discovery reboot -id 130
Host reboot started

6.5. Discovery イメージの拡張

カスタムファクト、ソフトウェア、またはデバイスドライバーを使って Satellite Discovery イメージを拡張することができます。イメージで使用できるように追加コードが含まれる圧縮されたアーカイブファイルを提供することもできます。

最初に、以下のディレクトリー構造を作成します。

.
├── autostart.d
│   └── 01_zip.sh
├── bin
│   └── ntpdate
├── facts
│   └── test.rb
└── lib
    ├── libcrypto.so.1.0.0
    └── ruby
        └── test.rb

ここで、

  • autostart.d ディレクトリーには、起動時にホストが Satellite に登録される前に、イメージによって POSIX の順序で実行するスクリプトが含まれています。
  • bin ディレクトリーは $PATH 変数に追加されます。ここにバイナリーファイルを配置すると、autostart スクリプトで使用できます。
  • facts ディレクトリーは FACTERLIB 変数に追加され、カスタムファクトを設定して Satellite に送信できるようになります。
  • lib ディレクトリーを LD_LIBRARY_PATH 変数に追加し、lib/ruby を RUBYLIB 変数に追加して、/bin のバイナリーファイルを正常に実行できるようにします。

新規ディレクティブおよびオプションが既存の環境変数 (PATH、LD_LIBRARY_PATH、RUBYLIB、および FACTERLIB) に追加されます。スクリプトの内容へのパスを明示的に指定する必要がある場合は、zip コンテンツがイメージ上の /opt/extension ディレクトリーに抽出されます。

上記のディレクトリー構造を作成した後に、これを以下のコマンドで zip アーカイブにパッケージ化します。

zip -r my_extension.zip .

複数の zip ファイルを作成できますが、これらは Discovery イメージの同じ場所に抽出されるため、ファイル名が同じ場合に後の zip のファイルが先のファイルを上書きします。

Discovery イメージで使用される拡張子が認識されるように、検出イメージと共に zip ファイルを TFTP サーバーに配置してから、PXELinux テンプレートの APPEND 行を、パスが TFTP ルートに相対する fdi.zips オプションで更新します。たとえば、 $TFTP/zip1.zip および $TFTP/boot/zip2.zip に 2 つのアーカイブがある場合は、以下の構文を使用します。

fdi.zips=zip1.zip,boot/zip2.zip

PXE テンプレートの更新方法は「PXE 起動の設定」を参照してください。

6.6. Satellite 検出のトラブルシューティング

マシンが、Satellite Web UI の ホスト > 検出されたホスト に表示されない場合は、以下の設定領域を調べてエラーを切り分けます。

  • ホスト > プロビジョニングテンプレート に移動し、PXE デフォルトのビルド ボタンを使用してデフォルトの PXELinux テンプレートを再デプロイします。
  • TFTP Capsule Server で pxelinux.cfg/default 設定ファイルを確認します。
  • ホスト、Capsule Server、および Satellite Server 間で適切なネットワーク接続があることを確認します。
  • 使用している PXELinux テンプレートに含まれている PXE 検出スニペットを確認します。スニペットの名前は pxelinux_discoverypxegrub_discovery、または pxegrub2_discovery です。PXE 検出スニペットの proxy.url オプションと proxy.type オプションを検証してください。
  • 検出されたノードで DNS が適切に機能していることを確認するか、使用している PXE Linux テンプレートにある PXE 検出スニペットの proxy.url オプションにある IP アドレスを使用します。
  • DHCP サーバーが IP アドレスを起動したイメージに適切に送信していることを確認します。
  • 検出されたホスト (または仮想マシン) に 1200 MB 以上のメモリーがあることを確認します。メモリーが 1200 MB より少なくなると、イメージがインメモリーで抽出される必要があるため、各種のカーネルパニックエラーがランダムに発生する可能性があります。

重要なシステムファクトを収集するには、discovery-debug コマンドを使用します。これにより、システムログ、ネットワーク設定、ファクトの一覧などの情報が 標準出力に出力されます。通常のユースケースでは、追加の調査のために、scp コマンドでこの出力をリダイレクトしてコピーします。

検出されたホストの最初の仮想コンソールは systemd ログのために予約されます。とくに役立つシステムログには以下のようにタグが付けられます。

  • discover-host: 初回ファクトのアップロード
  • foreman-discovery: ファクトの更新、リモート再起動のコマンド
  • nm-prepare: NetworkManager を事前に定義する起動スクリプト
  • NetworkManager: ネットワーク情報

TTY2 以上を使用して検出されたホストにログインします。root アカウントおよび SSH アクセスはデフォルトで無効にされますが、以下のカーネルコマンドラインのオプションを使って、デフォルト PXELinux テンプレートの APPEND 行で root パスワードを設定します。

fdi.ssh=1 fdi.rootpw=redhat