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

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

  •  
  •   mouyase · 2024-04-28 17:23:32 +08:00 · 7777 次点击
    这是一个创建于 503 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    现在 KVM 之类的虚拟机纯 CPU 基本也没损耗,缺点是在内存网卡等硬件的共享上代价比较高,但是固定内存,直通网卡显卡等硬件的情况下或者有专门的硬件卸载虚拟网卡 OVS 等负载和物理机性能差距也不大。
    geekvcn
        10
    geekvcn  
       2024-04-28 17:52:46 +08:00
    准确说 Linux namespace 接近于沙盒运行,没有硬件虚拟损耗,本质上只是隔离内核资源
    geekvcn
        11
    geekvcn  
       2024-04-28 17:54:30 +08:00
    你可以这么理解,一个共享内核上跑着不同的 rootfs
    mouyase
        12
    mouyase  
    OP
       2024-04-28 17:58:07 +08:00
    @mohumohu 直接在宿主机上装感觉会污染宿主机的环境,所以不太想这么搞。
    @geekvcn 说 chroot 我就有印象了,之前在安卓上也这么玩过。如果是这样可能还是在虚拟机里装 Docker 会更好一点吧,毕竟 CPU 损耗不大。不过这就明白为啥爱快不能用 LXC 了,他应该是有一些特殊的内核参数。
    Jeremial
        13
    Jeremial  
       2024-04-28 18:04:27 +08:00
    虽然不建议用 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  
       2024-04-28 18:06:00 +08:00
    @Jeremial sata 控制器直通给了黑群晖管理硬盘, 然后 PVE 宿主机通过 cifs 挂载群晖共享目录, 再将这些目录共享给 lxc 容器中的 jellyfin, plex 等服务
    ysc3839
        15
    ysc3839  
       2024-04-28 18:08:25 +08:00 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  
       2024-04-28 20:57:08 +08:00
    介于 openvz 和 docker 之间?
    IvanLi127
        17
    IvanLi127  
       2024-04-28 21:44:19 +08:00
    @chfight 在好几个 LXC 里跑了好多 docker 容器的默默路过...
    Jirajine
        18
    Jirajine  
       2024-04-28 21:56:08 +08:00
    @ysc3839 #15 你搞错了,lxd 可不是 lxc 的升级版,它俩完全是两套对容器在不同层面的封装。
    另外 lxc 命令实际上是 lxd 的 client ,lxc-*才是真的 lxc 。只能说 ubuntu 整的东西不适合除了它的目标群体以外的人。
    totoro625
        19
    totoro625  
       2024-04-28 22:02:38 +08:00
    lxc 跑 docker 只是第一个容器跑起来费劲,找点教程解决 docker 问题就好了
    至少比 PVE 直接安装好的多,mp 挂载文件共享就很好用

    我的理解是 lxc 相当于 docker ,但是更加底层,可以随意增减配置不会影响宿主机
    bkmi
        20
    bkmi  
       2024-04-29 00:24:54 +08:00 via Android
    我一直在 LXC 里跑 docker ,还没碰到过啥问题
    wueryi
        21
    wueryi  
       2024-04-29 08:48:01 +08:00
    虽然不建议 lxc 里跑 docker....但是咱这不是为了省事儿嘛,想测试个啥直接 clone 一个现成的 lxc 就能用 还不影响其他的容器 也不改动宿主机 不过如果是这个 docker 准备部署些常用的 呢不如新建个虚拟机里装 缺点就是内存是固定的
    wsbqdyhm
        22
    wsbqdyhm  
       2024-04-29 10:33:16 +08:00
    我也是 LXC (乌班图)里跑 docker ,还没碰到过啥问题,备份管理相当方便,有问题直接删除从来。几秒搞定
    ChaosAttractor
        23
    ChaosAttractor  
       2024-04-29 10:59:54 +08:00
    这些都是 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  
       2024-04-29 14:19:23 +08:00 via Android
    @ChaosAttractor LXC 可以启用特权容器,直接把物理网卡资源传给容器,并不一定要用 veth 网卡
    busier
        25
    busier  
       2024-04-29 19:20:59 +08:00
    lxc 是操作系统容器
    docker 是应用的容器

    本质一样,定位不同
    scguanzhong
        26
    scguanzhong  
       2024-04-30 15:27:08 +08:00
    唉我用 lxc 跑 docker ,总是会遇到网络问题,重启又好了

    直接虚拟机装个 ubuntu ,一点问题都没有
    shao
        27
    shao  
       2024-08-09 10:44:29 +08:00
    一直用 PVE LXC 跑 debian ,debian 跑 docker 。

    直到遇到 MongoDB ,才知道 cpu 不支持 avx 。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1573 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:28 · PVG 00:28 · LAX 09:28 · JFK 12:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.