CentOS 7の仮想化、Docker、リソース管理(前編)

2015年1月22日(木)
古賀 政純

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パッケージに含まれています。

KVM仮想マシン上での実行の様子

# virt-what
kvm

物理マシン上での実行の様子

# virt-what

もし操作しているマシン上で、virt-whatコマンドの出力結果が「kvm」と表示される場合は、そのマシンは仮想マシンであることを意味します。何も出力されない場合は、物理マシンで稼働していることを意味します。virt-whatコマンド以外にも、systemd-detect-virtコマンドを使うことでも同様の確認が可能です。

KVM仮想マシン上での実行の様子

# systemd-detect-virt
kvm

物理マシン上での実行の様子

# systemd-detect-virt
none

KVM仮想化環境におけるブリッジインタフェースの作成

CentOS 7において、KVMの仮想マシンを作成する事前準備にネットワークの設定があります。KVMの仮想化環境で、よく利用されるネットワーク設定は、仮想マシンとホストマシンが同一ネットワークに所属するようにホストマシンにブリッジインタフェースを設ける構成と、NATを使って仮想マシンにプライベートIPアドレスを割り振る構成です。CentOS 7において、ホストマシンにブリッジインタフェースを作成するには、nmtuiを使用します。nmcliコマンドによる設定でも構いませんが、初心者は、nmtuiで設定するのがよいでしょう。

ネットワークの設定を行うGUIツールnmtuiでブリッジインタフェースbr0を設定している様子

図4:ネットワークの設定を行うGUIツールnmtuiでブリッジインタフェースbr0を設定している様子

【参考情報】 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に標準添付されているvirt-managerとRed Hat社が提供する商用のRHEVマネージャの棲み分け。virt-managerは小規模な仮想化基盤での利用が想定される。一方、RHEVは、ハードウェアベンダーが提供する管理ツールを組み合わせることが可能であり、物理基盤と仮想化基盤の高度な統合管理を実現する

図5:CentOS 7に標準添付されているvirt-managerとRed Hat社が提供する商用のRHEVマネージャの棲み分け。virt-managerは小規模な仮想化基盤での利用が想定される。一方、RHEVは、ハードウェアベンダーが提供する管理ツールを組み合わせることが可能であり、物理基盤と仮想化基盤の高度な統合管理を実現する

(後編に続く)

この連載が書籍になりました!
CentOS 7実践ガイド

古賀 政純 著
価格:3,000円+税
発売日:2015年2月25日発売
ISBN:978-4-8443-3753-9
発行:インプレスジャパン

CentOS 7実践ガイド

本書は、CentOS 7を取り巻く市場動向、CentOS 7が利用されるサーバーシステムの選定、CentOS 7の基礎、システム設計、OS管理やCentOS 7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!

  • セキュリティ管理
  • チューニング
  • 自動インストール
  • Hadoop構築
  • GlusterFS
  • Ceph

Amazon詳細ページへImpress詳細ページへ

日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています