【KVM】仮想マシンのデプロイ運用
前置き
現状の運用に課題があってやり方を変えようと思っているので、とりあえず現在はこういう運用をやっているということを書いておきます。
客先ではvSphere(ESX), 自社ではKVMを使っているのですが、基本的にやっていることは同じです。
現状の運用
- ベースとなるテンプレートを作成(OS導入後、基本ポリシーに合わせて構成変更)
- 新しいVMが必要になったらデプロイ後、サブセット毎に構成変更。
- 個別の要件ごとに構成変更。
それぞれに構成変更が発生するので結構面倒臭いです。
ちなみにKVMにはvSphereで言うところの「テンプレート」がないので適当にベースとなるマシンを作ってクローンすることで代用してます。
以下、KVMでデプロイする時の作業の流れ
作業前の状態確認
# virsh list --all Id Name State ---------------------------------------------------- 60 gw running 61 util running 62 www1 running 68 vyos running 75 www2 running 97 www3 running - maintenance shut off - redmine shut off - template shut off
clone作成
テンプレートからcloneを作成します。
# virt-clone -o template -n www4 -f /var/lib/libvirt/www4.img Allocating 'www4.img' | 5.0 GB 00:38 Clone 'www4' created successfully.
ディスク構成変更
場合によってはディスクを拡張したり、パーティションを変更することもあります。
# qemu-img resize /var/lib/libvirt/www4.img +1G Image resized.
ESXでは拡張は問題ないけど縮小は出来ません。KVMだとどうなのかな? まあ、テンプレートは小さく作っておいてデプロイ後に必要に応じて拡張するのが無難だと思います。
パーティションの変更ですが、客先の環境では(何故か)LVMを使ってないのでgpartedを、自社環境ではLVMを利用して変更しています。パーティションを縮小する時は事前にファイルシステムのリサイズもやっておきましょう。それと、テンプレートからのデプロイなら失敗してもやり直せば良いですが、本番機の場合は事前バックアップも忘れずにやっておくこと。
ネットワーク設定変更
clone作成後、起動前に予めvirt-edit
を使ってネットワーク関連の設定を変更しておきます。
# virt-edit www4 /etc/sysconfig/network
変更するのは具体的には下記のファイル
【ホスト名】 /etc/sysconfig/network
【IPアドレス】
/etc/sysconfig/network-scripts/ifcfg-eth
【NICのデバイス番号】 /etc/udev/rules.d/70-persistent-net.rules
とりあえず管理用のNICの設定さえ終わってしまえば他はSSH経由で編集できるので後回しで良いです。
バックアップ
作業が終わったらバックアップ。 ディスクイメージ以外に構成情報もdumpしておきます。
# virsh dumpxml www4 > /backup/www4.xml # cat /backup/www4.xml <domain type='kvm'> <name>www4</name> <uuid>ebf5e3d3-4e69-38c6-3808-a18b8e899900</uuid> <memory unit='KiB'>524288</memory> <currentMemory unit='KiB'>524288</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='rhel6.2.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/var/lib/libvirt/www4.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <controller type='usb' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> </controller> <interface type='network'> <mac address='52:54:00:d7:15:6b'/> <source network='virbr1'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='tablet' bus='usb'/> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </memballoon> </devices> </domain>
削除とインポート
デプロイを間違えた時や不要となった仮想マシンを削除する時はundefine
を使います。
デフォルトではディスクイメージは削除されませんが、--remove-all-storage
オプションでディスクイメージも併せて削除出来ます。
なお、対象の仮想マシンが稼働中であれば削除されないので、destroy
で停止処理も併せて実施。
# virsh destroy www4 Domain www4 destroyed # virsh undefine www4 Domain www4 has been undefined
xmlをインポートして再作成する時はdefine
# virsh define /backup/www4.xml Domain www4 defined from /backup/www4.xml
(ディスクイメージがないと当然失敗します)
ちなみにcreate
でも再作成されますが、作成と同時に起動するので注意が必要です。