CentOS 7の仮想化、Docker、リソース管理(前編)
この連載が、書籍『CentOS 7 実践ガイド』になりました!
IT技術者のための現場ノウハウ CentOS 7 実践ガイド
CentOS 7を取り巻く市場動向、サーバーシステムの選定、システム設計、構築手順など今回は、CentOS 7の仮想化に加え、最近巷で話題のLinuxコンテナであるDocker、そして、仮想化によるサーバー集約時に必要とされる資源管理について紹介します。
CentOS 7におけるKVM
CentOS 7において、仮想化機能のKVMがサポートされています。従来のCentOS 6系に比べ、NUMAアーキテクチャのCPUに対するプロセスの割り当ての自動化機能や仮想CPUのホットアド機能、ライブマイグレーションの高速化など様々な機能拡張が施されています。CentOS 7のKVMの機能拡張については、アップストリームOSにあたるRHEL 7のリリースノートの第9章が参考になります。
RHEL 7のリリースノート
以下では、CentOS 7に搭載されているKVMの基本的な管理・運用手法を説明します。
CentOS 7における仮想マシンの管理
CentOS 7では、CentOS 6系と同様に、仮想マシン管理ツールの「virt-manager」を使う事が可能です。virt-managerは、X11のデスクトップ上で稼働し、仮想マシンの作成、起動、停止、サスペンドなどをGUIで簡単に操作できます。また、遠隔にあるCentOS 6やCentOS 7のホストマシンの上で稼働するゲストOSをリモート管理することも可能です。KVMを利用するには、必要なパッケージをあらかじめインストールしておく必要があります。 yumコマンドでKVMに関連するパッケージをインストールします。
# yum install -y qemu-kvm libvirt virt-manager virt-install
仮想マシンを管理するには、仮想マシンを作成・稼働させるホストマシン上で事前にlibvirtdが稼働していることが前提です。もし、ホストマシン上で、libvirtdが稼働していない場合は、libvirtdを起動します。CentOS 7の場合は、systemctlコマンドを使用します。
# systemctl start libvirtd
ホストマシン上でlibvirtdが稼働したら、virt-managerを起動します。
# virt-manager
以下は、CentOS 7のvirt-managerがサポートする仮想マシンのインストール方法です。
- ローカルに保管したOSのインストールメディアのISOイメージやCD/DVD-ROMドライブ
- ネットワークインストール(プロトコルは、HTTP、FTP、NFS)
- PXEブート
- 既存のディスクイメージのインポート
ホストOSやファイルサーバーに保管したインストールメディアのISOイメージを使ってインストールすることが一般的です。HTTPやFTP、NFSを使ったインストールもサポートされていますので、従来の物理基盤でのCentOSのインストールと同様にOSを仮想マシンにインストールすることが可能です。
対応している仮想マシンのOSの種類は様々なものが存在しますが、仮想マシンにCentOS 7をインストールしたい場合は、virt-managerのOS選択画面で、OSの種類に「Linux」を選択し、バージョンに「Red Hat Enterprise Linux 7」を選択します。
virt-installとKickstartを使った仮想マシンの自動インストール
virt-managerを使えば、GUIで簡単に仮想マシンの作成が可能ですが、大量の仮想マシンの作成を自動化しなければならないホスティングシステムや、独自の内製ツールから仮想マシンを作成するようなクラウド環境の場合は、virt-managerではなく、virt-installが有用です。virt-installは、コマンドラインで仮想マシンの作成が可能ですので、バッチスクリプトへの埋め込み等、仮想マシンの作成を自動化できます。以下では、virt-installを使った仮想マシンの作成とCentOS 7の自動インストールの手順を紹介します。まず、仮想マシン上にCentOS 7をインストールするKickstartファイルks.cfgを作成します。KVMの仮想マシンのストレージデバイス名は、/dev/vdXになりますので、Kickstartファイル内で/dev/vdXを指定します。
# vi /root/ks.cfg cmdline install auth --enableshadow --passalgo=sha512 text ←テキストモードでインストール firstboot --enable ignoredisk --only-use=vda ←仮想ディスクとしてvdaを指定 keyboard --vckeymap=us --xlayouts='us' lang en_US.UTF-8 network --bootproto=static --device=eth0 --gateway=172.16.1.1 --ip=172.16.70.1 --nameserver=172.16.1.1 --netmask=255.255.0.0 --ipv6=auto --activate ←ゲストOSのeth0を固定IPで設定。 network --hostname=centos70vm01.jpn.linux.hp.com ←ゲストOSのホスト名を設定 rootpw password ←rootアカウントのパスワードを設定 skipx timezone Asia/Tokyo --isUtc user --name=koga --password=koga ←追加したい一般ユーザーのアカウント名とパスワードを記述 xconfig --startxonboot zerombr ←マスターブートレコードの初期化 bootloader --location=mbr --boot-drive=vda ←ブートローダのインストール先を/dev/vdaのMBR領域に設定 clearpart --all --initlabel --drives=vda ← /dev/vdaのラベルと全てのパーティションを初期化 part /boot --fstype=xfs --size=500 --asprimary ←/bootパーティションを500MBで確保し、ファイルシステムとしてXFSを指定 part swap --size=1024 ←スワップ領域のサイズを1024MBで確保 part / --fstype=xfs --size=1 --grow --asprimary ←ルートパーティションにディスクの残りの容量全てを確保し、ファイルシステムとしてXFSを指定 selinux --disabled ←SELinuxを無効に設定 firewall --disabled ←ファイアウォールを無効に設定 reboot ←OSのインストールが完了したら再起動を行う %packages @base @core %end
次に、仮想マシンの生成スクリプト「virt-install-centos7.sh」を作成します。ここでは、事前にホストマシンの/var/www/html/centos70ディレクトリに保管したCentOS 7 のISO イメージを使います。
# ls /root/*.iso CentOS-7.0-1406-x86_64-DVD.iso # vi virt-install-centos7.sh #!/bin/sh virt-install \ --connect qemu:///system \ --name centos70vm02 \ --hvm \ --virt-type kvm \ --os-type=linux \ --os-variant=rhel7 \ --ram 1024 \ --vcpu 1 \ --arch x86_64 \ --nographics \ --serial pty \ --console pty \ --noautoconsole \ --disk=/var/lib/libvirt/images/centos70vm02,format=qcow2,size=16 \ --boot=hd \ --network bridge=br0 \ --location=/var/www/html/centos70/CentOS-7.0-1406-x86_64-DVD.iso \ --initrd-inject /root/ks.cfg \ ←ks.cfgファイルをフルパスで指定 --keymap ja \ --extra-args='ks=file:/ks.cfg console=tty0 console=ttyS0,115200'
virt-install-centos7.shスクリプトとks.cfgファイルが用意できたら、virt-install-centos7.shを実行します。ks.cfgが正しく記述できていれば、スクリプトを実行したホストマシン上に仮想マシンが生成され、CentOS 7が自動インストールされます。
# sh ./virt-install-centos7.sh
コマンドラインによる仮想マシンの管理
CentOS 7のコマンドライン上から仮想マシンを管理することが可能です。仮想マシンの管理をコマンドラインで行うには、libvirt-clientパッケージに含まれているvirshコマンドを使用します。libvirt-clientパッケージがインストールされていない場合は、yumコマンドでインストールしてください。
# yum install libvirt-client
以下では、virshコマンドでよく利用される基本的な管理手順をいくつか紹介します。現在の仮想マシンの状態を確認するには、virshコマンドにlistコマンドを付与します。 --allオプションを指定すれば、登録済みの全仮想マシンの状態を表示します。
# virsh list --all Id 名前 状態 ---------------------------------------------------- - centos70vm01 シャットオフ - centos70vm02 シャットオフ
上記から、仮想マシンcentos70vm01とcentos70vm02がシャットオフされていることがわかります。登録されている仮想マシンを起動する場合は、virshコマンドにstartコマンドを指定します。
# virsh start centos70vm02 ドメイン centos70vm02 が起動されました # virsh list --all Id 名前 状態 ---------------------------------------------------- 5 centos70vm02 実行中 - centos70vm01 シャットオフ
仮想マシンのシャットダウンは、virshコマンドにshutdownコマンドを指定します。
# virsh shutdown centos70vm02 ドメイン centos70vm02 はシャットダウン中です
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に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!
|