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 中使用 cgroup(在比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 核心。

相關內容