第1章 Image サービス
本章では、RHEL OpenStack Platform でイメージとストレージを管理するための手順を説明します。
仮想マシンのイメージとは、起動可能なオペレーティングシステムがインストールされた仮想ディスクを含むファイルです。仮想マシンのイメージは、複数の形式をサポートしています。以下は、RHEL OpenStack Platform で利用可能な形式です。
-
RAW
: 非構造化のディスクイメージ形式 -
QCOW2
: QEMU エミュレーターでサポートされているディスク形式 -
ISO
: ディスク上のデータをセクター単位でコピーし、バイナリーファイルに格納した形式 -
AKI
: Amazon Kernel Image -
AMI
: Amazon Machine Image -
ARI
: Amazon RAMDisk Image -
VDI
: VirtualBox の仮想マシンモニターおよび QEMU エミュレーターでサポートされているディスク形式 -
VHD
: VMWare、VirtualBox などの仮想マシンモニターで使用されている一般的なディスク形式 -
VMDK
: 数多くの一般的な仮想マシンモニターでサポートされているディスク形式
通常、仮想マシンイメージの形式に ISO は考慮されませんが、ISO にはオペレーティングシステムがインストール済みのブート可能なファイルシステムが含まれているので、他の形式の仮想マシンイメージファイルと同様に扱うことができます。
公式の Red Hat Enterprise Linux クラウドイメージをダウンロードするには、有効な Red Hat Enterprise Linux サブスクリプションが必要です。
1.1. Image サービス: 新機能
RHEL OpenStack Platform 7 リリースでは、Image サービスで以下の新機能が利用できるようになりました。
イメージの変換: イメージのインポート中にタスク API を呼び出して、イメージを変換します (kilo リリースでは、qcow/raw 形式のみに対応)。
インポートのワークフローの一環として、プラグインがイメージの変換機能を提供します。このプラグインは、デプロイ担当者の設定に基づいて、アクティブ化/非アクティブ化することができます。そのため、デプロイ担当者は、デプロイメントに希望のイメージ形式を指定する必要があります。
内部では、Image サービスが特定の形式でイメージのビットを受信します。これらのビットは、一時的な場所に保管されます。次にプラグインが起動されて、イメージを対象のフォーマットに変換し、最終的な保管場所に移動します。タスクが終了すると、一時的な場所は削除されます。このため、Image サービスでは最初にアップロードした形式は保持されません。
注記フォーマットの変換は、イメージ (元のコピー) を インポート するとトリガーされます。イメージの アップロード 時には実行されません。以下に例を示します。
$ glance --os-image-api-version 2 task-create --type import --input '{"import_from_format": "qcow2", "import_from": "http://127.0.0.1:8000/test.qcow2", "image_properties": {"disk_format": "qcow2", "container_format": "bare"}}'
イメージのイントロスペクション: すべてのイメージフォーマットには、イメージ自体の中に埋め込まれたメタデータセットがあります。
たとえば、ストリーム最適化
VMDK
には、以下のようなパラメーターが含まれます。$ head -20 so-disk.vmdk # Disk DescriptorFile version=1 CID=d5a0bce5 parentCID=ffffffff createType="streamOptimized" # Extent description RDONLY 209714 SPARSE "generated-stream.vmdk" # The Disk Data Base #DDB ddb.adapterType = "buslogic" ddb.geometry.cylinders = "102" ddb.geometry.heads = "64" ddb.geometry.sectors = "32" ddb.virtualHWVersion = "4"
この vmdk をイントロスペクションすることにより、disk_type が streamOptimized で、 adapter_type が buslogic であることを簡単に確認することができます。このように Image サービス内のメタデータを抽出することにより、管理者は、上書きする必要がなければ、それらのメタデータについて注意を払う必要はありません。これらのメタデータパラメーターは、イメージのコンシューマーに役立ちます。Compute では、streamOptimized ディスクをインスタンス化するワークフローは、flat ディスクをインスタンス化するワークフローとは完全に異なります。この新機能により、メタデータの抽出が可能となります。イメージのイントロスペクションは、イメージのインポート中に、タスク API を呼び出すことによって実行できます。
注記Kilo リリースでイントロスペクションを実行できるのは、virtual_size メタデータパラメーターのみです。
1.2. イメージの管理
OpenStack Image サービス (glance) は、ディスクおよびサーバーイメージの検出、登録、および配信のサービスを提供します。サーバーイメージのコピーやスナップショットを作成して直ちに保管する機能を提供します。保管したイメージは、テンプレートとして使用し、新規サーバーを迅速に稼働させるのに使用することができます。これはサーバーのオペレーティングシステムをインストールして追加のサービスを個別に設定するよりも一貫性の高い方法です。
クローンの元となっている親イメージを確認するには、glance-api.conf
の show_image_direct_url
を True
に設定する必要があります。詳しい情報は、『Configuration Reference』の「Chapter 8. Image Service」 を参照してください。
1.2.1. イメージの作成
本項では、Red Hat Enterprise Linux 6 および Red Hat Enterprise Linux 7 の ISO ファイルを使用して、.qcow2 形式の OpenStack 互換イメージを手動で作成する手順について説明します。
1.2.1.1. RHEL OpenStack Platform における KVM ゲストイメージの使用
すでに準備済みの RHEL KVM ゲストの qcow2 イメージは、RHEL 7 KVM Guest Image または RHEL 6.6 KVM Guest Image で入手することができます。これらのイメージは、cloud-init
を使用して設定されます。適切に機能させるには、ec2 互換のメタデータサービスを利用して SSH キーをプロビジョニングする必要があります。
KVM ゲストイメージでは、以下の点に注意してください。
-
KVM ゲストイメージでは
root
アカウントが無効になっていますが、cloud-user
という名前の特別なユーザーにsudo
アクセスが許可されています。 -
このイメージには
root
パスワードは設定されていません。
root
パスワードは、/etc/shadow
で 2 番目のフィールドに !!
と記載することによりロックされます。
OpenStack インスタンスでは、OpenStack Dashboard またはコマンドラインから ssh キーペアを生成し、その鍵の組み合わせを使用して、インスタンスに対して root として SSH 公開認証を実行することを推奨します。
インスタンスの起動時には、この公開鍵がインスタンスに挿入されるので、キーペア作成時にダウンロードされた秘密鍵を使用して認証を行うことができます。
キーペアを使用しない場合には、「インスタンスへの admin
パスワードの挿入」の手順に従って admin
パスワードを設定してください。
Red Hat Enterprise Linux のカスタムイメージを作成する場合は、「Red Hat Enterprise Linux 7 イメージの作成」または「Red Hat Enterprise Linux 6 イメージの作成」を参照してください。
1.2.1.2. Red Hat Enterprise Linux のカスタムイメージの作成
前提条件
- イメージを作成する Linux ホストマシン。これは、Linux パッケージをインストール/実行することのできる任意のマシンです。
-
libvirt、virt-manager (
yum groupinstall -y @virtualization
のコマンドを実行)。ゲストオペレーティングシステムを作成するのに必要な全パッケージがインストールされます。 -
Libguestfs ツール (「
yum install -y libguestfs-tools-c
」のコマンドを実行してください)。仮想マシンイメージにアクセスして変更を行うためのツールセットがインストールされます。 - Red Hat Enterprise Linux 7 の ISO ファイル (RHEL 7.0 Binary DVD または RHEL 6.6 Binary DVD を参照)
-
テキストエディター (
kickstart
ファイルを編集する必要がある場合)
以下の手順では、プロンプトに [user@host]#
と表示されているコマンドはすべて、お使いのホストマシンで実行する必要があります。
1.2.1.2.1. Red Hat Enterprise Linux 7 イメージの作成
本項では、Red Hat Enterprise Linux 7 の ISO ファイルを使用して、.qcow2 形式の OpenStack 互換イメージを手動で作成する手順について説明します。
以下に示したように
virt-install
でインストールを開始します。[user@host]# qemu-img create -f qcow2 rhel7.qcow2 8G [user@host]# virt-install --virt-type kvm --name rhel7 --ram 2048 \ --cdrom /tmp/rhel-server-7.0-x86_64-dvd.iso \ --disk rhel7.qcow2,format=qcow2 \ --network=bridge:virbr0 --graphics vnc,listen=0.0.0.0 \ --noautoconsole --os-type=linux --os-variant=rhel7
このコマンドによりインスタンスが起動し、インストールプロセスが開始します。
注記インスタンスが自動的に起動しない場合には、以下のコマンドを実行して、コンソールを確認します。
[user@host]# virt-viewer rhel7
以下の手順に従って、仮想マシンを設定します。
-
インストーラーの初期起動メニューで、「Install Red Hat Enterprise Linux 7.0」のオプションを選択します。
- 適切な 言語 および キーボード オプションを選択します。
-
インストールに使用するデバイスタイプを尋ねるプロンプトが表示されたら、自動検出したインストールメディア を選択します。
-
インストール先を尋ねるプロンプトが表示されたら、ローカルの標準ディスク を選択します。
その他のストレージタイプオプションには、自動構成のパーティション構成 を選択します。
- ソフトウェアのオプションには、 最小限のインストール を選択します。
-
ネットワークとホスト名の設定では、イーサネットに
eth0
を選択し、デバイスの ホスト名 を指定します。デフォルトのホスト名はlocalhost.localdomain
です。 -
root
パスワードを選択します。インストールプロセスが完了すると、完了しました! の画面が表示されます。
-
インストーラーの初期起動メニューで、「Install Red Hat Enterprise Linux 7.0」のオプションを選択します。
- インストールが完了した後には、インスタンスを再起動して、root ユーザーとしてログインします。
/etc/sysconfig/network-scripts/ifcfg-eth0
ファイルを編集して、以下の値のみが記載されている状態にします。TYPE=Ethernet DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp NM_CONTROLLED=no
- マシンを再起動します。
コンテンツ配信ネットワークにマシンを登録します。
# subscription-manager register
プロンプトが表示されたら、カスタマーポータルのユーザー名とパスワードを入力します。
Username: admin@example.com Password:
使用するチャンネルが含まれたエンタイトルメントプールを特定します。
# subscription-manager list --available | grep -A8 "Red Hat Enterprise Linux Server"
上記のステップで特定したプール ID を使用して、
Red Hat Enterprise Linux Server
のエンタイトルメントをシステムにアタッチします。# subscription-manager attach --pool=pool_id
必須チャンネルを有効にします。
# subscription-manager repos --enable=rhel-7-server-rpms
RHEL OpenStack Platform 7 の場合は、必須チャンネルは
rhel-7-server-openstack-7.0-rpms
およびrhel-7-server-rh-common-rpms
です。注記詳しい情報は、『インストールリファレンス』の「必要なチャンネルのサブスクライブ」の項を参照してください。
システムを更新します。
# yum -y update
cloud-init
パッケージをインストールします。# yum install -y cloud-utils-growpart cloud-init
/etc/cloud/cloud.cfg
設定ファイルを編集して、cloud_init_modules
の下に以下を追加します。- resolv-conf
resolv-conf
オプションは、インスタンスの初回起動時にresolv.conf
を自動的に設定します。このファイルには、nameservers
、domain
、その他のオプションなどのインスタンスに関連した情報が記載されています。/etc/sysconfig/network
に以下の行を追加し、EC2 メタデータサービスへのアクセスで問題が発生するのを回避します。NOZEROCONF=yes
コンソールメッセージが Dashboard の
ログ
タブおよびnova console-log
の出力に表示されるようにするには、以下のブートオプションを「/etc/default/grub」ファイルに追記します。GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
以下のコマンドを実行します。
# grub2-mkconfig -o /boot/grub2/grub.cfg
以下のような出力が表示されます。
Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-229.7.2.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-229.7.2.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-121.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-121.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-b82a3044fb384a3f9aeacf883474428b Found initrd image: /boot/initramfs-0-rescue-b82a3044fb384a3f9aeacf883474428b.img done
仮想マシンの登録を解除して、作成されるイメージをベースにクローン作成される全インスタンスに同じサブスクリプション情報が含まれないようにします。
# subscription-manager repos --disable=* # subscription-manager unregister # yum clean all
インスタンスの電源をオフにします。
# poweroff
virt-sysprep
コマンドでイメージのリセットおよびクリーニングをして、インスタンスの作成を問題なく行えるようにします。[user@host]# virt-sysprep -d rhel7
virt-sparsify
コマンドを使用してイメージのサイズを縮小します。このコマンドにより、ディスクイメージ内の空き容量は、ホスト内の空き容量に戻ります。[user@host]# virt-sparsify --compress /tmp/rhel7.qcow2 rhel7-cloud.qcow2
このコマンドを実行すると、その場所に
rhel7-cloud.qcow2
ファイルが作成されます。
rhel7-cloud.qcow2
イメージファイルを Image サービスにアップロードする準備が整いました。Dashboard を使用して OpenStack デプロイメントにこのイメージをアップロードする方法については、「イメージのアップロード」を参照してください。
1.2.1.2.2. Red Hat Enterprise Linux 6 イメージの作成
本項では、 Red Hat Enterprise Linux 6 の ISO ファイルを使用して、.qcow2 形式の OpenStack 互換イメージを手動で作成する手順について説明します。
virt-install
でインストールを開始します。[user@host]# qemu-img create -f qcow2 rhel6.qcow2 4G [user@host]# virt-install --connect=qemu:///system --network=bridge:virbr0 \ --name=rhel6.6 --os-type linux --os-variant rhel6 \ --disk path=rhel6.qcow2,format=qcow2,size=10,cache=none \ --ram 4096 --vcpus=2 --check-cpu --accelerate \ --hvm --cdrom=rhel-server-6.6-x86_64-dvd.iso
このコマンドによりインスタンスが起動し、インストールプロセスが開始します。
注記インスタンスが自動的に起動しない場合には、以下のコマンドを実行して、コンソールを確認します。
[user@host]# virt-viewer rhel6
仮想マシンを以下のように設定します。
インストーラーの初期起動メニューで、Install or upgrade an existing system のオプションを選択します。
インストールのプロンプトに従って順に進みます。デフォルト値を受け入れます。
インストールは、ディスクをチェックして、Media Check を実行します。チェックの結果が Success となると、そのディスクは取り出されます。
- 適切な 言語 および キーボード オプションを選択します。
-
インストールに使用するデバイスタイプを尋ねるプロンプトが表示されたら、基本ストレージデバイス を選択します。
-
デバイスの ホスト名 を指定します。デフォルトのホスト名は
localhost.localdomain
です。 -
タイムゾーン と
root
パスワードを指定します。 -
ディスクの空き容量に応じて、インストールのタイプを選択します。
-
SSH サーバーをインストールする 基本サーバー インストールを選択します。
- インストールプロセスが完了し、おめでとうございます。Red Hat Enterprise Linux のインストールが完了しました。 の画面が表示されます。
-
インスタンスを再起動して、
root
ユーザーとしてログインします。 /etc/sysconfig/network-scripts/ifcfg-eth0
ファイルを編集して、以下の値のみが記載されている状態にします。TYPE=Ethernet DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp NM_CONTROLLED=no
- マシンを再起動します。
コンテンツ配信ネットワークにマシンを登録します。
# subscription-manager register
プロンプトが表示されたら、カスタマーポータルのユーザー名とパスワードを入力します。
Username: admin@example.com Password:
使用するチャンネルが含まれたエンタイトルメントプールを特定します。
# subscription-manager list --available | grep -A8 "Red Hat Enterprise Linux Server"
上記のステップで特定したプール ID を使用して、
Red Hat Enterprise Linux Server
のエンタイトルメントをシステムにアタッチします。# subscription-manager attach --pool=pool_id
必須チャンネルを有効にします。
# subscription-manager repos --enable=rhel-6-server-rpms
RHEL OpenStack Platform 7 の場合は、必須チャンネルは
rhel-7-server-openstack-7.0-rpms
およびrhel-6-server-rh-common-rpms
です。注記詳しい情報は、『インストールリファレンス』の「必要なチャンネルのサブスクライブ」の項を参照してください。
システムを更新します。
# yum -y update
cloud-init
パッケージをインストールします。# yum install -y cloud-utils-growpart cloud-init
/etc/cloud/cloud.cfg
設定ファイルを編集して、cloud_init_modules
の下に以下を追加します。- resolv-conf
resolv-conf
オプションは、インスタンスの初回起動時にresolv.conf
設定ファイルを自動的に設定します。このファイルには、nameservers
、domain
、その他のオプションなどのインスタンスに関連した情報が記載されています。ネットワークの問題が発生するのを防ぐために、
/etc/udev/rules.d/75-persistent-net-generator.rules
ファイルを作成します。# echo "#" > /etc/udev/rules.d/75-persistent-net-generator.rules
これにより、
/etc/udev/rules.d/70-persistent-net.rules
ファイルが作成されるのを防ぎます。/etc/udev/rules.d/70-persistent-net.rules
が作成されてしまうと、スナップショットからのブート時にネットワークが適切に機能しなくなる可能性があります (ネットワークインターフェースが「eth0」ではなく「eth1」として作成され、IP アドレスが割り当てられません)。/etc/sysconfig/network
に以下の行を追加し、EC2 メタデータサービスへのアクセスで問題が発生するのを回避します。NOZEROCONF=yes
コンソールメッセージが Dashboard の
ログ
タブおよびnova console-log
の出力に表示されるようにするには、以下のブートオプションを/etc/grub.conf
ファイルに追記します。console=tty0 console=ttyS0,115200n8
仮想マシンの登録を解除して、作成されるイメージをベースにクローン作成される全インスタンスに同じサブスクリプション情報が含まれないようにします。
# subscription-manager repos --disable=* # subscription-manager unregister # yum clean all
インスタンスの電源をオフにします。
# poweroff
virt-sysprep
コマンドでイメージのリセットおよびクリーニングをして、インスタンスの作成を問題なく行えるようにします。[user@host]# virt-sysprep -d rhel6.6
virt-sparsify
コマンドを使用してイメージのサイズを縮小します。このコマンドにより、ディスクイメージ内の空き容量は、ホスト内の空き容量に戻ります。[user@host]# virt-sparsify - -compress rhel6.qcow2 rhel6-cloud.qcow2
このコマンドを実行すると、その場所に新しい
rhel6-cloud.qcow2
ファイルが作成されます。注記インスタンスに適用されているフレーバーのディスクスペースに応じて、イメージをベースとするインスタンスのパーティションを手動でリサイズする必要があります。
rhel6-cloud.qcow2
イメージファイルを Image サービスにアップロードする準備が整いました。Dashboard を使用して OpenStack デプロイメントにこのイメージをアップロードする方法については、「イメージのアップロード」を参照してください。
1.2.2. イメージのアップロード
- Dashboard で プロジェクト > コンピュート > イメージ を選択します。
- イメージの作成 をクリックします。
- 各フィールドに値を入力し、完了したら イメージの作成 をクリックします。
フィールド | 説明 |
---|---|
名前 |
イメージの名前。そのプロジェクト内で一意な名前にする必要があります。 |
説明 |
イメージを識別するための簡単な説明 |
イメージソース |
イメージソース: イメージの場所 または イメージファイル。ここで選択したオプションに応じて次のフィールドが表示されます。 |
イメージの場所またはイメージファイル |
|
形式 |
イメージの形式 (例: qcow2) |
アーキテクチャー |
イメージのアーキテクチャー。たとえば 32 ビットのアーキテクチャーには i686、64 ビットのアーキテクチャーには x86_64 を使用します。 |
最小ディスク (GB) |
イメージのブートに必要な最小のディスクサイズ。このフィールドに値が指定されていない場合には、デフォルト値は 0 です (最小値なし)。 |
最小メモリー (MB) |
イメージのブートに必要な最小のメモリーサイズ。このフィールドに値が指定されていない場合には、デフォルト値は 0 です (最小値なし)。 |
パブリック |
このチェックボックスを選択した場合には、プロジェクトにアクセスできる全ユーザーにイメージが公開されます。 |
保護 |
このチェックボックスを選択した場合には、特定のパーミッションのあるユーザーのみがこのイメージを削除できるようになります。 |
glance image-create
コマンドに プロパティー
のオプションを指定して実行する方法でイメージを作成することもできます。コマンドラインで操作を行った方が、より多くの値を使用することができます。完全なリストは、「イメージの設定パラメーター」を参照してください。
1.2.3. イメージの更新
- Dashboard で プロジェクト > コンピュート > イメージ を選択します。
ドロップダウンリストから イメージの編集 をクリックします。
注記イメージの編集 オプションは、
admin
ユーザーとしてログインした場合にのみ使用することができます。demo
ユーザーとしてログインした場合には、インスタンスの起動 または ボリュームの作成 のオプションを使用することができます。- フィールドを更新して、終了したら イメージの更新 をクリックします。次の値を更新することができます (名前、説明、カーネル ID、RAM ディスク ID、アーキテクチャー、形式、最小ディスク、最小メモリー、パブリック、保護)。
- ドロップダウンメニューをクリックして メタデータの更新 オプションを選択します。
- 左のコラムから右のコラムに項目を追加して、メタデータを指定します。左のコラムには、Image サービスのメタデータカタログからのメタデータの定義が含まれています。その他 を選択して、任意のキーを使用してメタデータを追加し、完了したら 保存 をクリックします。
glance image-update
コマンドに property
オプションを指定して実行する方法でイメージを更新することもできます。コマンドラインで操作を行った方が、より多くの値を使用することができます。完全なリストは、「イメージの設定パラメーター」を参照してください。
1.2.4. イメージの削除
- Dashboard で プロジェクト > コンピュート > イメージ を選択します。
- 削除するイメージを選択し、イメージの削除 ボタンをクリックします。