V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mouyase
V2EX  ›  宽带症候群

PVE 的那个 LXC 容器是个什么概念?说是性能和物理机几乎一样?

  •  
  •   mouyase · 14 天前 · 2444 次点击

    我是想用 PVE 整一个 DNS ,路由,网关的一体机,然后看网上的一些方案,都是先用 LXC 跑一个容器,然后在这个里面再跑一个 Docker 啥的。

    有点不太明白 LXC 容器是个啥概念。

    而且据说 LXC 下网卡的效率和直通类似?可以 virtio 的性能强得多?

    那为啥不能在 LXC 容器下装 OpenWRT 或者爱快之类的?

    26 条回复    2024-04-30 15:27:08 +08:00
    username1919810
        1
    username1919810  
       14 天前
    LXC 可以装 op 啊
    chfight
        2
    chfight  
       14 天前
    LXC 里面尽量不要跑 Docker
    LXC 可以直接安装 OpenWRT
    mouyase
        3
    mouyase  
    OP
       14 天前
    @chfight 他这个 LXC 容器是不是就和 Docker 是类似的技术
    mouyase
        4
    mouyase  
    OP
       14 天前
    @chfight 那我要跑 Docker 的话,还是先建一个虚拟机装个 Ubuntu 然后再在 Ubuntu 里装 Docker 会比较好?
    chfight
        5
    chfight  
       14 天前
    @mouyase #3 都是虚拟化的
    frankilla
        6
    frankilla  
       14 天前
    我之前用 lxc 跑 docker ,然后大佬给我提醒了一下 lxc 不要跑,会遇到各种各样闹心的问题。直接建议我 debian 跑 docker ,但是跑 OpenWrt 是没问题。不过我没有用 lxc 跑 OpenWrt ,强迫症吧。
    chfight
        7
    chfight  
       14 天前
    @mouyase #4 可以宿主机直接跑 Docker ,也可以 KVM 安装 linux 再跑。
    mohumohu
        8
    mohumohu  
       14 天前
    PVE 就是 debian ,按 debian 的教程直接装 docker 就可以,配置简单性能最好,但隔离性不够好,见仁见智。
    或者专门装个虚拟机比如 alpine 来跑 docker ,稳定性兼容性隔离性都很好。
    geekvcn
        9
    geekvcn  
       14 天前
    关键词 chroot
    LXC LXD Docker 都是基于 Linux 内核 chroot 。优点就是能共享系统硬件资源,缺点就是内核共享没法单独配置内核参数,隔离度没有虚拟机高。

    现在 KVM 之类的虚拟机纯 CPU 基本也没损耗,缺点是在内存网卡等硬件的共享上代价比较高,但是固定内存,直通网卡显卡等硬件的情况下或者有专门的硬件卸载虚拟网卡 OVS 等负载和物理机性能差距也不大。
    geekvcn
        10
    geekvcn  
       14 天前
    准确说 Linux namespace 接近于沙盒运行,没有硬件虚拟损耗,本质上只是隔离内核资源
    geekvcn
        11
    geekvcn  
       14 天前
    你可以这么理解,一个共享内核上跑着不同的 rootfs
    mouyase
        12
    mouyase  
    OP
       14 天前
    @mohumohu 直接在宿主机上装感觉会污染宿主机的环境,所以不太想这么搞。
    @geekvcn 说 chroot 我就有印象了,之前在安卓上也这么玩过。如果是这样可能还是在虚拟机里装 Docker 会更好一点吧,毕竟 CPU 损耗不大。不过这就明白为啥爱快不能用 LXC 了,他应该是有一些特殊的内核参数。
    Jeremial
        13
    Jeremial  
       14 天前
    虽然不建议用 lxc 跑 docker, 但是实际跑起来也没啥问题.
    我是希望宿主机尽可能的干净, 全靠虚拟机或 lxc, 升级啥的方便.

    目前已经在跑的
    1. vm 1, 安装的 openwrt
    2. 3 个 lxc 容器装 docker, 跑了 traefik, vaultwarden, ddns, jellyfin, plex 等服务. 显卡直通, 挂载 nfs 这些也没问题
    3. 2 个 lxc 容器分别用包管理装的 tailscale 和 zerotier
    4. vm 2, 装的黑群晖
    Jeremial
        14
    Jeremial  
       14 天前
    @Jeremial sata 控制器直通给了黑群晖管理硬盘, 然后 PVE 宿主机通过 cifs 挂载群晖共享目录, 再将这些目录共享给 lxc 容器中的 jellyfin, plex 等服务
    ysc3839
        15
    ysc3839  
       14 天前 via Android
    lxc 是和 Docker 类似的另一套容器平台,使用的底层接口是一样的。
    但是 lxc 有专门支持容器中运行 init system ,Docker 没有,如果你要在 Docker 容器里跑 systemd 之类的,一般得手动 mount 啥进去,还要开启 privileged ,跑起来还会发现 docker stop 不能正常停止 systemd service ,只能等超时被 kill 掉,问题挺多的。
    用 lxd 的话直接跑就完事了,没有那么多坑,不过跑 OpenWrt 可能还是有些小坑,例如 iptables 未初始化的问题。
    另外 Docker 许多参数在跑起来后就不能改了,比如不能 mount ,但是 lxd 可以运行时 mount 。
    关于 lxd 和 lxc ,前者是后者的升级版,用起来会方便很多。我自己是只在 Ubuntu 上用过 lxd ,PVE 的 lxc 如何我不知道。
    rulagiti
        16
    rulagiti  
       14 天前
    介于 openvz 和 docker 之间?
    IvanLi127
        17
    IvanLi127  
       14 天前
    @chfight 在好几个 LXC 里跑了好多 docker 容器的默默路过...
    Jirajine
        18
    Jirajine  
       14 天前
    @ysc3839 #15 你搞错了,lxd 可不是 lxc 的升级版,它俩完全是两套对容器在不同层面的封装。
    另外 lxc 命令实际上是 lxd 的 client ,lxc-*才是真的 lxc 。只能说 ubuntu 整的东西不适合除了它的目标群体以外的人。
    totoro625
        19
    totoro625  
       14 天前
    lxc 跑 docker 只是第一个容器跑起来费劲,找点教程解决 docker 问题就好了
    至少比 PVE 直接安装好的多,mp 挂载文件共享就很好用

    我的理解是 lxc 相当于 docker ,但是更加底层,可以随意增减配置不会影响宿主机
    bkmi
        20
    bkmi  
       14 天前 via Android
    我一直在 LXC 里跑 docker ,还没碰到过啥问题
    wueryi
        21
    wueryi  
       13 天前
    虽然不建议 lxc 里跑 docker....但是咱这不是为了省事儿嘛,想测试个啥直接 clone 一个现成的 lxc 就能用 还不影响其他的容器 也不改动宿主机 不过如果是这个 docker 准备部署些常用的 呢不如新建个虚拟机里装 缺点就是内存是固定的
    wsbqdyhm
        22
    wsbqdyhm  
       13 天前
    我也是 LXC (乌班图)里跑 docker ,还没碰到过啥问题,备份管理相当方便,有问题直接删除从来。几秒搞定
    ChaosAttractor
        23
    ChaosAttractor  
       13 天前
    这些都是 Linux 的容器化技术,内核层面依赖 CGourps 实现,它可以提供在同一个内核中隔离多个用户空间进程,你可以理解为 LXC 里面的进程和外面的进程性能什么都是一样的(当然也可以限制),只是所有东西互相隔离
    共享内核意味着 0 额外性能和内存开销,只有里面的进程会占用内存
    而 LXC 则是管理管理 CGroups 和各种 Namespace 隔离的用户空间程序,类似的还有 ContainerD 和 LXD ,Docker 和 K8S 则基于 ContainerD
    此外它们支持嵌套,所以在 LXC 中运行 Docker 并无不妥,因为 LXC 一般直接用于替代 Hypervisor
    但 LXC 的网络基于内核的 NetNS ,并且因为共享内核和非特权的设计使得 eBPF 和 iptables/nftables 功能受限,而且大概率你还需要 CPU 转发(虚拟化则你可以直通网卡),各种硬件卸载功能也受限(当然如果你在用最新最热的 Mellanox 网卡那支持的还蛮好的)
    一般作为路由我觉得不太合适
    geekvcn
        24
    geekvcn  
       13 天前 via Android
    @ChaosAttractor LXC 可以启用特权容器,直接把物理网卡资源传给容器,并不一定要用 veth 网卡
    busier
        25
    busier  
       13 天前
    lxc 是操作系统容器
    docker 是应用的容器

    本质一样,定位不同
    scguanzhong
        26
    scguanzhong  
       12 天前
    唉我用 lxc 跑 docker ,总是会遇到网络问题,重启又好了

    直接虚拟机装个 ubuntu ,一点问题都没有
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   983 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 19:33 · PVG 03:33 · LAX 12:33 · JFK 15:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.