OpenVZによる仮想化





Habrには、コンテナ仮想化の良し悪しに関する多くの記事がありますが、インストールと構成に関する段階的な手順は見つかりませんでした。 このギャップを埋めようとします。



仮想化は、サーバーリソースをより合理的に使用できるため、非常に重要なトピックです。 そして、私はOpenVZに会えてとてもうれしかったです。



OpenVZは、Linuxカーネルに基づいたオペレーティングシステムレベルでの仮想化技術の実装です。 OpenVZを使用すると、1つの物理サーバーでオペレーティングシステムの多くの隔離されたコピー、いわゆるコンテナ(仮想環境、VE)を実行できます。



OpenVZはLinuxカーネルに基づいているため、GNU / Linuxディストリビューションのみが「ゲスト」システムとして機能できます。 ただし、OpenVZのオペレーティングシステムレベルでの仮想化には、管理の容易さ、ホストシステムでの仮想コンテナーの高密度配置(通常、VPSホスティングのコストにプラスの影響)、完全な仮想化テクノロジーと比較してわずかに優れたパフォーマンスなど、多くの利点もあります。



もちろん、十分な欠陥があります。 主なものは、KVMとは異なり、OpenVZモジュールはバニラコアに含まれていないため、後者の機能には別のコアが必要であり、そのバージョンは最後からは程遠いということです。 この記事の公開時点で、最新の安定バージョンは2.6.32-042stab084.14です。 このことから、本質的には、すべてのディストリビューションがOpenVZでホストシステムとして機能できるわけではなく、2.6.32カーネルお​​よびそのバージョンのみで機能することがわかります。 そのため、OpenVZ-たとえば、Ubuntu 12.04 LTSのカーネルは起動しそうにありません(既に試しました)。カーネルはここではバージョン3.8です。 RedHat 6(CentOS 6、Scientific Linux 6)およびDebian 7ではすべてがインストールされ、これらのディストリビューションはParallelsによって公式にサポートされているため、すべてがそれほど悪いわけではありません。



次の欠点は、すべてのコンテナが1つのコア(ホストシステムコア)で動作し、必要なカーネルモジュールの追加が完全な仮想化テクノロジーほど簡単ではないことです。 その結果、カーネルとの緊密な統合を必要とするNFSサーバーまたはその他のサービスは、OpenVZコンテナーで動作できなくなります。 仮想化システムのその他の短所と利点は、たとえばここにあります



実践のない理論は死んでいるので、今度はOpenVZのホストシステムのインストールと構成について説明します。 ホストシステムとしてCentOS 6.5を選択しました。 OpenVZカーネルをインストールするためのリポジトリと、コンテナを操作するためのユーティリティを追加します。



# wget -P /etc/yum.repos.d/ http://ftp.openvz.org/openvz.repo # rpm --import http://ftp.openvz.org/RPM-GPG-Key-OpenVZ
      
      





カーネルとユーティリティをインストールします。



 # yum install vzctl vzquota ploop
      
      





公式マニュアルには、バージョン4.4のvzctlでは、カーネルパラメーター設定(/etc/sysctl.conf)は必要ないと書かれています。



再起動して、カーネルのバージョンを確認します。



 # uname -a Linux centos 2.6.32-042stab084.14 # 1 SMP Mon Dec 16 18:16:56 MSK 2013 x86_64 x86_64 x86_64 GNU/Linux
      
      





バージョンが同じ場合、すべてが正しく行われます。そうでない場合、どのカーネルがGRUBをロードするかを確認する必要があります。 コンテナの作成に進みます。



 # vzctl create 103 --ostemplate debian-7.0-x86_64 --config vswap-2g - 2014-01-14 16:54:54 - http://download.openvz.org/template/precreated/debian-7.0-x86_64.tar.gz Resolving download.openvz.org ... 199.115.104.11 , 2620 : e6 :: 104:11 Connecting to download.openvz.org | 199.115.104.11 | 80 ... connected . HTTP request sent , awaiting response ... 200 OK Length: 303736979 ( 290M ) [ application / x - gzip ] Saving to : ` /vz/template/cache/debian-7.0-x86_64.tar.gz ' 43 % [ =========================== >] 132,616,648 2.17M / s eta 2m 1s
      
      





Debian 7でコンテナを作成するためのテンプレートは、OpenVZ Webサイトからダウンロードされ、インストールされます。



 # vzlist -a      CTID NPROC STATUS IP_ADDR HOSTNAME       103 - stopped -
      
      





新しいコンテナを設定しましょう:



 # vzctl set 103 --onboot yes --save #       - # vzctl set 103 --hostname debian7.example.com - save #   # vzctl set 103 --save --ipadd 192.168.1.31 #  IP ,  VENET -  # vzctl set 103 --save --nameserver 8.8.8.8 -nameserver 8.8.4.4 #  DNS -  # vzctl set 103 --save --cpus 4 # - cpu- # vzctl set 103 --save --ram 8G # RAM # vzctl set 103 --save --swap 4G # swap # vzctl set 103 --save --diskspace 100G #    # vzctl start 103 #   # vzctl exec 103 passwd #   root-
      
      





したがって、コンテナはDebian 7で作成されました。外部との通信用に、VENET接続が設定されました。



将来的には、構成ファイルを編集して、コンテナーの構成をわずかに修正できます。



 # vim /etc/vz/conf/103.conf # RAM PHYSPAGES = " 0:2097152 " # Swap SWAPPAGES = " 0:1048576 " # Disk quota parameters ( in form of softlimit : hardlimit ) DISKSPACE = " 104857600:104857600 " DISKINODES = " 200000:220000 " QUOTATIME = "0" # CPU fair scheduler parameter CPUUNITS = "1000" VE_ROOT = "/vz/root/$VEID" VE_PRIVATE = "/vz/private/$VEID" OSTEMPLATE = "debian-7.0-x86_64" ORIGIN_SAMPLE = "vswap-2g" ONBOOT = "yes" HOSTNAME = "debian7.example.com" NETIF = "ifname = eth0 , mac = 00:18:51:CF:E9:09 host_ifname = veth104.0 , host_mac = FE:FF:FF:FF:FF:FF" NAMESERVER = "8.8.8.8 8.8.4.4" CPUS = " 4"
      
      





物理的には、コンテナは/ vz / private / 103にあります。



 # cd /vz/private/103 # ls bin dev home lib64 media opt root sbin srv tmp var boot etc lib lost + found mnt proc run selinux sys usr
      
      





コンテナが機能する場合は、/ vz / private / 103と同期するパス/ vz / root / 103を使用してすべての変更を追加することをお勧めします。



OpenVZには、コンテナ内でVETH(仮想ETHernet)またはVENET(仮想ネットワーク)ネットワークデバイスを構成する機能があります。 VETHはコンテナ内のブロードキャストメッセージを許可し、インターフェイスにMACアドレスを持っているため、DHCPを使用してアドレスの自動受信を構成したり、ブロードキャストメッセージを必要とするSambaサーバーを構成したりできます。 VETHインターフェースはvzctlを使用してのみ設定され、それ以降のすべてのインターフェース設定(IP設定、ゲートウェイなど)はコンテナー自体で実行する必要があります。 ただし、ほとんどの場合、VENET接続で十分です。 後者の利点には、VETHと比較した高速性と、ホストマシンリソースによる迅速な構成が含まれます。



画像



コンテナネットワーク接続の詳細については、 公式のOpenVZ wikiを参照してください



次に、VETH接続でコンテナを作成するプロセスを説明します。 これを行うには、まずvmbr0ブリッジを作成する必要があります。 bridge-utilsパッケージをインストールしてから、vmbr0インターフェイスを構成します。



 # vim /etc/sysconfig/network-scripts/ifcfg-vmbr0 DEVICE = "vmbr0" BOOTPROTO = "static" IPV6INIT = "no" ONBOOT = "yes" TYPE = "Bridge" DELAY = 0 IPADDR = 192.168.1.30 NETMASK = 255.255.255.0 GATEWAY = 192.168.1.1
      
      





そして、eth0は次のように再構成されます。



 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE = "eth0" ONBOOT = "yes" IPV6INIT = "no" TYPE = "Ethernet" BRIDGE = "vmbr0"
      
      





以前は、この例のeth0の静的IPは192.168.1.30でした。



次の内容で/etc/vz/vznet.confを作成します。



 # vim /etc/vz/vznet.conf #! /bin/bash EXTERNAL_SCRIPT = "/usr/sbin/vznetaddbr"
      
      





ホストマシンを再起動します。



今回は、例として、別のディストリビューションを選択して、VETHネットワーク接続でコンテナーを作成します。



 # vzctl create 102 --ostemplate centos-6-x86_64 --config vswap-1g
      
      





それに応じて設定します:



 # vzctl set 102 --save --onboot yes # vzctl set 102 --save --hostname centos6.example.com # vzctl set 102 --save --netif_add eth0,,,FE:FF:FF:FF:FF:FF #  VETH- # vzctl set 102 --save --nameserver 8.8.8.8 --nameserver 8.8.4.4 # vzctl set 102 --save --cpus 4 # vzctl set 102 --save --ram 8G # vzctl set 102 --save --swap 4G # vzctl set 102 --save --diskspace 100G # vzctl start 102 # vzctl exec 102 passwd
      
      





新しいコンテナのネットワーク構成を設定し、ネットワークを再起動します。



 # cat << _EOF_ > /vz/root/102/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE = "eth0" HOSTNAME = "centos6" IPV6INIT = "no" MTU = "1500" TYPE = "Ethernet" ONBOOT = yes BOOTPROTO = static IPADDR = 192.168.1.32 NETMASK = 255.255.255.0 GATEWAY = 192.168.1.1 _EOF_
      
      





 # vzctl exec 102 /etc/init.d/network restart
      
      





Ubuntu / Debianの場合、ネットワーク設定は/ etc / network / interfacesにあります。



 # cat << _EOF_ > /vz/root/102/etc/network/interfaces auto lo eth0 iface lo inet loopback iface eth0 inet static address 192.168.1.32 netmask 255.255.255.0 gateway 192.168.1.1 _EOF_
      
      







 # vzctl exec 102 /etc/init.d/networking restart
      
      





その結果、ネットワーク接続(VETH)は次のようになります。



 # ip a 1: lo : <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN    link / loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1 / 8 scope host lo    inet6 :: 1 /128 scope host       valid_lft forever preferred_lft forever 2: venet0 : <BROADCAST,POINTOPOINT,NOARP> mtu 1500 qdisc noop state DOWN    link / void 3: eth0 : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN    link / ether 00:18:51 : c0 : eb : 63 brd ff : ff : ff : ff : ff : ff    inet 192.168.1.35/24 brd 192.168.1.255 scope global eth0    inet6 fe80 :: 218:51 ff : fec0 : eb63/64 scope link       valid_lft forever preferred_lft forever
      
      





VENETが次のような場合:



 # ip a 1: lo : <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN    link / loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1 / 8 scope host lo    inet6 :: 1 /128 scope host       valid_lft forever preferred_lft forever 2: venet0 : <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN    link / void    inet 127.0.0.2/32 scope host venet0    inet 192.168.1.31/32 brd 192.168.1.31 scope global venet0 : 0 3: eth0 : <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN    link / ether 00:18:51 : a6 : 29: b0 brd ff : ff : ff : ff : ff : ff
      
      





コンテナまたはそのクォータは、vzctlユーティリティを介して管理されます。 最も人気のあるチームについて説明します。



 # vzctl start $CTID #     $CTID # vzctl stop $CTID #   # vzctl restart $CTID #  # vzctl destroy $CTID #  ,     # vzctl exec $CTID command #     # vzctl enter $CTID #     $CTID   -  # vzctl set $CTID different_options - save #     
      
      





もちろん、各コンテナにオーバーロードせずにクォータを設定することもできます。

ディスクボリュームとiノードの数の制限は、次のように発生します(そのようなsoftware_limitを設定するための構文:hardware_limit )。



 # vzctl set 101 --diskspace 1000000:1100000 --save # 1000000 -   1GB # vzctl set 101 --diskinodes 90000:91000 --save #  -   . # vzctl set 101 --quotatime 600 --save #        hardware limit
      
      





ディスクI / O(ディスクI / O)の優先度も設定できます。 最高レベルは7、最低レベルは0です。デフォルトでは、ディスクI / Oは4に設定されていますが、これは変更できます。



 # vzctl set 101 --ioprio 6 --save
      
      





そしてチェック:



 # grep IOPRIO /etc/vz/conf/101.conf IOPRIO = " 6"
      
      





したがって、コンテナが使用するコアの数を3に増減できます。



 # vzctl set 101 --cpus 3 --save
      
      





ホストシステムのコア数が少ない場合、当然のことながら必要な変更は行われません。

RAMとスワップメモリ​​の量の設定は次のとおりです。



 # vzctl set 101 --physpages 512M --save # vzctl set 101 --swappages 512M --save
      
      





openvz.org/User_Guide/Managing_Resourcesでクォータの詳細をご覧ください。

すべてのコンテナとその状態を表示するには、vzlistユーティリティを使用できます。



 # vzlist -a      CTID NPROC STATUS IP_ADDR HOSTNAME       101 42 running 192.168.1.31 ubuntu1310.example.com       102 17 running - centos6.example.com       103 20 running - debian7.example.com       104 20 running - debian72.example.com
      
      





コンテナダンプを覚えておくことは非常に重要です。 これには、vzdumpという名前の無関係なユーティリティがあります。 その助けを借りて、作業を停止せずにコンテナを便利にコピー/移行/バックアップすることができます。 最初にインストールする必要があります:



 # rpm -ivh "http://ftp.openvz.org/contrib/utils/vzdump/vzdump-1.2-4.noarch.rpm"
      
      





そして、次のように使用できます。



 # vzdump --suspend 102 INFO: starting new backup job : vzdump --suspend 102 ... INFO: backup mode : suspend INFO: starting first sync /vz/private/102/ to /vz/dump/vzdump-openvz-102-2014_02_02-14_05_46.tmp INFO: Finished Backup of VM 102 ( 00:02:14 ) INFO: Backup job finished successfuly
      
      





そしてすぐに、新しいCTIDを持つ新しいマシンにダンプを復元する機会があります。



 # vzrestore /vz/dump/vzdump-openvz-102-2014_02_02-14_05_46.tar 201 INFO: restore openvz backup '/vz/dump/vzdump-openvz-102-2014_02_02-14_05_46.tar ' using ID 201 INFO: extracting archive '/vz/dump/vzdump-openvz-102-2014_02_02-14_05_46.tar ' INFO: Total bytes read : 649799680 ( 620MiB , 62MiB / s ) INFO: extracting configuration to '/etc/vz/conf/201.conf ' INFO: restore openvz backup '/vz/dump/vzdump-openvz-102-2014_02_02-14_05_46.tar ' successful
      
      





仮想マシンの便利な管理のために、 ProxmoxまたはOpenVZ Web Panelをお勧めします

これが私が書きたかったすべてのようです。 ご質問がある場合は、お気軽にコメントをお寄せください。



有用なリソース:

www.ibm.com/developerworks/ru/library/l-openvz_1/index.html

blog.shaggy-cat.ru/2010/03/openvz_25.html

openvz.org/Quick_installation

openvz.org/Installation_on_Debian

openvz.org/Quick_Installation_CentOS_6

openvz.org/User_Guide/Managing_Resources

www.altlinux.org/OpenVZ

openvz.org/Cloning_VE

openvz.org/Backup_of_a_running_container_with_vzdump

www.howtoforge.com/clone-back-up-restore-openvz-vms-with-vzdump

owp.softunity.com.ru

www.janoszen.com/2013/01/22/lxc-vs-openvz



All Articles