有经验的朋友应该清楚,即使使用了virtio这样的半虚拟化驱动,虚拟机io仍然非常占用cpu。唯一的办法是硬件直通,而即便是硬件直通下,虚拟机的整体开销也比容器大一个数量级。

一句话简单科普下的话,lxc就是一个基于cgroup的linux容器技术。有些朋友就要问了,docker也是基于cgroup的,docker也能安装openwrt,为什么不选择鼎鼎有名的docker,而选择没什么人听说过的lxc呢? 一方面是lxc的实现方式。lxc实现了完整的系统容器化,这意味着在lxc容器里有完整的init生命周期和内核信号,完全可以当成一个仅支持linux系统的虚拟机使用。而docker的设计目标则是进程容器化。所谓的进程容器化就是一个容器里只跑一个进程,多进程分别安装在多个容器里。在docker里安装openwrt显然有悖于这一目标,即使可以通过/sbin/init方式来启动容器也会发生很多其他问题。 问题之一是网络支持。docker默认的桥接网络是only-host,不能用于路由。而host模式则直接无法启动openwrt,唯一可选的模式是macvlan。而macvlan有两个问题,其一是实现macvlan需要修改数据包包头并在内核io路径中做了特殊判断,这会带来可见的性能开销。其二是内核里macvlan与主机是单向隔离的,说人话就是容器里可以ping通主机但主机不能ping通容器。解决的办法有二,第一种是通过自定义路由表方式把数据包送出内核,让数据在交换机里转一圈再回来。第二种方式是新建一个macvlan方式的网桥并把主机网卡桥接上去,这样主机与容器处在同一个macvlan网络里,就不存在隔离问题了。这两种方案显然都会造成主机网络性能降低,对性能较低的小主机来说是无法接受的。而lxc则支持最普通的虚拟网桥,可以直接暴露在物理网络上,也可以无隔阂与主机通信。 问题之二是数据持久化问题。docker的设计思路是分层文件系统,容器里发生文件修改实际上是产生了一个新的数据层,这点容器构建来说非常友好,对运行无状态服务来说也没有丝毫问题,但是对openwrt这样时不时更新下软件包、更新下配置文件非常不友好。而lxc则简单粗暴很多,容器直接使用主机的一个文件夹或者块设备,维护与迁移都非常方便。 介于以上几个基本事实,至少在安装openwrt这件事上没有任何选择docker的理由。

一、制作rootfs.tar.gz压缩包

wget https://www.aitxn.com/wp-content/uploads/2023/08/openwrt-x86-64-generic-squashfs-rootfs.img.gz

apt install squashfs-tools

gzip -d openwrt-x86-64-generic-squashfs-rootfs.img.gz

unsquashfs openwrt-x86-64-generic-squashfs-rootfs.img

1、cd squashfs-root/

2、tar -czf ../openwrt-x86-64-generic-squashfs-rootfs-plus-daily.tar.gz *

1、cd ..

2、cp openwrt-x86-64-generic-squashfs-rootfs-plus-daily.tar.gz /var/lib/vz/template/cache/

pct create 200 local:vztmpl/openwrt-x86-64-generic-squashfs-rootfs-plus-daily.tar.gz --rootfs local:1 --ostype unmanaged --hostname OpenWrt --arch amd64 --cores 6 --memory 1024 --swap 0 --onboot yes -net0 bridge=vmbr0,name=eth0

说明:200是CT的ID编号,你也可以自己改成自己需要的;local:1是存储位置,cores 6是分配的CPU核心数,memory 1024是分配的内存大小,你自己按自己的硬件水平合理分配就可以了。

nano /etc/pve/lxc/200.conf

200是CT的ID编号,你的不一定是200这个编号,自己看你前面创建的是哪个编号替换就可以了。

lxc.cgroup2.devices.allow: c 10:200 rwm

lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

至于怎么编辑网络?怎么登录?怎么设置?请看我的另外一篇文章

二、使用篇:openwrt作为旁路网关的网络编辑以及后台登录与设置教程

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。