CentOS 7の仮想化、Docker、リソース管理(前編)
virt-cloneによる仮想マシンのクローニング
virt-installパッケージに含まれているvirt-cloneコマンドを利用すれば、既存の仮想マシンのイメージファイルを使って仮想マシンのクローンを生成することが可能です。以下は、既存の仮想マシン「centos70vm01」から「centos70vm03」という名前の仮想マシンを作成する例です。作成する仮想マシンのイメージファイル名は「centos70vm03.img」としました。
# virt-clone --original centos70vm01 --name centos70vm03 --file /var/lib/libvirt/images/centos70vm03.img 割り当て中 'centos70 11% [=- ] 158 MB/s | 2.7 GB 02:18 ETA 'centos70vm03'のクローニングに成功しました。 # virsh list --all Id 名前 状態 ---------------------------------------------------- - centos70vm01 シャットオフ - centos70vm02 シャットオフ - centos70vm03 シャットオフ
virt-cloneでは仮想マシンの設定ファイルも自動生成します。/etc/libvirt/qemuディレクトリ以下に設定ファイルが生成されているかを確認して下さい。
# ls -l /etc/libvirt/qemu/*.xml ... -rw-------. 1 root root 2900 11月 6 21:54 /etc/libvirt/qemu/centos70vm03.xml
生成された仮想マシン「centos70vm03」は、centos70vm01と全く同じイメージファイルですので、ホスト名やネットワークの設定ファイルに記述されているMACアドレスの指定、IPアドレスなどの変更が必要になりますので注意してください。
仮想マシンのコンソールへの接続と離脱方法
通常、仮想マシンを操作するには、ssh接続もありますが、IPアドレスが付与されていない場合は、コンソールへのアクセスが一般的です。virt-managerのGUIからコンソールを出力させることも可能ですが、X Windowが用意されていない端末からコンソール出力を行いたい場合があります。そのような場合は、virshコマンドにconsoleコマンドを付与し、コンソール接続を行いたい仮想マシン名を指定します。
# virsh console centos70vm02
virshコマンドで仮想マシンのコンソールにログインした状態から離脱し、ホストマシンのコマンドプロンプトに移行するには、仮想マシンのコンソール上で、キーボードからCTRL+]を入力します。
仮想マシンのスナップショットの作成と適用方法
virshコマンドには、様々な機能が備わっていますが、その中でも、多くのユーザーで重宝されているのがスナップショット機能です。仮想マシンのスナップショットを利用するメリットの一つは、過去のOS状態に戻すことができるという点です。スナップショットは、仮想マシンの「ある時点での状態」を非常に小さいファイルに記録し、その「状態」を記録したファイルを基に、過去のOSの状態に戻すことができます。例えば、LAMPを構築する場合、Linux、Apache、MySQL、PHPの4つのコンポーネントの設定を行いますが、途中で重大な設定ミスを犯してしまった場合でも、定期的にスナップショットを取得しておけば、そのスナップショットを基に、コンポーネントの設定ミスを犯す前の過去の状態に戻すことができます。以下では、CentOS 7におけるKVM仮想マシンのスナップショットの取得と適用方法の手順を述べます。まず、仮想マシンの名前をvirshコマンドで確認します。
# virsh list --all Id 名前 状態 ---------------------------------------------------- 5 centos70vm02 実行中 - centos70vm01 シャットオフ
今回は、centos70vm02のスナップショットを作成します。スナップショット名は、「centos70vm02-snapshot-2014-09-19-001」にします。
# virsh snapshot-create-as centos70vm02 centos70vm02-snapshot-2014-09-19-001 ドメインのスナップショット centos70vm02-snapshot-2014-09-19-001 が作成されました
作成したスナップショットをリストアップします。virshコマンドに「snapshot-list」コマンドに続け仮想マシンの名前を付与すると、作成したスナップショットの名前と作成時間、現在の状態が表示されます。
# virsh snapshot-list centos70vm02 名前 作成時間 状態 ------------------------------------------------------------ centos70vm02-snapshot-2014-09-19-001 2014-09-19 14:28:54 +0900 running
取得したスナップショットを適用して、過去の状態に戻すことができるかテストしてみます。仮想マシンcentos70vm02にログインし、/root/に適当な名前のファイルを生成します。1つ目のスナップショットと2つ目のスナップショットを適用した環境に戻るかどうかをテストする際に、それらの区別がつくように、仮想マシン上で何らかの作業を行って下さい。その後、2つ目のスナップショットを作成します。
# virsh snapshot-create-as centos70vm02 centos70vm02-snapshot-2014-09-19-002 ドメインのスナップショット centos70vm02-snapshot-2014-09-19-002 が作成されました
再び、スナップショットをリストアップします。スナップショット「centos70vm02-snapshot-2014-09-19-001」と「centos70vm02-snapshot-2014-09-19-002」の2つが作成されていることがわかります。
# virsh snapshot-list centos70vm02 名前 作成時間 状態 ------------------------------------------------------------ centos70vm02-snapshot-2014-09-19-001 2014-09-19 14:28:54 +0900 running centos70vm02-snapshot-2014-09-19-002 2014-09-19 14:32:03 +0900 running
スナップショットに関する情報の表示は、virshコマンドに「snapshot-info」コマンドを付与し、仮想マシン名とスナップショット名を指定します。
# virsh snapshot-info centos70vm02 centos70vm02-snapshot-2014-09-19-001 名前: centos70vm02-snapshot-2014-09-19-001 ドメイン: centos70vm02 カレント: いいえ (no) 状態: running 場所: 内部 親: - 子: 1 子孫: 1 メタデータ: はい (yes) # virsh snapshot-info centos70vm02 centos70vm02-snapshot-2014-09-19-002 名前: centos70vm02-snapshot-2014-09-19-002 ドメイン: centos70vm02 カレント: はい (yes) 状態: running 場所: 内部 親: centos70vm02-snapshot-2014-09-19-001 子: 0 子孫: 0 メタデータ: はい (yes)
作成したスナップショットを適用し、仮想マシンを過去の状態に戻してみます。まずは、スナップショット「centos70vm02-snapshot-2014-09-19-001」を適用し、スナップショットを作成した時点のOSの状態に復元します。スナップショットの適用は、virshコマンドに「snapshot-revert」コマンドを付与し、仮想マシン名と適用したいスナップショット名を指定します。
# virsh snapshot-revert centos70vm02 centos70vm02-snapshot-2014-09-19-001
仮想マシン「centos70vm02」にログインし、状態が復元されているかを確認します。アプリケーションのインストールやアップグレード、システムの設定変更前にスナップショットを作成しておくと、アプリケーションや設定でトラブルが発生しても、スナップショットから元の状態に復元できますので、非常に便利です。
操作しているOS環境が物理マシンなのか仮想マシンなのかを判断する
仮想化環境において、管理者は、物理サーバー上で直接稼働しているOS環境と仮想マシンを区別して管理する必要があります。ユーザーが利用する環境が物理マシンの場合と仮想マシンの場合の両方が考えられる場合、物理マシンと仮想マシンが混在するため、どのような仮想化基盤で稼働しているかを事前にチェックしてから、アプリケーションや管理ツールの実行を行うといった運用も見られます。現在自分が操作しているOS環境が、物理マシンで直接稼働しているものなのか、仮想マシンなのかを判断するには、その操作しているマシン上で、virt-whatコマンドを実行します。virt-whatコマンドはvirt-whatパッケージに含まれています。
# virt-what kvm
# virt-what
もし操作しているマシン上で、virt-whatコマンドの出力結果が「kvm」と表示される場合は、そのマシンは仮想マシンであることを意味します。何も出力されない場合は、物理マシンで稼働していることを意味します。virt-whatコマンド以外にも、systemd-detect-virtコマンドを使うことでも同様の確認が可能です。
# systemd-detect-virt kvm
# systemd-detect-virt none
KVM仮想化環境におけるブリッジインタフェースの作成
CentOS 7において、KVMの仮想マシンを作成する事前準備にネットワークの設定があります。KVMの仮想化環境で、よく利用されるネットワーク設定は、仮想マシンとホストマシンが同一ネットワークに所属するようにホストマシンにブリッジインタフェースを設ける構成と、NATを使って仮想マシンにプライベートIPアドレスを割り振る構成です。CentOS 7において、ホストマシンにブリッジインタフェースを作成するには、nmtuiを使用します。nmcliコマンドによる設定でも構いませんが、初心者は、nmtuiで設定するのがよいでしょう。
【参考情報】 virt-manager vs. 商用の仮想化基盤管理ツール
Red Hat社が提供している仮想化ソフトウェアRed Hat Enterprise Virtualization(通称RHEV)では、RHEL7が搭載するKVM仮想化の機能に加え、以下のような企業向けの基盤に必要な機能を搭載しています。
- 仮想ディスクのホットプラグ対応
- ライブスナップショットの対応
- スナップショットのクローン機能
- VDSMを介在しないダイレクトLUNの対応
- クォータ機能
- ストレージマイグレーション
- ライブスナップショットの統合
- OpenvSwitchに代表されるソフトウェア定義ネットワークへの対応
上記のようなエンタープライズレベルの仮想化の機能を利用し、ベンダーの保守サポートが必要とされる場合は、CentOSが提供するKVMではなく、RHEVの採用を検討すべきです。CentOS 7での仮想化機能は、主にKVMのvirt-manager及びvirshによる比較的簡単な操作に限定されます。エンタープライズレベルの高度な要求に対応する仮想化統合基盤の実現を目的とする場合、virt-managerやvirshのみの環境では、多くの作り込みが発生してしまいます。仮想マシンだけを遠隔から管理する簡素で小規模なシステムの場合は、CentOS 7やRHEL 7のvirt-managerやvirshで事足りるかもしれませんが、サーバーの物理コンポーネントと仮想マシンの一元管理や変更管理等を考慮にいれた高度な仮想化基盤においては、ハードウェアベンダーの管理ツールとRHEVの統合を検討する必要があります。具体的には、KVMによる仮想マシン管理と、仮想化基盤でよく利用されているブレードサーバーやNICのポートの分割、帯域設定、FCストレージ、バーチャルコネクト等の仮想化を意識したハードウェアコンポーネントの設定の自動化や運用管理を高度に統合することが求められます。ハードウェアベンダーの管理ツールとRHEVを統合させたものとしては、HP OneView for RHEVなどが存在しますが、CentOS 7において、このような物理基盤と仮想環境の高度な統合管理ツールは、現時点で存在しません。サーバー、ストレージ、ネットワークの各種コンポーネントと仮想マシンの設定変更や運用管理に関する仮想化基盤全体の要件を定義し、仮想化による統合管理でどのように効率化するのかを十分検討するようにして下さい。
(後編に続く)
この連載が書籍になりました! | |
---|---|
古賀 政純 著 |
CentOS 7実践ガイド本書は、CentOS 7を取り巻く市場動向、CentOS 7が利用されるサーバーシステムの選定、CentOS 7の基礎、システム設計、OS管理やCentOS 7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!
|