可能定义的Homelab

2020-07-25 22:29:59

去年11月左右,我启动了一个项目来讨论我的数字生活。厌倦了通过信任免费网站来提供各种服务来随意增加我的主观性,我想夺取一些对我的互联网存在的控制权。我制定了一个计划,在我的家庭网络上自行托管几项关键服务,并亲自维护它们。简而言之,我做了一个家庭实验室。

坦率地说,我以前依赖的专业网站无疑比我拼凑起来的家庭实验室爱好项目更可靠。但是,根据一般原则(而且因为这似乎是学习一些sysadmin/devops技能的一种有趣的方式),我进行了以下设置:

如您所见,我已经部署了两个通用计算平台:4个ESXi虚拟机管理程序和一个Kubernetes集群。此外,还有几个基于VM的服务:Nextcloud、Gitea和Harbor。对于数据存储和备份,我使用Synology NAS。最后,基于OpenBSD的定制路由器可为所有设备提供互联网连接。为了减少操作开销,我精心制作了一组部署和配置所有这些组件的Ansible脚本。

总体而言,做出这样的设置是一段相当漫长的旅程。在这篇博客文章中,我将描述我对这些服务的使用,分享我到目前为止的想法和经验,并试图阐明我未来的改进计划。

当然,你在上面看到的一切都已经作为一项服务存在于互联网上。如果我的目标仅仅是终端功能集,那么为每项服务付费会简单得多。在大多数情况下,甚至还有免费的版本可供选择。例如,如果我只关心能否访问基于Web的Git存储库UI,我可以注册Github或GitLab帐户,而不是费心在我的家庭网络上设置Gitea VM。

然而,就像我的大多数爱好项目一样,这次努力更多的是关于旅程,而不是目的地。通过在我的家庭网络上设置这些服务,我学到了一些有用的devops和sysadmin技能。此外,通过运营自己的服务,我实现了减少对第三方服务的依赖这一哲学目标。现在,如果我依赖的任何服务中断,我有权修复它们。例如,我不再依赖不透明的盒子,也就是Google Drive。

因此,不要再费劲了,让我们深入研究一下构成我的家庭实验室的每一个组成部分。对于每个组件,我将描述它为我提供的主要实用程序、我选择它的原因,以及可能对我有帮助的任何附加注释。

我的家庭实验室的第一个组件是基于OpenBSD的自定义路由器。它为我家庭网络上的一切提供互联网连接和DHCP。此外,该设备还充当缓存DNS服务器和防火墙。我可以写一整篇博客文章详细描述这款路由器。事实上,我已经这么做了。

我总共维护了四台物理ESXi主机,以形成一个在我的网络上运行虚拟机的平台。

其中三台ESXi主机是Intel nucs(System76 Meerkats)。这些较小的机器运行组成我的Kubernetes集群的VM。

另一台ESXi主机是由备件构建的自定义计算机。它目前运行三个基于VM的HTTPS服务:Nextcloud、Gitea和Harbor。因为它只运行三个(相对较小的)VM,所以它有相当多的剩余计算能力可供将来添加和/或临时实验使用。

我选择ESXi来运行我的虚拟机,因为它是企业级的,而且是免费的。市面上有很多虚拟机管理程序。就我目前的使用案例而言,ESXi是完美的选择。此外,在将来,我可能会考虑通过运行vCenter以编程方式管理虚拟机、为共享存储设置VSAN,以及在我的网络需求变得更加复杂时可能安装NSX来扩大我对VMware产品的使用。因此,还有增长的空间。

除了ESXi提供的基于VM的计算平台之外,我还运行了Kubernetes来提供基于容器的计算平台。虽然我目前没有使用Kubernetes集群做任何事情,但我计划安装Argo CI/CD,试验kNative,开发一些操作员,可能还会运行一台factorio游戏服务器。

Kubernetes群集由6个虚拟机组成,运行在3个Intel Nucs上。为了便于管理,我选择在具有ESXi虚拟机管理程序层的虚拟机上安装Kubernetes。在某种程度上,我肯定会破坏一些东西,想要重新配置等等。有了虚拟机管理程序,执行这些类型的调整就更容易了。此外,在未来的某个时候,我可能会转而使用TKG,这是Kubernetes的vSphere集成发行版。

对于备份和存储重要数据,我使用Synology NAS。虽然我没有真正去逛街和比较NAS产品/供应商,但到目前为止,我对Synology很满意。也就是说,我想在将来的某个时候从头开始创建我自己的NAS。然而,Synology产品包括几个开箱即用的功能,这些功能可能很难复制。

首先,它有一个易于使用的应用程序,名为Active Backup for Business,可以根据可配置的计划和保留策略自动备份ESXi虚拟机。

虚拟机备份应用程序与自动云备份应用程序Glacier Backup配合良好。每天晚上,在虚拟机备份到NAS后,我会将备份复制到Amazon S3 Glacier。希望这样我不会丢失数据。

最后,Synology内置了UPS集成。如果我的UPS断电超过一分钟,NAS将完全关闭,以防止意外断电可能导致的任何数据损坏。

我使用Nextcloud作为我的个人云。我用它来存储我的重要文件和照片。桌面/移动应用程序可以在我的所有设备上同步文件,让我可以从任何地方编辑和查看我的文件。

NextCloud还可以安装提供附加功能的应用程序。目前,我只安装了一款应用程序,即Deck";。DECK是看板风格的项目管理和组织工具。我使用Deck来计划、组织和记录我爱好项目的进度。

因为它让我能够安装(并有可能创建)应用程序,所以Nextcloud是一个可扩展的平台。它是开源的,正在积极开发中。虽然最近的主要版本升级有点艰难(至少对我来说是这样),但我对Nextcloud很满意,并计划坚持下去。

当然,我需要一个地方来存储我的代码。为此,我使用Gitea。与GitLab相比,我更喜欢Gitea,因为它重量较轻。与GitLab不同的是,捆绑在一起的不是一百万个额外的功能--在我看来,这会增加一些臃肿的功能。此外,与GitLab UI相比,我稍微更喜欢Gitea UI。

关于吉特亚,真的没什么可说的了。它对我的目的很有效。我将所有代码推送到家庭网络上运行的Gitea VM。每当我想要发布一个项目或与全世界分享它时,我都会将我的代码推送到一个公共的Github回收站。

要使容器镜像可用于在Kubernetes集群上运行,我需要一个容器注册表。为此,我使用了Harbor,这是一个开源解决方案,似乎是当前最流行的自托管容器注册中心。除了提供用于推送/拉取容器图像的标准API之外,Harbor还具有扫描容器图像以查找已知漏洞的有用功能。