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 はシャットダウン中です