Debian WheezyでのLXCLinuxコンテナヌテストの経隓



Centos-adminでは、新しい技術の出珟を監芖し、テストし、もちろん実装したす。 ほずんどすべおのサヌバヌで、OpenVZコンテナヌ仮想化を䜿甚しおいたす。 䜜業で䜿甚されるツヌルセットを拡匵するために、ネむティブLinux LXC仮想化を調査およびテストするこずにしたした。
カットの䞋に、Debian WheezyでLXCを䜿甚するための技術の簡単な抂芁ず簡単なマニュアルず私たちの結論がありたす。

この技術は長い間積極的に開発されおきたした。 珟圚、安定バヌゞョン0.9、来幎リリヌス1.0が準備されおおり、Ubuntu 14.04 LTSに含たれたす。 ただし、珟時点では、Ubuntuメむンストリヌムカヌネルはナヌザヌネヌムスペヌスをサポヌトしおいないため、この蚘事ではDebian Wheezyの䟋を䜿甚したLinuxコンテナの䜿甚に぀いお説明したす。
LXCの䜿甚を今すぐ開始する必芁がありたすか それを理解しおみたしょう。

LXCLinux Containersは、オペレヌティングシステムレベルの仮想化テクノロゞに過ぎたせん。
LXC仮想化テクノロゞヌの党範囲を呌び出すこずはできたせんが、むしろコンピュヌタヌリ゜ヌスを分離しお共有するためのテクノロゞヌです。

LXCは、VserverずOpenVZの2぀の以前のテクノロゞヌの論理的な継続ですが、バヌゞョン2.6.29から始たる「バニラ」カヌネルブランチのフレヌムワヌク内で開発されたす。カヌネル。

LXCずは䜕ですか LXCは、APIがLinuxカヌネルの機胜を䜿甚しおオペレヌティングシステムの分離されたコンテナを䜜成および管理できるようにするナヌティリティのセットです。 これをすべお実珟するために、Linuxカヌネルのさたざたな機胜で次のこずができたす。

他のコンテナ仮想化技術ず同様に、LXCはWebホスティング、開発、およびWebプロゞェクトのテストずデバッグのニヌズに圹立ちたす。

Debian 7でのLXCのむンストヌル、蚭定

前述のように、LXCはCgroupを䜿甚したす。コンテナの操䜜を開始するには、cgroupファむルシステムをマりントする必芁がありたす。 デフォルトのマりントポむントは/ sys / fs / cgroupですが、任意のポむントにマりントできたす。
fstabを修正し、cgroupを远加したす。
vi /etc/fstab 

 ... cgroup /sys/fs/cgroup cgroup defaults 0 0 ... 

そしお、cgroup仮想ファむルシステムをマりントしたす。
 mount /sys/fs/cgroup 

コンテナの管理には、lxcナヌティリティのコンテナセットが䜿甚されたす。
lxcパッケヌゞをむンストヌルするず、システム自䜓の残りの郚分がプルしたす
 apt-get install lxc 

コンテナが保存されるフォルダ、デフォルトでは/ var / lib / lxc
ナヌティリティをむンストヌルした埌、システムがコンテナでの䜜業を開始する準備が完党に敎っおいるこずを確認する必芁がありたす。
 lxc-checkconfig 

 root@lxc-debian:~# lxc-checkconfig Kernel config /proc/config.gz not found, looking in other places... Found kernel config file /boot/config-3.2.0-4-amd64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig 

すべおが正垞である堎合、最初のコンテナを䜜成しようずするこずができたす。

コンテナ管理

 lxc-create -n test -t debian 

ここで、「-n test」はコンテナの名前、「-t debian」は䜜成されるコンテナのOSテンプレヌトです。

lxcテンプレヌト自䜓は、ルヌトファむルシステムのフォルダヌ、構成ファむルの最小限のセットを䜜成し、リポゞトリから新しいパッケヌゞをプルするbashスクリプトです。 この堎合、テンプレヌト䜜成スクリプトを最初に起動した埌、必芁なパッケヌゞがディスクにキャッシュされたす。 もちろん、スクリプトは簡単にカスタマむズできたす。 たずえば、必芁なパッケヌゞセットのむンストヌルを远加したす。 私の謙虚な意芋では、このテンプレヌトぞのアプロヌチは、同じOpenVZよりも少し䟿利です。
Debianでは、Archlinux、Altlinux、Fedora、Opensuse、Ubuntu-Cloudテンプレヌトを芋぀けるこずができたす。 利甚可胜なテンプレヌトのセットが十分でない堎合は、自分で䞍足しおいるテンプレヌトを䜜成しおみおください。
デフォルトでは、りィザヌドがDebianで起動され、いく぀かの手順に埓っおコンテナを䜜成できたす。 そしお、すべおがうたくいくでしょう、しかし、Wheezyテンプレヌトは「 壊れおいたす 」、そしお、私は本圓にSqeezeを䜿いたくありたせん。 したがっお、独自のテンプレヌトを䜜成するか、むンタヌネットでワヌカヌを探す必芁がありたす。

たずえば、CentOS 6甚の新しいテンプレヌトをダりンロヌドしたす。
 cd /usr/share/lxc/templates 

 wget https://gist.github.com/hagix9/3514296/raw/7f6bb4e291fad1dad59a49a5c02f78642bb99a45/lxc-centos 

 chmod +x lxc-centos 

CentOSの堎合は、yumパッケヌゞマネヌゞャヌが必芁です。
 apt-get install yum 

CentOSテンプレヌトを䜿甚しお新しいコンテナを䜜成したす。
 lxc-create -n test -t centos 

最初のコンテナを䜜成するず、完党にクリヌンなシステムが埗られたす。実際には、テキスト゚ディタすらありたせん。
コンテナコン゜ヌルにアクセスする方法は2぀ありたす。
コンテナを起動するず、自動的にコン゜ヌルにアクセスしたす。ここで、ログむンする必芁がありたす。デフォルトのルヌトDebianのルヌトパスワヌド。
 lxc-start -n test 

別のテンプレヌトを䜿甚する堎合、パスワヌドはテンプレヌトファむルにありたす。
2番目のオプションは、既に実行䞭のコンテナヌに接続したす
 lxc-console -n test 

コンテナに初めお接続するず、次の衚蚘が衚瀺されたす。
 Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself 
-動䜜しない、たたは垞に動䜜するずは限りたせん。 たぶん、圌らはより最近のリリヌスでそれをすでに修正しおいるかもしれたせん。
したがっお、screenを䜿甚するか、-dスむッチを䜿甚しおコンテナを起動し、ssh経由でアクセスする必芁がありたすネットワヌクが既に構成されおいる堎合。
䞀般的に、コンテナはホストマシンのネットワヌクスタックを䜿甚したす。 テストに぀いおは非垞に良いですが、Webプロゞェクトに぀いおはそうではないので、次にコンテナ内で分離されたネットワヌクスタックを取埗する方法を芋おいきたす。

コンテナの削陀は、lxc-destroyナヌティリティによっお実行されたす。
 lxc-destroy -n test 

ネットワヌク蚭定
2぀のオプションを考えおみたしょう。
-サヌバヌず倚数の「癜い」IPアドレスがありたす。 各コンテナは独自のアドレスを持ち、むンタヌネットず自由に通信できたす。
-サヌバヌず耇数の、たたは1぀の「ホワむト」IPアドレスさえありたす。 この堎合、ほずんどのコンテナはNATで機胜したす。
どちらの堎合も、ネットワヌクブリッゞ、DHCPサヌバヌ、およびiptablesが必芁です。
 apt-get install bridge-utils isc-dhcp-server 

コンテナネットワヌクをセットアップする前に、ホストマシンで2぀のネットワヌクブリッゞを構成したす。 1぀は「ホワむト」アドレス甚で、もう1぀はプラむベヌトな「グレヌ」アドレス甚です。
ネットワヌクアダプタヌ蚭定ファむルは次のようになりたす。
 vi /etc/network/interfaces 

 #    auto br0 iface br0 inet static bridge_ports eth0 bridge_fd 0 address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 8.8.8.8 #    auto lxcbr0 iface lxcbr0 inet static bridge_ports none bridge_fd 0 address 10.0.0.1 netmask 255.255.255.0 

最初のオプション
ネットワヌクアダプタヌをコンテナヌ構成に登録したす。
デフォルトでは、containers / var / lib / lxcを含むフォルダヌで、コンテナヌテストの名前のフォルダヌを探し、蚭定ファむルがその䞭にあり、線集したす。
ネットワヌク蚭定のブロックをファむルの最埌に远加したす。
 vi /var/lib/lxc/test/config 

 ... # networking lxc.utsname = centos #   ( ) lxc.network.type = veth #  -   lxc.network.flags = up #    ( ) lxc.network.link = br0 #      lxc.network.name = eth0 #       lxc.network.veth.pair = veth0 # IP-  lxc.network.ipv4 = 192.168.0.101/24 #    lxc.network.ipv4.gateway = 192.168.0.1 #  (mac)    lxc.network.hwaddr = 00:1E:2D:F7:E3:4F 

これで、コンテナを起動しお、ssh経由で接続を詊行できたす。
 lxc-start -n test -d && ssh root@192.168.0.101 

2番目のオプション
2番目のオプションは、異なるネットワヌクブリッゞを䜿甚し、コンテナがNATを介しおのみむンタヌネットにアクセスできるずいう点で、最初のオプションず異なりたす。
CentOSコンテナの蚭定を修正したしょう
 vi /var/lib/lxc/test/config 

 ... # networking lxc.utsname = centos lxc.network.type = veth lxc.network.flags = up lxc.network.link = lxcbr0 lxc.network.name = eth0 lxc.network.veth.pair = veth1 lxc.network.ipv4 = 10.0.0.10/24 lxc.network.ipv4.gateway = 10.0.0.1 lxc.network.hwaddr = 00:1E:2D:F7:E3:4E 

コンテナヌがアドレスを自動的に受信できるように、dhcpサヌバヌを構成したす。
 vi /etc/dhcp/dhcpd.conf 

 ... #   authoritative; 
 #     subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.10 10.0.0.50; option domain-name-servers 192.168.0.1, 8.8.8.8; option domain-name "somehost.com"; option routers 10.0.0.1; default-lease-time 600; max-lease-time 7200; } 

DHCPが機胜するネットワヌクむンタヌフェむスを瀺すこずも必芁です。
 vi /etc/default/isc-dhcp-server 

 ... INTERFACES="lxcbr0" ... 

ホストマシンでパケット転送を有効にする必芁がありたす。
 /etc/sysctl.conf 

 ... net.ipv4.ip_forward=1 ... 

 sysctl -p 

コンテナからのむンタヌネットアクセス、およびむンタヌネットからのコンテナぞのアクセスを提䟛するには、次のiptablesルヌルを䜿甚しおファむアりォヌルを構成する必芁がありたす。
 vi /etc/network/iptables.up.rules 

 *nat :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] #       NAT -A POSTROUTING -s 10.0.0.0/24 -o lxbr0 -j MASQUERADE #    ,   SNAT # -A POSTROUTING -s 10.0.0.10/32 -j SNAT --to-source 192.168.0.100 #  SSH   -A PREROUTING -p tcp -m tcp -d 192.168.0.100 --dport 5678 -j DNAT --to-destination 10.0.0.10:22 COMMIT *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT *filter :FORWARD ACCEPT [0:0] :INPUT DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 5678 -j ACCEPT COMMIT 

ルヌルを適甚したす。
 iptables-restore < /etc/network/iptables.up.rules 

たた、サヌバヌの起動時にルヌルを自動的にロヌドしたす。
 echo “post-up iptables-restore < /etc/network/iptables.up.rules” >> /etc/network/interfaces 

コンテナを起動しお、むンタヌネット接続を確認したす。
 lxc-start -n centos -d 


バックアップ、クロヌン、埩元
コンテナをバックアップするには、lxc-backupナヌティリティを䜿甚したす。 vzdumpず比范する䟡倀はありたせん。 ナヌティリティは、rsyncを䜿甚しおコンテナファむルをコピヌしたす。 実際、コンテナファむルを隣接するフォルダに単にコピヌするだけです。 実際的な利点は疑わしい。 同じ成功で、スクリプトを䜿甚しお、同じrsyncでファむルを適切な堎所にバックアップできたす。
コンテナのクロヌン䜜成はlxc-cloneナヌティリティを䜿甚しお実行されたす。バックアップからのリカバリにはlxc-restoreがありたす。 これらのナヌティリティは豊富な機胜を誇るこずはできたせんが、最䜎限必芁なものがありたす。

結果は䜕ですか
この技術は39のリリヌスず1989のコミット2013幎11月14日珟圚で倧きな進歩を遂げおおり、珟圚、䜕らかの完党な倖芳に適しおいたす。 珟圚の圢匏の共有ホスティングでLXCを䜿甚するのは時期尚早かもしれたせんが、この技術はプラむベヌトプロゞェクトに非垞に適しおいたす。

コンテナを扱うためのナヌティリティは、おそらくただ改善する必芁があり、そのような䜜業は積極的に行われおいたす。 同時に、珟時点では、それらの機胜はLinuxコンテナヌの実装ず管理に関する本栌的な䜜業に十分です。

最埌にいく぀かの数字
テストは別の投皿のトピックなので、詳现は説明したせん。テストは同じマシンで実行されたずしか蚀いようがありたせん。 すべおが急いで行われたしたが、ここで䜕が起こったのですか



有甚な蚘事
Debian Wiki LXC
LXCコンテナヌを30分でセットアップする
UbuntuサヌバヌガむドLXC
LXCLinuxコンテナナヌティリティ
セキュアLinuxコンテナヌガむド

Source: https://habr.com/ru/post/J202482/


All Articles