OpenVZ VPS 上の LXC コンテナ

OpenVZ VPS 上の LXC コンテナ

OpenVZ でホストされている VPN で LXC を実行しようとしています。ubuntu、centos、debian など、複数のイメージ フレーバーでこれを実行しようとしましたが、うまくいきませんでした。LXC は正しくインストールされますが、ネットワークが原因でコンテナーが起動しません。これは、インターフェイスのブリッジングに関係しているようです。

これと似たような問題に遭遇した人はいますか? これが OpenVZ の制限であるかどうか知っている人はいますか?

Ubuntu 14.04 の新規インストールから開始します。

sudo apt-get update 
sudo apt-get install lxc
sudo lxc-create -n p1 -t ubuntu 
sudo lxc-start -n p1 --logfile log.txt
cat log.txt
    lxc-start 1434379565.265 ERROR    lxc_conf - conf.c:instantiate_veth:2949 - failed to create veth pair (vethP4LPC8 and vethO6MP73): Operation not supported
    lxc-start 1434379565.265 ERROR    lxc_conf - conf.c:lxc_create_network:3261 - failed to create netdev
    lxc-start 1434379565.265 ERROR    lxc_start - start.c:lxc_spawn:826 - failed to create the network
    lxc-start 1434379565.265 ERROR    lxc_start - start.c:__lxc_start:1080 - failed to spawn 'p1'
    lxc-start 1434379565.265 ERROR    lxc_start_ui - lxc_start.c:main:342 - The container failed to start.
    lxc-start 1434379565.265 ERROR    lxc_start_ui - lxc_start.c:main:346 - Additional information can be obtained by setting the --logfile and --logpriority options.

そして試しています:

sudo brctl addbr lxcbr0
  add bridge failed: Invalid argument

答え1

OpenVZ は、LXC や Docker と同様にオペレーティング システムの仮想化テクノロジですが、さまざまなカーネル パッチに基づいており、多くはメインストリーム カーネルと統合されません。

OpenVZ は古いカーネル (2.6.x) に基づいており、現在ではコンテナの管理に必要なもの (主に cgroup) があまりありません。残念ながら、OpenVZ 仮想環境内で LXC コンテナを実行することはできません。

答え2

他の回答を軽視するつもりはありません(OpenVZコンテナはコンテナである) ですが、この興味深いリンクをご覧ください: OVZ CT の Docker(「OpenVZ カーネル 042stab105.4 以降では、コンテナー内で Docker を実行できます。この記事ではその方法について説明します。」)

問題に対する解決策が見つかるかどうかはわかりませんが、理論的にはCTでcgroupsを使用することが可能です(042stab105.4そして、かなり新しい翻訳基本的に必要なものは以下のとおりです。

  • カーネル構成を確認してください。lxc-checkconfig指定されたカーネルで試すか、CONFIG=/boot/config-2.6.32-openvz-042stab108.2-amd64 lxc-checkconfigインストールされている任意のカーネルを使用してください。

問題がないようであれば、先に進んでください。

vzctl set $veid --save --features bridge:on --netif_add eth0 --netfilter full --devnodes net/tun:rw

CT にカスタム cgroup をマウントします。

mount -t tmpfs tmpfs /sys/fs/cgroup
mkdir /sys/fs/cgroup/freezer,devices
mount -t cgroup cgroup /sys/fs/cgroup/freezer,devices -o freezer,devices
mkdir /sys/fs/cgroup/cpu,cpuacct,cpuset
mount -t cgroup cgroup /sys/fs/cgroup/cpu,cpuacct,cpuset/ -o cpu,cpuacct,cpuset

確かに面白い構造ですが、ovz コントロールと cgroup は本質的に互換性がないわけではありません (多くの cgroup 機能は空のスタブ関数です。たとえば、何もせず、エラー メッセージも表示しません)。

免責事項: まだ試していません (カーネルに cgroup 名前空間がありません)。

もう一つの便利なリンクはこのDocker問題追跡コメント必要な機能を備えた OVZ カーネルをコンパイルする方法について説明します。

関連情報