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

从零构建homelab

为什么从零开始构建homelab 可以用来做什么 学习和实践各种技术,例如容器/IOT智能家居/AI大模型等。 为什么不使用现成的XXX服务 保护隐私 互联网提供了很多方便易用的服务,但是在使用中也容易有数据和隐私泄露的问题。homelab则可以完全由自己掌控(例如视频监控)。 响应延时 按照数据就近计算原则,家中设备产生的数据直接在局域网内部计算,不需要通过互联网走一遍,能降低整体的响应延时。 范围 包含最基础的IaaS,中间的PaaS,以及面向最终场景的SaaS。 IaaS 自动化安装操作系统和基础软件,提供计算/存储/网络的硬件基础设施。 PaaS 以kubernetes作为云原生的软件运行环境。 SaaS 用开源服务/软件支持各种场景。 基本原则 从零开始 不做任何的前提假设,从机器的裸金属开始,一步一步搭建。 最小依赖 仅使用必要的硬件/软件来满足需求。 一切皆代码(Everything as Code)1 2 避免复杂的手工操作流程,所有环节能自动化完成。 要实现EaC,有几个关键点:领域知识,工具链+配置代码和自动化 领域知识 每个问题都涉及对应领域的概念和流程,了解这些能更好的选择工具去解决问题。 工具链 是多个工具的集合。在选择时,优先选择声明式编程风格的面向终态的工具(例如Kubernetes),这样遇到问题时可以反复执行而不用担心副作用。 配置代码 保存在代码版本管理工具中(例如Git),能记录所有的变更,方便用diff工具比较不同版本之间的差异。 自动化 只需要一键执行就能自动化完成所有工作。一键执行既可以是执行一个命令,也可以点击一个按钮,也可以是一次代码提交(例如GitOps)。

January 1, 2025 · afterain

一键快速安装K3s

简介 K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进行了高度优化。 ...

October 26, 2022 · afteraincc