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