使用 Kubernetes 过度设计这个博客的预览站点

主要观点:

  • 作者为博客的预览站点服务器 future-sight 过度设计,利用 Kubernetes 的强大功能,实现了自动构建和部署预览站点。
  • 之前的预览站点方案存在机器需 24/7 在线的问题,新方案通过将渲染资产存储在 zip 文件中,并利用 Go 的自定义压缩器支持,将其在不同设备间传输和直接服务给用户。
  • future-sight 工作流程包括在编辑器中保存时触发 xesite 重建本地预览站点,将生成的 site.zip 上传到 Tigris 并广播给其他副本,最终设置为“当前”版本。
  • 在实现过程中遇到了 AWS S3 库与 Minio 的兼容性问题,通过手动创建 S3 客户端解决。
  • “生产”部署在 homelab Kubernetes 集群上,预览站点由三个 pod 运行。未来希望对预览站点进行身份验证,并实现自动刷新。

关键信息:

  • 预览站点之前通过 Tailscale Funnel 暴露给世界,存在机器需 24/7 在线的问题。
  • 新方案利用 Go 的 archive/zip 包和自定义压缩器支持,将 site.zip 平均压缩至 15MB。
  • future-sight 涉及协议缓冲区、NATS 和 Valkey 等技术,通过一系列步骤实现预览站点的自动构建和部署。
  • 在实现过程中遇到 AWS S3 库与 Minio 的兼容性问题,并通过手动创建 S3 客户端解决。
  • “生产”部署在 homelab Kubernetes 集群上,预览站点由三个 pod 运行。未来计划对预览站点进行身份验证和自动刷新。

重要细节:

  • --devel模式在本地开发时启用额外功能,如文件更改自动重建和去除 GitHub、Patreon webhook 端点的身份验证中间件。
  • Go 的自定义压缩机支持使 zip 文件成为 gzip 流的集合,可能减少 CPU 和带宽消耗。
  • port-forward.sh脚本用于启动“开发”服务并进行端口转发,以便在 MacBook 上使用。
  • AWS 过渡到“hostname-derived bucket URLs”导致 Minio 出现问题,通过手动创建 S3 客户端并使用--use-path-style标志解决。
  • Valkey 密码设置为hunter2,虽不是秘密但因仅在集群内部可访问,安全性问题不太重要。
阅读 7
0 条评论