第3章 オーバークラウドイメージ
Red Hat OpenStack Platform director は、オーバークラウドのイメージを提供します。このコレクションの QCOW イメージには、ベースのソフトウェアコンポーネントが含まれており、これらを統合してコンピュート、コントローラー、ストレージノードなどさまざまなオーバークラウドのロールを形成します。場合によっては、追加のコンポーネントをノードにインストールするなど、ニーズにあわせてオーバークラウドイメージの特定の機能を変更することもできます。
本ガイドでは、virt-customize ツールを使用して既存のコントローラーノードを増強するために既存のオーバークラウドイメージを変更する各種アクションについて説明します。たとえば、以下の手順を使用して、初期イメージには装備されていない ml2 プラグイン、Cinder バックエンド、監視エージェントを追加でインストールすることができます。
サードパーティー製のソフトウェアを追加するために変更を加えたオーバークラウドのイメージを使用中に発生した問題を Red Hat に報告する場合には、弊社の一般サードパーティーサポートポリシー (https://access.redhat.com/ja/articles/1409973) に従って、変更を加えていないイメージを使用した状態で問題を再現するように依頼する場合があります。
3.1. オーバークラウドイメージの取得
director では、オーバークラウドのノードをプロビジョニングする際に、複数のディスクが必要です。必要なディスクは以下のとおりです。
- イントロスペクションカーネルおよび ramdisk: PXE ブートでのベアメタルシステムのイントロスペクションに使用
- デプロイメントカーネルおよび ramdisk: システムのプロビジョニングおよびデプロイメントに使用
- オーバークラウドカーネル、ramdisk、完全なイメージ: ノードのハードディスクに書き込まれるベースのオーバークラウドシステム
rhosp-director-images
および rhosp-director-images-ipa
パッケージからこれらのイメージを取得します。
$ sudo yum install rhosp-director-images rhosp-director-images-ipa
stack
ユーザーのホーム (/home/stack/images
) の images
ディレクトリーにアーカイブを展開します。
$ cd ~/images $ for i in /usr/share/rhosp-director-images/overcloud-full-latest-9.0.tar /usr/share/rhosp-director-images/ironic-python-agent-latest-9.0.tar; do tar -xvf $i; done
3.2. Initrd: 最初の Ramdisk の変更
場合によっては、内部の ramdisk を変更する必要がある可能性があります。たとえば、イントロスペクションまたはプロビジョニングプロセス中にノードをブートする際には、特定のドライバーを利用できるようにする必要がある場合があります。以下の手順では、最初の ramdisk を変更する方法を記載しています。オーバークラウドにおいては、これには以下のいずれかが含まれます。
-
イントロスペクション ramdisk:
ironic-python-agent.initramfs
-
プロビジョニング ramdisk:
overcloud-full.initrd
以下の手順では、例として ironic-python-agent.initramfs
ramdisk に追加の RPM パッケージを追加します。
stack
ユーザーとしてログインして、ramdisk の一時ディレクトリーを作成します。
$ mkdir ipa-tmp $ cd ipa-tmp
skipcpio
と 「cpio」コマンドを使用して、一時ディレクトリーに ramdisk を展開します。
$ /usr/lib/dracut/skipcpio ~/images/ironic-python-agent.initramfs | zcat | cpio -ivd | pax -r
展開したコンテンツに RPM パッケージをインストールします。
$ rpm2cpio ~/RPMs/python-proliantutils-2.1.7-1.el7ost.noarch.rpm | pax -r
新規の ramdisk を再作成します。
$ find . 2>/dev/null | cpio --quiet -c -o | gzip -8 > ~/images/ironic-python-agent.initramfs
ramdisk に新しいパッケージが存在することを確認します。
$ lsinitrd ~/images/ironic-python-agent.initramfs | grep proliant
3.3. QCOW: director への virt-customize のインストール
libguestfs-tools パッケージには virt-customize ツールが含まれます。rhel-7-server-rpms リポジトリーから libguestfs-tools をインストールします。
$ sudo yum install libguestfs-tools
3.4. QCOW: オーバークラウドイメージの検査
overcloud-full.qcow2 のコンテンツを検査する必要がある場合があります。qemu-system-x86_64 コマンドを使用して仮想マシンインスタンスを作成します。
$ sudo qemu-system-x86_64 --kernel overcloud-full.vmlinuz --initrd overcloud-full.initrd -m 1024 --append root=/dev/sda --enable-kvm overcloud-full.qcow2
または、virt-manager で以下のブートオプションを使用します。
- カーネルのパス: /overcloud-full.vmlinuz
- initrd のパス: /overcloud-full.initrd
- Kernel の引数: root=/dev/sda
3.5. QCOW: root パスワードの設定
イメージで root ユーザーのパスワードを設定します。
$ virt-customize --selinux-relabel -a overcloud-full.qcow2 --root-password password:test [ 0.0] Examining the guest ... [ 18.0] Setting a random seed [ 18.0] Setting passwords [ 19.0] Finishing off
これにより、管理者レベルのアクセス権限でコンソールを使用してノードにアクセスできるようになります。
3.6. QCOW: イメージの登録
イメージを一時的に登録して、カスタマイズに適切な Red Hat のリポジトリーを有効にします。
$ virt-customize --selinux-relabel -a overcloud-full.qcow2 --run-command 'subscription-manager register --username=[username] --password=[password]' [ 0.0] Examining the guest ... [ 10.0] Setting a random seed [ 10.0] Running: subscription-manager register --username=[username] --password=[password] [ 24.0] Finishing off
[username] および [password] は、お客様の Red Hat アカウントの情報に置き換えます。これで、イメージに対して以下のコマンドが実行されます。
subscription-manager register --username=[username] --password=[password]
このコマンドでは、Red Hat のコンテンツ配信ネットワークにオーバークラウドのイメージを登録します。
3.7. QCOW: サブスクリプションのアタッチと Red Hat リポジトリーの有効化
アカウントのサブスクリプションからプール ID の一覧を検索します。
$ sudo subscription-manager list
サブスクリプションプール ID を選択して、その ID をイメージにアタッチします。
$ virt-customize --selinux-relabel -a overcloud-full.qcow2 --run-command 'subscription-manager attach --pool [subscription-pool]' [ 0.0] Examining the guest ... [ 12.0] Setting a random seed [ 12.0] Running: subscription-manager attach --pool [subscription-pool] [ 52.0] Finishing off
[subscription-pool] は選択したサブスクリプションプール ID に置き換えるようにしてください。これで、イメージに対して以下のコマンドが実行されます。
subscription-manager attach --pool [subscription-pool]
このコマンドではイメージにプールが追加され、以下のコマンドで Red Hat リポジトリーを有効化できるようになります。
$ subscription-manager repos --enable=[repo-id]
3.8. QCOW: カスタムリポジトリーファイルのコピー
サードパーティー製のソフトウェアをイメージに追加するには、追加のリポジトリーが必要です。たとえば、以下は、OpenDaylight リポジトリーの内容を使用する設定が含まれたリポジトリーファイルの例です。
$ cat opendaylight.repo [opendaylight] name=OpenDaylight Repository baseurl=https://nexus.opendaylight.org/content/repositories/opendaylight-yum-epel-6-x86_64/ gpgcheck=0
リポジトリーファイルをイメージにコピーします。
$ virt-customize --selinux-relabel -a overcloud-full.qcow2 --upload opendaylight.repo:/etc/yum.repos.d/ [ 0.0] Examining the guest ... [ 12.0] Setting a random seed [ 12.0] Copying: opendaylight.repo to /etc/yum.repos.d/ [ 13.0] Finishing off
--copy-in オプションは、リポジトリーファイルをオーバークラウドイメージの /etc/yum.repos.d/ にコピーします。
重要: Red Hat は、認定を受けていないベンダーからのソフトウェアに対するサポートは提供していません。インストールするソフトウェアがサポートされていることを、Red Hat のサポート担当者に確認してください。
3.9. QCOW: RPM のインストール
virt-customize コマンドを使用して、イメージにパッケージをインストールします。
$ virt-customize --selinux-relabel -a overcloud-full.qcow2 --install opendaylight [ 0.0] Examining the guest ... [ 11.0] Setting a random seed [ 11.0] Installing packages: opendaylight [ 91.0] Finishing off
--install オプションを指定すると、インストールするパッケージを指定することができます。
3.10. QCOW: サブスクリプションプールの消去
必要なパッケージをインストールしてイメージをカスタマイズした後に、サブスクリプションを削除して、イメージの登録を解除します。
$ virt-customize --selinux-relabel -a overcloud-full.qcow2 --run-command 'subscription-manager remove --all' [ 0.0] Examining the guest ... [ 12.0] Setting a random seed [ 12.0] Running: subscription-manager remove --all [ 18.0] Finishing off
これで、イメージからサブスクリプションプールがすべて削除されます。
3.11. QCOW: イメージの登録解除
最後に、イメージの登録を解除します。これは、オーバークラウドのデプロイメントプロセスでイメージをノードにデプロイして、各ノードを個別で登録するためです。
$ virt-customize --selinux-relabel -a overcloud-full.qcow2 --run-command 'subscription-manager unregister' [ 0.0] Examining the guest ... [ 11.0] Setting a random seed [ 11.0] Running: subscription-manager unregister [ 17.0] Finishing off
3.12. director へのイメージのアップロード
イメージの変更後には、director にアップロードします。stackrc ファイルを読み込み、コマンドラインから director にアクセスできるようにしてください。
$ source stackrc $ openstack overcloud image upload --image-path /home/stack/images/
これにより、bm-deploy-kernel、bm-deploy-ramdisk、overcloud-full、overcloud-full-initrd、overcloud-full-vmlinuz のイメージが director にアップロードされます。これらは、デプロイメントとオーバークラウド用のイメージです。このスクリプトにより、director の PXE サーバーにあるイントロスペクションイメージがインストールされます。以下のコマンドを使用して CLI にイメージ一覧を表示します。
$ openstack image list +--------------------------------------+------------------------+ | ID | Name | +--------------------------------------+------------------------+ | 765a46af-4417-4592-91e5-a300ead3faf6 | bm-deploy-ramdisk | | 09b40e3d-0382-4925-a356-3a4b4f36b514 | bm-deploy-kernel | | ef793cd0-e65c-456a-a675-63cd57610bd5 | overcloud-full | | 9a51a6cb-4670-40de-b64b-b70f4dd44152 | overcloud-full-initrd | | 4f7e33f4-d617-47c1-b36f-cbe90f132e5d | overcloud-full-vmlinuz | +--------------------------------------+------------------------+
この一覧には、イントロスペクションの PXE イメージ (agent.*) は表示されません。director は、これらのファイルを /httpboot にコピーします。
[stack@host1 ~]$ ls /httpboot -l total 151636 -rw-r--r--. 1 ironic ironic 269 Sep 19 02:43 boot.ipxe -rw-r--r--. 1 root root 252 Sep 10 15:35 inspector.ipxe -rwxr-xr-x. 1 root root 5027584 Sep 10 16:32 agent.kernel -rw-r--r--. 1 root root 150230861 Sep 10 16:32 agent.ramdisk drwxr-xr-x. 2 ironic ironic 4096 Sep 19 02:45 pxelinux.cfg