henry40408

升級到 Debian Trixie

最近將 Raspberry Pi 4 升級到 Debian Trixie。

由於官方不建議原地升級,所以我就掌握這次重新安裝的機會,一口氣完成下列事項:

將 Docker daemon 換成 podman

其實在 Bookworm 時代,我就嘗試過 podman 了,但當時遇到了防火牆設定的問題。

podman 一直在錯誤的 iptables chain 上開放 port,導致容器的 published port 從外部死活無法存取,遂放棄。

到了 Trixie,我賭 podman 應該把 bug 修好了,順便也想試用看看 quadlet ——以類似 systemd 的語法去定義 container 的 manifest,並交由 systemd 去管理生命週期以及 logs。

縱使 Hacker News 跟 Reddit 上對 systemd 頗有微詞,這種一體化管理的哲學真的太方便了。

最後很順利的架起來了,防火牆的問題確實已不復存在,quadlet 的運作也很穩定,容器的jjj操作也很方便,我很滿意。

建立 Ansible playbook 盡可能達成 re-producible deployment

Bookworm 時我完全是手工管理,完全靠記憶去記住我安裝過什麼、設定過什麼、關閉過什麼。

由於我很久很久以前在工作上使用過 Chef ,所以就想利用這次機會將設定的過程整理成 Ansible playbook。

相較於 Chef 需要 client agent,我選擇 Ansible,因為它只需要 Python + SSH 就可以運作了。

只能說生活在 LLM 時代真的太方便了,幾個 prompt 就能寫出品質不錯的 playbook——從探測、設定到驗證的步驟 LLM 都能幫你寫好;雖然過程中還是有些小錯誤,第一個版本的效能也不甚理想,多來回幾次就都修好了。

我很滿意。

重建 monitoring stack

我在工作上主要使用 Grafana 全家桶——Grafana、Loki、Prometheus。

雖然 Loki、Prometheus 效能已經算很好了,但對 Pi 來說還是稍微吃力,所以我就開始研究是否有更輕量的選擇。

一開始注意到的是 NetData ,Reddit 上好像也有很多 homelab 在使用;但稍微深入研究一下之後就發現,它把 logs 鎖在訂閱牆後面。

賺錢嘛,不寒磣,但不滿足我的需求只能放棄了。

後來又找到 VictoriaLogsVictoriaMetrics ,真的是完全沒聽過的產品。

原來是烏克蘭的團隊的產品,由於 2022 年的劇變, 整家公司現在搬到舊金山落地生根了

VictoriaMetrics 是從 2018 年 開始開發到現在的產品,而 VictoriaLogs 則是 近期 才從 monorepo 獨立出來,比較新一點。

Reddit 上對 Victoria{Metrics,Logs} 的批評主要集中在沒有 high availability 上,但我也只有一台 Raspberry Pi 而已,不需要 HA,這對我來說不是缺點。

整合進 playbook 之後部署上去,消耗的資源真的非常少。

搭配 podman 的 quadlet 直接把 logs 發送到 systemd,VictoriaLogs 只需要從 systemd 將 logs 讀取出來就可以了。

VictoriaMetrics 支援 Prometheus pulling 時的格式,所以常見的 exporter e.g. node exporter, blackbox exporter 通通可以使用。這就讓我動了用 blackbox exporter 取代 gatus 的念頭,就可以少維護一個服務了,但之後再說吧。

整體運作的也非常穩定,我很滿意。