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

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

今回は、CentOS 7の仮想化に加え、最近巷で話題のLinuxコンテナであるDocker、そして、仮想化によるサーバー集約時に必要とされる資源管理について紹介します。

CentOS 7におけるKVM

CentOS 7において、仮想化機能のKVMがサポートされています。従来のCentOS 6系に比べ、NUMAアーキテクチャのCPUに対するプロセスの割り当ての自動化機能や仮想CPUのホットアド機能、ライブマイグレーションの高速化など様々な機能拡張が施されています。CentOS 7のKVMの機能拡張については、アップストリームOSにあたるRHEL 7のリリースノートの第9章が参考になります。

RHEL 7のリリースノート

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/pdf/7.0_Release_Notes/Red_Hat_Enterprise_Linux-7-7.0_Release_Notes-ja-JP.pdf

以下では、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のGUI画面。ローカルのホストマシン「localhost」上の仮想マシンだけでなく、遠隔のホストマシン(IPアドレスは172.16.1.5)上の仮想マシンも管理が可能である

図1:CentOS 7が提供するvirt-managerのGUI画面。ローカルのホストマシン「localhost」上の仮想マシンだけでなく、遠隔のホストマシン(IPアドレスは172.16.1.5)上の仮想マシンも管理が可能である

以下は、CentOS 7のvirt-managerがサポートする仮想マシンのインストール方法です。

  • ローカルに保管したOSのインストールメディアのISOイメージやCD/DVD-ROMドライブ
  • ネットワークインストール(プロトコルは、HTTP、FTP、NFS)
  • PXEブート
  • 既存のディスクイメージのインポート

ホストOSやファイルサーバーに保管したインストールメディアのISOイメージを使ってインストールすることが一般的です。HTTPやFTP、NFSを使ったインストールもサポートされていますので、従来の物理基盤でのCentOSのインストールと同様にOSを仮想マシンにインストールすることが可能です。

virt-managerのインストール方法は4種類用意されている

図2:virt-managerのインストール方法は4種類用意されている

対応している仮想マシンのOSの種類は様々なものが存在しますが、仮想マシンにCentOS 7をインストールしたい場合は、virt-managerのOS選択画面で、OSの種類に「Linux」を選択し、バージョンに「Red Hat Enterprise Linux 7」を選択します。

仮想マシンにCentOS 7をインストールしたい場合は、「Red Hat Enterprise Linux 7」を選択すればよい。OSの種類としては、Linux以外にもWindowsやFreeBSD、Solarisなどにも対応している

図3:仮想マシンにCentOS 7をインストールしたい場合は、「Red Hat Enterprise Linux 7」を選択すればよい。OSの種類としては、Linux以外にもWindowsやFreeBSD、Solarisなどにも対応している

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 はシャットダウン中です
日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター 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メルマガ会員のサービス内容を見る

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