afterain

个人分享

Frigate安装配置

简介 Frigate 是一个开源的视频监控系统,专为实时对象检测设计,通常用于家庭安全摄像头管理。有几个特点非常适合智能家居监控场景: 利用机器学习模型(如 YOLO)进行实时的物体检测,能够检测和识别摄像头捕获的运动物体(如人、车辆等) 支持硬件加速(如使用 GPU 或 Google Coral TPU),能够提高视频处理性能 它集成了Home Assistant 支持录制、事件检测和通知功能 更多特性参考官方介绍 前提条件 homelab PaaS和homelab PaaS扩展(提供了存储和密码保护方案) 网络摄像头若干 配置 在PaaS的K8S + GitOps基础上,只需要对应写Yaml配置文件即可 Frigate 详细参考Frigate Chart文档 nodeSelector 可以指定使用K8S集群的一个具体节点,例如有硬件加速能力的节点。 ingress 配置Ingress域名,可以在浏览器直接输入域名访问(需要自行解决域名解析) persistence 配置视频录像使用的存储。这里使用PaaS提供的NFS对应的Persistent Volume Claim名 envFromSecrets 配置密码来源使用Secret,避免直接填写密码的明文 image 默认镜像使用的ghcr仓库,国内访问比较慢,使用ghcr.nju.edu.cn作为镜像加速 config Frigate的配置 mqtt:关闭MQTT record:视频内容的录制。不需要录制所有时间,仅录制有motion变化的视频,最长保持30天。 ffmpeg:preset-rpi-64-h264 树莓派的H264硬件解码 cameras 萤石网络摄像头有2个视频流,主流分辨率、码率高用来存储(这样能存储更好的画质),子流分辨率用来做检测(在没有硬件加速的情况下,可以减轻CPU负载) motion 不需要检测的区域坐标(坐标可以使用Frigate的UI界面定位区域后获得)。例如视频画面中显示时间的位置,这样可以减少检测的范围(也可以避免误检测),进一步减少CPU消耗。 版本问题 helm chart版本使用最新的tag 7.8.0,对应的app版本是0.14.1。但是官方文档是0.15.0版本的最新规范,使用旧版本会出现参数会提示错误Extra Inputs Not Supported。所以需要指定image tag = 0.15.0。 apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: frigate spec: project: default syncPolicy: automated: prune: true selfHeal: true source: chart: frigate repoURL: https://blakeblackshear.github.io/blakeshome-charts targetRevision: 7.8.0 helm: releaseName: frigate values: | nodeSelector: kubernetes.io/hostname: raspberrypi ingress: enabled: true hosts: - host: frigate.homelab.afterain.xyz paths: - path: '/' portName: http persistence: media: enabled: true existingClaim: nas-nfs envFromSecrets: - frigate-rtsp-password image: repository: ghcr.nju.edu.cn/blakeblackshear/frigate tag: 0.15.0 config: | mqtt: enabled: False record: enabled: True retain: days: 30 mode: motion alerts: retain: days: 30 detections: retain: days: 30 snapshots: enabled: True retain: default: 30 ffmpeg: hwaccel_args: preset-rpi-64-h264 cameras: door: enabled: True ffmpeg: inputs: - path: rtsp://admin:{FRIGATE_RTSP_PASSWORD_DOOR}@192.168.0.10/h264/ch1/main/av_stream roles: - record - path: rtsp://admin:{FRIGATE_RTSP_PASSWORD_DOOR}@192.168.0.10/h264/ch1/sub/av_stream roles: - detect motion: mask: - 0.801,0,1,0,1,1,0.813,1 - 0.003,0.01,0.304,0.005,0.27,0.998,0.003,0.995 destination: server: "https://kubernetes.default.svc" namespace: default 密码 配置文件 ...

March 18, 2025 · afterain

Paas扩展

领域知识 homelab PaaS仅提供了K8S + GitOps基础能力,不包含各种PaaS服务。 在安装SaaS软件时,会依赖一些基础的服务(例如存储服务、数据库服务等),就需要对PaaS进行扩展。 工具链 选择 存储 有一个双盘NAS,能提供基础的NFS存储服务。可以使用K8S的持久卷功能来管理空间的分配。 配置安全 K8S的Secret是一种包含少量敏感信息例如密码、令牌或密钥的对象, 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。 但是使用GitOps时,会遇到一个问题:I can manage all my K8s config in git, except Secrets,常见的几个方案: Sealed-Secrets 利用非对称加密算法对 Secret 对象进行加密,使用的时候在集群内自动进行解密,这样就可以将加密后的密钥安全地存储在 Git 仓库中。 External-Secrets 需要外部密钥管理服务的支持,例如 AWS Secrets Manager、Google Secrets Manager、Azure Key Vault 等。 Vault HashiCorp 开源的一款密钥管理工具,要将它和 ArgoCD 结合使用需要额外的插件。 前提条件 homelab PaaS GitOps 配置 NFS持久卷的使用 PV capacity:指定分配给K8S各种应用的存储最大空间 nfs(server/path):指定NFS服务的地址和路径 accessModes:NFS可以多节点同时挂载读写访问 例子 apiVersion: v1 kind: PersistentVolume metadata: name: nas-nfs spec: capacity: storage: 200Gi accessModes: - ReadWriteMany nfs: server: 192.168.0.xxx path: "/volume1/nfs" mountOptions: - nfsvers=4 persistentVolumeReclaimPolicy: Retain PVC ...

March 18, 2025 · afterain

GitOps安装配置

领域知识 homelab PaaS简介 工具链 选择 Kubernetes发行版 Docker Docker在Desktop版包含了Kubernetes,给开发人员提供了开箱即用的体验。 OpenShift OpenShift 是红帽的产品,采用了 Kubernetes 作为 OpenShift 中的编排技术。 Rancher 一个开源的 Kubernetes 管理平台,能够实现多 Kubernetes 集群的统一纳管。 K3s Rancher推出的轻量级的 Kubernetes 发行版,专为在资源有限的环境中运行,每个服务器实例仅需 512MB RAM 以及 200MB 的磁盘空间。 Homelab一般会有资源有限的设备(例如树莓派),所以选择K3s GitOps Flux ArgoCD Gitea ArgoCD的前提是依赖一个Git仓库,在家庭场景中考虑隐私安全,需要先安装一个Git服务,然后创建仓库进行应用的配置管理。 个人感觉ArgoCD简单一些,不代表其他的工具不好或不适合。 k3s 安装工具 K3s的官方和开源社区都有提供简化的一键安装工具。两个都支持K3s的普通/高可用两种方式。 AutoK3s 用于简化 K3s 集群管理的轻量级工具,您可以使用 AutoK3s 在任何地方运行 K3s 服务。 k3sup is a light-weight utility to get from zero to KUBECONFIG with k3s on any local or remote VM. k3sup仅安装K3s本身,而AutoK3s可以在安装时指定自动部署清单(能同时部署GitOps),所以选择AutoK3s。 前提条件 树莓派 配置代码 AutoK3s 安装AutoK3s ...

February 21, 2025 · afterain

网络启动安装LinuxPC

领域知识 网络启动 工具链 pxe-server.sh PXE服务器上运行的一个脚本工具,用来自动化配置需要的软件和服务。代码仓库地址 DHCP:dnsmasq TFTP:dnsmasq HTTP:nginx Linux PC 通过PXE服务器自动化安装的Linux服务器。自动配置所有必须的软件和服务。包含: 操作系统:ubuntu server 22.04.1 网络:静态IP地址 SSH:OpenSSH 前提条件 Wi-Fi路由器 能访问internet 内置DHCP服务 LAN的两个空闲网口 PXE服务器 有线连接到Wi-Fi的LAN Linux PC BIOS或UEFI支持并配置成网络启动 有线连接到Wi-Fi的LAN 内存 >= 5GB 加载ubuntu server 22.04.1的iso需要1.5G内存,cloud-init需要3G内存 硬盘 >= 20GB 配置代码 以下均已通过工具自动化配置完毕。这里是对配置内容进行说明,以便需要修改时参考。 pxe-server.sh 运行模式 probe 探测设备Id,这样可以给不同的设备安装不同的软件,配置不同的参数。 add 添加设备参数:<device_id> <options> 参数device_id 探测阶段获取的设备Id,例如: PC:01-00-0c-29-4f-62-c7 (MAC地址) 树莓派:7092246e (设备序列号) 参数options有以下几个选项 --node-address CIDR格式,例如192.168.0.6/24 --node-gateway 例如192.168.0.1 --node-dns 例如192.168.0.1 配置 ProxyDHCP:dnsmasq => /etc/dnsmasq.conf # 禁用DHCP port=0 # 开启日志 log-dhcp # 开启ProxyDHCP dhcp-range=192.168.0.255,proxy TFTP ...

February 9, 2025 · afterain

网络启动的无盘系统树莓派

领域知识 网络启动 工具链 硬件 树莓派4b 4G 配置代码 前提条件 PXE服务器 网络启动的群辉 个人电脑 SD读卡器 树莓派节点 有线连接到和PXE服务器相同的LAN SD卡,键盘,显示器,HDMI线各一个(设置网络启动方式时需要) 树莓派 设置网络启动 使用SD卡的安装方法,参考安装操作系统。登陆后的操作流程参考客户端配置文档 安装的操作系统需要和PXE服务器提供的相同(Raspberry Pi OS 2022-09-06-raspios-bullseye-arm64-lite.img),否则后续步骤生成initramfs时无法匹配内核版本会导致无法正常启动 获取device_id grep Serial /proc/cpuinfo | cut -d ' ' -f 2 | cut -c 9-16 另外,也可以使用pxe-server.sh的probe命令自动探测device_id 生成支持iscsi的initramfs sudo apt install open-iscsi initramfs-tools sudo touch /etc/iscsi/iscsi.initramfs sudo update-initramfs -v -k "$(uname -r)" -c 在/boot目录下有一个新文件:initrd.img-5.15.61-v8+ (版本和内核版本相同) 配置tftp 创建目录 PXE服务器的tftp根目录创建子目录,目录名是树莓派设备的device_id,例如 7092246e 复制文件 复制树莓派/boot目录下所有文件到tftp的子目录 配置无盘启动 参考Network Booting a Raspberry Pi 4 with an iSCSI Root ...

February 9, 2025 · afterain

网络启动的PXE服务器 Synology 群辉

领域知识 网络启动 工具链 硬件和系统 群辉DS216play + DSM 6.1.7 软件 ProxyDHCP 群辉自带的DHCP服务:dnsmasq TFTP 群辉自带的TFTP服务:opentftp iSCSI 群辉自带的存储空间支持iSCSI,底层使用的软件未知 配置代码 以下配置仅针对树莓派的无盘启动 ProxyDHCP 启用DHCP 控制面板 => 连接性 => DHCP Server => 网络接口 => 局域网 => 编辑 => DHCP Server 勾选 启用DHCP服务器 启用PXE 控制面板 => 连接性 => DHCP Server => PXE 勾选 启用 PXE(预启动执行环境) 本地TFTP服务器 => 启动加载项 填写start4.elf 配置 由于群辉DSM的UI界面无法配置ProxyDHCP,需要SSH登录进行配置。下面假设已经使用管理员账号SSH远程登录NAS。 三个配置文件:/etc/dhcpd/dhcpd.info,/etc/dhcpd/dhcpd-eth0.info,/etc/dhcpd/dhcpd-eth0-subnet0.info 内容如下 enable="yes" /etc/dhcpd/dhcpd-eth0-subnet0.conf 内容如下 interface=eth0 # 禁用DHCP port=0 # 开启日志 log-dhcp log-facility=/var/log/dnsmasq.log # 开启ProxyDHCP dhcp-range=192.168.1.0,proxy # 配置树莓派bootloader启动项 pxe-service=X86PC,"Raspberry Pi Boot" 重启DHCP服务 ...

February 9, 2025 · afterain

网络启动的PXE服务器自举

领域知识 网络启动 工具链 netboot-bootstrap.sh 一个脚本工具,用来自动化安装配置需要的软件和服务。代码仓库地址 bootloader:pxelinux ProxyDHCP:dnsmasq TFTP:dnsmasq HTTP:python PXE服务器 通过bootstrap自动化安装的Linux服务器。自动配置所有必须的软件和服务。包含: 操作系统:ubuntu server 22.04.1 网络:静态IP地址 注:PXE服务器需要静态IP地址,否则IP变化后,客户端将无法网络启动 DHCP:dnsmasq TFTP:dnsmasq iSCSI:targetcli-fb HTTP:nginx SSH:OpenSSH 前提条件 Wi-Fi路由器 能访问internet 内置DHCP服务 LAN的两个空闲网口 个人电脑 macOS或Linux操作系统 有线(或无线)连接到Wi-Fi的LAN PXE服务器 BIOS或UEFI支持并配置成网络启动 有线连接到Wi-Fi的LAN 内存 >= 5GB 加载ubuntu server 22.04.1的iso需要1.5G内存,cloud-init需要3G内存 硬盘 >= 20GB 配置代码 以下均已通过工具自动化配置完毕。这里是对配置内容进行说明,以便需要修改时参考。 netboot-bootstrap.sh 参数 --server-address CIDR格式,例如192.168.0.6/24 --server-gateway 例如192.168.0.1 --server-dns 例如192.168.0.1 配置 以下内容均在dist目录 ProxyDHCP:dnsmasq => services/dnsmasq.conf # 禁用DHCP port=0 # 开启日志 log-dhcp # 开启ProxyDHCP dhcp-range=192.168.0.255,proxy TFTP dnsmasq => services/dnsmasq.conf ...

January 2, 2025 · afterain

网络启动

领域知识 什么是网络启动 简单来说是通过网络加载bootloader,然后通过bootloader无盘启动或安装操作系统。其中预启动执行环境PXE(Preboot eXecution Environment)是现在裸金属硬件支持最好的标准。 初始化网络 由DHCP服务提供的功能。包含2个关键步骤: 获取IP地址 DHCP给设备分配IP地址。设备有了IP地址后,才能正常通过网络加载bootloader。 获取bootloader需要的服务器地址和文件路径 BOOTP(DHCP完全兼容BOOTP)给设备提供:服务器的IP地址,以及bootloader文件路径。有这些信息后才能继续加载bootloader。 如果不方便修改已有的DHCP服务的配置(例如没有权限配置企业中的DHCP服务,或是无法配置硬件路由器内置的DHCP服务),可以额外安装一个独立的ProxyDHCP服务。 加载bootloader 设备从TFTP服务器中下载bootloader和配置文件,配置文件中描述了启动菜单和每个启动项的操作系统的内核映像文件路径 也可以继续链式加载另一个增强的bootloader(iPXE 或 GRUB等) 无盘启动或安装操作系统 注:这部分不是PXE提供的功能 从TFTP/HTTP服务中下载操作系统的内核映像(例如Linux的vmlinuz/initrd)。无盘启动和安装是不同的流程: 安装:一般是从HTTP/S网络服务中下载系统镜像(iso),结合自动应答(kickstart 或 cloud-init)来自动配置和安装操作系统。 启动:一般是从NFS/iSCSI网络服务中加载根分区(rootfs)来启动操作系统。 工具链和配置 由于运行服务(DHCP和TFTP、HTTP、NFS、iSCSI)的硬件环境有非常大的差异(例如使用一台Windows/Linux服务器、现成的智能路由器、现成的NAS服务器),所以使用的工具不一样,配置也不一样 PXE服务器 根据实际情况选择不同的方案 Linux主机 网络启动和自动化安装的前提是需要一台运行着多个网络服务(DHCP/TFTP/HTTP/NFS)的服务器。但是这个服务器本身是如何被自动化安装呢? => 网络启动的PXE服务器自举 群辉NAS 很多软件的安装配置需用通过群辉的UI界面完成,无法实现一键执行,更多的是如何操作和配置 => 群辉NAS配置网络启动 设备 树莓派 PC

January 2, 2025 · afterain

homelab PaaS简介

什么是PaaS PaaS是面向开发人员,围绕应用为中心的平台。提供了应用开发、部署、运行和管理所需的服务,而无需构建和维护。 有什么优势 包括:中间件(数据库/分布式缓存/消息队列等)、开发语言和工具(运行时/框架等)、运维(日志/监控等)、容器部署等等。 如果采用云原生,那么容器即服务CaaS的基础Kubernetes是较好的选择(能跨多云服务商、提供兼容性和一致性API) 解决用户什么问题 主要是实现降本增效和高可用性: 提高效率 缩短开发周期,减少应用部署时间。不必担心底层基础架构的维护和更新,例如使用 DevOps 和持续交付(CD)等敏捷实践。 降低成本 无需担心中间件服务的容量问题,服务按需使用,只需为实际用量付费。 高可用性 面对复杂系统,构建弹性强且高可用的应用。 homelab期望一个什么样的PaaS homelab主要是使用应用而不是开发应用,所以关注的主要软件的运行,需要有足够灵活性支持不同运行时/开发语言/框架/工具。 Kubernetes有两个核心理念:声明式编程和面向终态。软件的部署、运行和管理等工作主要就是编写声明式配置文件,然后结合GitOps,后续的工具链能直接满足一切皆代码原则。 根据最小依赖和一切皆代码原则,选择:Kubernetes + GitOps 工具链 Kubernetes Docker Docker在Desktop版包含了Kubernetes,给开发人员提供了开箱即用的体验。 OpenShift OpenShift 是红帽的产品,采用了 Kubernetes 作为 OpenShift 中的编排技术。 Rancher 一个开源的 Kubernetes 管理平台,能够实现多 Kubernetes 集群的统一纳管。 K3s Rancher推出的轻量级的 Kubernetes 发行版,专为在资源有限的环境中运行,每个服务器实例仅需 512MB RAM 以及 200MB 的磁盘空间。 GitOps 主要功能是监听Git Repositories变化和自动拉取变更,对比当前应用运行状态与期望运行状态的差异,执行自我修复和自我调整,达到期望的状态。 Flux ArgoCD 目标 根据最小依赖和一切皆代码原则,选择的方案:Kubernetes + GitOps

January 1, 2025 · afterain

homelab IaaS简介

什么是IaaS 简单来说是一个可以通过调用API或者使用控制台(console)来管理虚拟化基础设施(计算/存储/网络)的服务。有了IaaS之后,用户只需要关注如何安装操作系统/中间件/运行时/应用等。 有什么优势 IaaS能给用户提供无限扩缩的资源能力,可以随时按需创建或销毁,并且只需按实际使用时间付费。 解决用户什么问题 主要是帮助用户降本增效: 不可预测的业务高峰,如何提高资源利用率? 为了能及时响应短时间段内的访问高峰,需要准备大量资源,但高峰过后这些资源完全空闲。 业务高速增长时,如果快速提供资源? 自建的建设周期长,不能快速响应业务增长的资源需求。 homelab期望一个什么样的IaaS 资源和服务 homelab并不需要无限的资源,也不需要应对不可预测高峰的问题,以API方式提供服务来控制和管理资源也不是必选项。 虚拟化 2个主要方向: 硬件资源的虚拟化 在裸金属上实现虚拟化的技术,在独立隔离的虚拟机上运行各自的操作系统,有ZEN/KVM/ESXi等。 操作系统的虚拟化 轻量级的虚拟化,在同一个操作系统上实现进程和资源的隔离,有LXC/Docker/OCI等。 根据最小依赖原则,IaaS只需要提供给PaaS最基础的操作系统和软件的运行环境即可,其他的功能可以不需要。所以选择:不需要API和控制台 + 裸金属 + 操作系统 + 容器虚拟化 工具链 ESXi VMWare公司提供的商业软件,支持从裸金属开始自动化安装,支持ESXi和容器。 OpenStack 开源的整套解决方案,包含IaaS/PaaS/SaaS。支持从裸金属开始自动化安装,支持KVM/ZEN和容器。 Proxmox 开源的IaaS。官方暂不支持从裸金属开始自动化安装,需结合第三方工具实现。支持KVM,容器只支持LXC(也就是PaaS层不支持Kubernetes)。 从零开始实现 无论是ESXi/OpenStack还是Proxmox,在裸金属上实现无人值守的自动化的安装操作系统时,都是使用了相同的底层技术:网络启动的PXE/iPXE,自动化安装配置的kickstart/cloud-init。 有了操作系统后,更进一步的软件环境的配置工作,可以使用ansible/chef等开源工具。这些工具以及PaaS需要使用的工具中,都要求能远程通过网络登录和控制操作系统,绝大部分都使用安全可靠的SSH协议。 目标 根据从零开始和最小依赖原则,选择的方案:从零开始实现 + 不需要API和控制台 + 裸金属 + 网络启动的自动安装和配置操作系统 + 安全的远程网络操控

January 1, 2025 · afterain