読者です 読者をやめる 読者になる 読者になる

私をペロペロするがよい

lazy_dog のブログです。

Arch Linux で KVM/qemu (virsh で運用編)

Virtualization

前回は、構築と VM の作成まで解説したので、今回は簡単に運用について。

Arch LinuxKVM/qemu (環境構築から VM の作成まで) - 私をペロペロするがよい
http://lazy-dog.hatenablog.com/entry/2014/07/13/015538

これで一通り Hypervisor を運用できるようにはなれると思う。ただ、監視とかしたい、大規模になんかやりたい、GUI で構築したいなど、もっとワガママに VM を使いたい場合、下記ページを参照しながら良いツールを探すといいかも。

Management Tools - KVM
http://www.linux-kvm.org/page/Management_Tools

個人的に、oVirt、karesansui は勉強してみたいところ。特に、oVirt は Red Hat Enterprise Virtualization のベースなので。

そもそも virsh の使い方

virsh はそのまま実行すると、virsh シェルになる。デフォルトでは、ローカルの Hypervisor に繋ぎにいく。コマンドを実行することによって、リモートの Hypervisor に接続可能。実行したディレクトリが、virsh シェルのカレントになる。

[root@baghdad ~]# virsh
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh # list --all
 Id    Name                           State
----------------------------------------------------
 2     bag-rss-01                     running
 3     bag-monitor-01                 running
 4     bag-pacmanrepo-01              running
 -     bag-mpd-01                     shut off

virsh #

こんな感じ。editVMXML ファイル (VM 構成情報) を開く場合、環境変数EDITOR= のパスになる。vim とかにしたい場合、.bash_profile に export EDITOR= しておくこと。

virsh シェルに入らなくても、virsh に続いてコマンドを打ち込めば実行可能。

[root@baghdad ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     bag-rss-01                     running
 3     bag-monitor-01                 running
 4     bag-pacmanrepo-01              running

VM の作成

2 通りの方法がある。一つは、virt-install コマンドを使う方法。もう一つは、virsh から createXML ファイルから生成する方法。virt-install の方が簡単に作れるのでこっちがオススメ。ただし、要 virt-manager パッケージとなる。

virt-install の使用

下記、2014/07/20 現在の 1.0.1 (2014-03-24) の virt-install の man を参照している。

virt-manager.git - Graphical virtual machine manager using libvirt
https://git.fedorahosted.org/cgit/virt-manager.git/tree/man/virt-install.pod

virt-install (恐らく)必須オプション

--connect=qemu:///system
ローカルの qemu/KVM に繋ぐ。ここのパラメータを変えれば、リモートの qemu/KVM に接続できる

--vcpus={n}
仮想 CPU 数。多分、デフォルトはコア数の指定になる。もっと細かいオプションの指定で、ソケット数まで指定可能。もし仮にライセンスを気にしないといけない場合、ここはきちんと指定してあげる必要があるかもしれない。

-n {Name}
VM 名の指定。virsh list したときに表示される名前になる。

--memory={n MB}
使用メモリの指定。単位は MB となる。-r-ram も同じオプションとなる。

--disk path={disk image file path}
仮想 HDD ファイルへのパスの指定。ストレージプールを作っていた場合、プール内に HDD の領域を確保し仮想 HDD を作成することもできるらしい。適当な所に、qemu-img で仮想 HDD を作ってパスを指定してあげた方が小規模で運用する場合は楽なので、この方法がおすすめ。

--hvm
完全仮想化として VM を作成する。ホストの Hypervisor の作りによってオプションの必要・不必要が変わり、qemu/KVM の場合は必須オプション。おまじないだと思っておけば OK。なお、--paravirt を指定すると準仮想化になり、ホストが Xen の場合の必須オプションとなる。

--os-type={OS type}
(もしかしたら不要かもしれない) VM の OS の種類の指定。ただ、上記 url の fedora の git レポジトリの man には、この項目の記載が削除されている。"linux"、"unix"、"windows"、"other" が指定できる。

--os-variant={OS バリアント}
OS のバリアントの指定。指定しなきゃ、OS メディアから勝手に推測するらしいが、man には「指定は HIGHLY RECOMMENDED」とのことなので、素直に指定してあげたらいい。きちんと指定すると、パフォーマンスが greatly に向上する。virt-install --os-variant list で、指定可能な一覧が出てくる。有名どころは、Windows 含めてある程度指定可能。
一覧に無い Linux の場合、特に Arch Linux は、virtio26 を指定しておけばいいと思う。これによって、Kernel のバージョンが 2.6.25 以降なら、virtio というデバイスが使用され、パフォーマンスが向上する。

--network {bridge/network}={network name/device}
NIC の設定。複数設定可能で、指定した分、VMNIC が増える。
  • --network bridge={ホストのネットワークデバイス名} ... ホストの NIC にブリッジする。物理に跨ぎたい場合に使用。
  • --network network={ネットワーク名} ... net-list --all で出てくる仮想ネットワークを指定する。

--cdrom={path to iso image}
ISO イメージへのパスを指定する。samba 接続でマウントされたパス指定の場合、前回に記載した通り、エラーになる。そのため、ローカルないし、nfs でマウントされたパスの指定が必要。

--graphics vnc,listen=0.0.0.0,password={password},keymap=ja,port={port number}
VNC 接続するためのオプション。パスワードとポート番号を指定すればよい。英語キーボードを使用しているという場合は、keymap= のオプションも要変更。なお、Spice も使用できるが、おいらの環境だと virt-viewer の Windows インストーラが上手く動かないんですけど。。。おいらは、VNC はせいぜいインストールの時と、Oracle 入れるときにしか使わないので、後で XML ファイルを直接編集して VNC は無効にしている。

XML ファイルから VM を作成

virsh の dumpxml から書き出された XML ファイルを読み込み、VM を作成する。自動化のためテンプレート化されている場合は、XML ファイルから作成するシナリオはありそうだけど、スクラッチから VM を作成する場合はまず使われない。素直に virt-install コマンドを使用するべき。

virsh# create {new VM}.xml

VM の起動・停止

virsh から実行する。

起動

start <VM 名>

停止

destroy <VM 名>

仮想 private network の作成

前回の「Arch Linux で KVM/qemu (環境構築から VM の作成まで)」で解説してるので、こっちを見てください。

Arch LinuxKVM/qemu (環境構築から VM の作成まで) - 私をペロペロするがよい
http://lazy-dog.hatenablog.com/entry/2014/07/13/015538

VM の削除

undefine <VM 名>

VM の一覧の表示

list

なお、オプションを付けないと、停止状態の VM も表示できない。

list --all

VM の強制終了

destroy <VM 名>

仮想 private network の表示

net-list

このコマンドも、active になっていないネットワークは --all を付けないと表示されない。

net-list --all

仮想 private network の削除

net-undefine <仮想 private network 名>

下記、実行例。

virsh # net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              inactive   yes           yes
 Virt_01              active     yes           yes

virsh # net-undefine default
Network default has been undefined

virsh #
virsh # net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 Virt_01              active     yes           yes

参考

第14章 virsh を使ってゲストを管理する
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-Virtualization_Administration_Guide-Managing_guests_with_virsh.html

まとめ

とりあえず、上記を覚えれば使えるようにはなる。仮想 private network 内のノードに DHCP で IP アドレスを付与したり、VM の休止や再開、スナップショットの作成はまた次回に解説する予定。