KVM仮想マシンを操作します。 ホストマシンの準備

エントリー





タキシードとビースティ 前の記事で約束したように、本日はKVMのホストマシンの基本的な構成について説明します。







まず、プロセッサに仮想化をサポートするために必要な指示があるかどうかを確認する必要があります。



$ egrep '(vmx|svm)' /proc/cpuinfo







ある場合、これは素晴らしいです。



オペレーティングシステムの準備





Debian Squeezeのインストールについてはおそらく説明しません。すでにKVMにアクセスしている場合は、システムのインストールは簡単なことです。



必要なパッケージはこのアーキテクチャ専用であるため、64ビットOSをインストールする必要があります。



Debian Squeezeでは、KVMおよび関連プログラムを含むパッケージの「新鮮さ」は、多くの修正や機能が単に私たちを通り過ぎてしまうので、私たちにはまったく適していません。 したがって、Debian Sidと実験リポジトリを追加します。



deb http://ftp.ru.debian.org/debian sid main contrib non-free

deb-src http://ftp.ru.debian.org/debian sid main contrib non-free



deb http://ftp.ru.debian.org/debian experimental main contrib non-free

deb-src http://ftp.ru.debian.org/debian experimental main contrib non-free








システムが考えていたものではなく、基本的な安定した分布があることを指摘します。



# echo 'APT::Default-Release "stable";' > /etc/apt/apt.conf.d/default







そこからパッケージが必要になります:



# aptitude -t experimental install linux-image-2.6.39-1-amd64 qemu-kvm virtinst libvirt-bin







安定したリポジトリから必要なもの:



# aptitude install uml-utilities bridge-utils







作業中のデスクトップにvirt-manager (GUI-utility)を配置すると、仮想マシンの必要な構成を簡単に作成できます。



コア




コアは「より新しい」ものです-優れている(もちろん、特定の制限内では、gitから、たとえば、インストールはお勧めしません)。 良いオプションは、最近リリースされた2.6.39です。



標準カーネルには、UFS2への書き込みをサポートするモジュールがなく、FreeBSDゲストを実行する予定がある場合、このモジュールでカーネルを構築する必要があることに注意してください。 そしてもちろん、Debianカーネルにはcgroupsの最新バージョンがありません。



必要な機能の最大量を使用するためにカーネルに含める必要があるもの:



CONFIG_VIRTIO_BLK=y

CONFIG_VIRTIO_NET=y

CONFIG_VIRTIO_CONSOLE=y

CONFIG_HW_RANDOM_VIRTIO=y

CONFIG_VIRTIO=y

CONFIG_VIRTIO_RING=y

CONFIG_VIRTIO_PCI=y

CONFIG_VIRTIO_BALLOON=y

CONFIG_CGROUPS=y

CONFIG_CGROUP_NS=y

CONFIG_CGROUP_FREEZER=y

CONFIG_CGROUP_DEVICE=y

CONFIG_CGROUP_CPUACCT=y

CONFIG_CGROUP_MEM_RES_CTLR=y

CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y

CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y

CONFIG_CGROUP_SCHED=y

CONFIG_BLK_CGROUP=y

CONFIG_NET_CLS_CGROUP=y








次に、 リンクをたどってそこからすべてのdebパッケージをインストールし、insmod.staticを/sbin/insmod.staticにコピーします(libguestfsは静的にコンパイルされたバージョンのinsmodを使用しているため、これが必要ですが、DebianとUbuntuにそのようなファイルはありませんが、後者にはバージョンとfebootstrapはこの問題を修正し、insmod.staticをサーバーにアップロードする必要がなくなりました。 libguestfsを使用すると、libguestfs API(C、Perl、Python、PHP)またはguestfishユーティリティを介してVDSディスクにアクセスできます。



最初のパンケーキ




これで、VDSの実行に必要なすべて、ネットワークへのアクセス、および仮想マシン自体のインストールが完了しました。



同じDebianなど、何かを配置してみましょう。 これまでのところ、ネットワークを設定せずに、デフォルトでのみ。



netinstallインストーラーをダウンロードします。



$ wget cdimage.debian.org/debian-cd/6.0.1a/i386/iso-cd/debian-6.0.1a-i386-netinst.iso







/etc/libvirt/qemu.confを編集して、非特権ユーザーから仮想マシンが動作するようにします。



user = "username"

group = "libvirt"








tunデバイスを使用するため、ケーパビリティCAP_NET_ADMINを設定する必要があります。これは、個別の実行可能ファイル、またはユーザー全体に対して行うか、qemu / kvmに必要な権限をリセットしないようにlibvirtを構成できます。



別のファイルを設定します:



sudo setcap cap_net_admin=ei /usr/bin/kvm







または、/ etc / security / capability.confファイルでユーザー全体を公開します。



cap_net_admin username







または、 / etc / libvirt / qemu.confで適切な設定を設定します



clear_emulator_capabilities = 0







ユーザーをlibvirtおよびkvmグループに追加します。



# adduser username libvirt

# adduser username kvm








仮想マシンのインストールを実行します。



$ virt-install --connect qemu:///system -n debian_guest -r 512 --arch=i686 --vcpus=1 --os-type=linux --os-variant=debiansqueeze --disk debian-6.0.1a-i386-netinst.iso,device=cdrom --disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw --network=default,model=virtio --hvm --accelerate --vnc







指定したパラメーターを詳細に分析します。







構成および管理ユーティリティ




インストールの管理および仮想マシンのクローン作成のために、2つの優れたユーティリティ-グラフィカルおよびコンソール:それぞれvirt-managerおよびvirshがあります。 もちろん、コンソールバージョンの機能ははるかに豊富ですが、システム管理者の心を傷つけるようなグラフとは比較になりません。



virt-managerを使用すると、あなた自身がそれを理解できると思います。virshのコンソール内部を掘り下げてみましょう。 実行して、何が起こるかを確認する必要があるいくつかのコマンドを次に示します。



$ virsh --connect qemu:///system list --all

$ virsh --connect qemu:///system dominfo debian_guest

$ virsh --connect qemu:///system stop debian_guest








--connect qemu:/// systemを 1000回記述するのを避けるには、次を追加します。



export VIRSH_DEFAULT_CONNECT_URI= qemu:///system







.bashrcまたはターミナルでこのコマンドを実行します。



ネットワークの準備




公式ドキュメントでは、NAT、ブリッジ、ネットワークカードの直接使用など、いくつかのネットワークオプションの使用を推奨しています。 そして、残念なことに、ネットワークと公式Webサイトで見つけたさまざまな例では、NATとブリッジネットワークのみが考慮されています。



私の設定では、eth0でトラフィックがルーティングされるTUN / TAPデバイスを使用しています。 この特定のルーティング方法が選択された理由を簡単に説明します。



各VDSはネットワークから直接アクセスできる必要があるため、NATは適していません。

理論的には他の誰かの仮想マシンのIPアドレスを「キャプチャ」する可能性があるため、ブリッジを使用したスキームはあまり信頼性が高くありません。

だから:



<interface type='ethernet'>

<mac address='52:54:00:ef:40:1d'/>

<ip address='10.10.10.100'/>

<target dev='debian_guest'/>

<model type='virtio'/>

</interface>









この構成セクションは、 /etc/libvirt/qemu/debian_guest.xmlにあるゲスト構成ファイルで直接指定する必要があります。 編集は次の方法が最適です:



$ virsh edit debian_guest







マシンが実行されていない場合、構成はその場で更新されます。 それ以外の場合は、停止するまで待機してから再起動する必要があります。



必要な仮想デバイスを作成します。



まず、パスワードなしでシステムコマンドにアクセスできるようにする必要があります。 これを行うには、sudoersに追加します。



$ sudo visudo



Cmnd_Alias QEMU = /sbin/ifconfig, /sbin/modprobe, /usr/sbin/brctl, /usr/sbin/tunctl, /sbin/sysctl, /bin/ip, /usr/bin/cgcreate, /usr/bin/cgdelete, /sbin/tc

username ALL=(ALL:ALL) NOPASSWD: QEMU








arpリクエストの転送とプロキシを有効にします。



sudo sysctl net.ipv4.conf.all.forwarding=1

sudo sysctl net.ipv4.conf.all.proxy_arp=1








これらのオプションを/etc/sysctl.confに追加して適用することもできます。



sudo sysctl -p







仮想ネットワークカードを作成し、デバイスを上げます。



sudo tunctl -b -u username -t debian_guest

sudo ifconfig debian_guest 0.0.0.0 up








目的のIPアドレスから必要なデバイスへのルートを作成します。



sudo ip route add 10.10.10.100 dev debian_guest







これで、VDSを開始できます。



$ virsh start debian_guest







コンソールに接続すると、ネットワークがないことがわかりますが、デバイスeth0ではなくeth1が取得されました。 これは、システムが/etc/udev/rules.d/70-persistent-net.rulesにロードされると、ネットワークカードのMACアドレスを書き込み 、MACが変更されると、次のような別のネットワークカードエントリが作成されるために発生しました。



SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"







このファイルを削除してVDSを再起動する必要があります-その後、ネットワークカードが正しく検出されます。



ゲストシステムに新しいネットワーク設定を登録します。



# ifconfig eth0 10.10.10.100 netmask 255.255.255.0

# route add default gw 10.10.10.10








10.10.10.10はホストシステムのIPアドレスです。 これで、他の車にpingを実行できます。



DNSサーバーを/etc/resolv.confに追加してください。これは非常に素晴らしいことです。



nameserver 8.8.8.8







ちなみに、VDSに属するネットワークデバイスやVDS自体に名前を付けると非常に便利であることがわかりました。tap0またはvnet0デバイスを所有している人や、他の人がそれらを呼び出す方法を探す必要はありません。



仮想マシンに別のIPアドレスを与える必要がある場合、ホストマシンに別のルートを登録するだけで十分です。



# ip route add 10.10.10.101 dev debian_guest







また、ゲストシステムで、ネットワークデバイスのエイリアスを作成します。



# ifconfig eth0:1 10.10.10.101







次の部分で





次の記事では、VDSイメージの作成方法、一般的にシステムごとに変更されるもの、およびこれらのパラメーターを便利に変更する方法について説明します。



All Articles