回顧這 30 天做了什麼、學到什麼。
盤點一下動手做過的事:
kubectl rollout undo 只撐了 2 秒就被 ArgoCD 蓋回壞版本,唯一有效的是 git revert
過程中發現的問題,都當場修掉了:
docker-compose.yml 早就是壞的(Day 7):引用不存在的服務,clone 下來直接建置失敗helm/wafer-bi/,CI 卻還在更新 k8s/base/,兩條線各自運作正常,兜在一起卻是空轉這些狀況沒有一個是刻意設計的教學情境,都是在準備截圖、寫文章的路上撞到的。後來也因此多寫了一支 scripts/check-config-sync.py,在 CI 裡強制檢查「本地開發設定」與「K8S 部署設定」有沒有對齊,這是從 Day 19 那次事故學到的教訓。
30 天走下來,異構架構帶來的複雜度不小:Java 有自己的 Heap 調優邏輯,Python 沒有;三種語言要接上同一套 OpenTelemetry 標準才能串出跨語言的 Trace;CI 的 build matrix 要照顧六個完全不同的建置流程。但換來的是每個服務都能用最適合它的工具:Python 處理 Delta Lake 的大數據運算、Java 處理需要事務保證的認證邏輯、Node.js 當輕量的路由層。
這個系列最大的心得是:工具與流程能解決的是「怎麼做」,「哪裡會出錯」則要靠跑過一次才知道。
列一下這個專案目前還缺的部分,留給未來:
kubeseal 封出 app-secrets),但密文是跟「某一座叢集的金鑰」綁定的,部署到雲端時必須拿新叢集的公鑰重新封裝。另外 controller 的私鑰(kube-system 裡的 sealed-secrets-key*)要納入 Day 27 的備份範圍,那把掉了所有封過的東西就都廢了linux/amd64,linux/arm64 兩條產線,但目前還沒有一顆 arm64 節點跑過它,等雲端部署(見下一點)成行才有機會驗證謝謝看到這裡的讀者。這個系列沒有一次寫完美,中間改過設定、修過 bug、也踩過幾次自己挖的坑,維護一套系統大概就是這樣。
如果你也在做類似的異構微服務專案,希望這 30 天記錄下來的東西(尤其是踩坑的部分)能幫你少走一點冤枉路。