本文正在施工!有部分配置并不详细,仅供参考!过几天我会新编译并部署一次,届时会丰富细节
今年家里要装修,准备搞个机柜,然后琢磨着看看现在这些设备有哪些可以精简的,我感觉目前运行HA的树莓派4B完全可以去掉,转而使用我的openwrt软路由来部署。我一开始打算用 docker 但是目前 openwrt 已经迁移到了 nftables 而 docker 依然非常顽固的使用 iptables 不放手,再加上 docker 本身异常臃肿,所以打算使用近些年越来越流行的 podman 来替代。
podman 可以直接部署在 openwrt 上,但是因为 podman 对 systemd 的支持非常好,可以通过 quadlet 部署为 systemd 的服务单元,所以我最终决定再套一层 lxc 容器来运行 podman
至于我做好规划以后,有朋友问我为什么不用 pve 作为 host,这也是因为我觉得 pve 本身也过于臃肿,不适合我现在的用例。
所以最终我的方案就是 openwrt 作为 host 运行一个 rootless lxc 容器,在 lxc 容器里安装 podman, 创建 macvlan 网络,使用 dhcp 插件,创建 HA 容器。
我的 openwrt 主机是一台 N100 4 2.5G网口工控机,硬盘是512G SSD ,内存目前8G,以后可能升级到16G
第一步: 编译 openwrt
我采用的是 immortalwrt 24.10 版本的 openwrt ,这个版本相比于官方分支,更适合国内用户,同时又保持了与主线同步,维护者也积极的向上游推送补丁而不是自成一派魔改维护旧有分支。事实上,我的用例下用官方分支或者 immortalwrt 并无区别。
编译 openwrt 时,只需要勾选 Utilities - lxc ,然后进入二级菜单,勾选 Configuration 下的所有选项,再勾选 lxc-start lxc-stop lxc-create lxc-attach lxc-destroy lxc-config lxc-ls 即可。
第二步: 部署 lxc
注意这一步里,我一开始使用的是 ubuntu,最后发现 podman 版本太老,和 nftables 不太兼容,最后选择了 fedora 41 部署。附上我的 lxc 配置文件:
lxc.mount.entry = proc dev/.lxc/proc proc create=dir,optional 0 0
lxc.mount.entry = sys dev/.lxc/sys sysfs create=dir,optional 0 0
lxc.include = /usr/share/lxc/config/common.conf
lxc.include = /usr/share/lxc/config/userns.conf
lxc.arch = linux64
lxc.idmap = u 0 100000 165536
lxc.idmap = g 0 100000 165536
lxc.rootfs.path = dir:/srv/lxc/containers/lxc/rootfs
lxc.uts.name = lxc
lxc.net.0.type = phys
lxc.net.0.link = eth3
lxc.net.0.flags = up
lxc.net.0.name = eth0
lxc.mount.entry = /dev/net/tun dev/net/tun none bind,create=file
第三步:安装 podman 并配置
macvlan 网络配置:
[Unit]
Description=macvlan network for rootful container in podman
[Network]
DisableDNS=true
Driver=macvlan
IPAMDriver=dhcp
PodmanArgs=--interface-name eth0
[Install]
WantedBy=multi-user.target
homeassistant 配置:
[Unit]
Description=homeassistant server
After=network-online.target
Wants=network-online.target
Before=shutdown.target
[Container]
HostName=homeassistant
AutoUpdate=registry
AddCapability=CAP_NET_RAW,CAP_NET_BIND_SERVICE
Environment=TZ=Asia/Shanghai
Image=ghcr.io/home-assistant/home-assistant:stable
Network=macvlan.network
PodmanArgs=--mac-address 00:11:22:33:44:55 --memory 4G
Volume=/srv/docker/root/volumes/homeassistant/:/config:Z
[Service]
Restart=always
[Install]
WantedBy=multi-user.target
|