Side Project Ops(GitOps 平台)
ArgoCD App-of-Apps GitOps 倉庫,透過自動化 CI/CD 管道集中管理所有 Side Project 的 Kubernetes 部署。

專案概述
一個 GitOps monorepo,作為所有 Side Project 跨多個元件 Kubernetes 部署的唯一事實來源。採用 ArgoCD 的 App-of-Apps 模式:單一 Root Application 引導所有子應用程式定義,子應用再管理各自的命名空間、Kustomize manifest 和 Sealed Secret。目前管理的專案包括 chat-app、gf-soap(前台/後端/後台)、lazybacktest(前端/後端)、personal-site 和 hexo-blog。各源碼倉庫的 CI 管道構建 Docker 映像、推送至 GHCR,然後在此提交新映像 Tag,觸發 ArgoCD 自動同步。
技術挑戰與解決方案
App-of-Apps 引導
單獨管理幾十個 ArgoCD Application manifest 很難維護。需要一個可擴展的模式,讓新增專案不需要手動在 ArgoCD UI 操作。
Git 中的 Secret 管理
將 Kubernetes Secret(資料庫密碼、API 金鑰)儲存在 Git 倉庫是安全風險。
私有映像倉庫 Pull
K3s Pod 需要在所有命名空間拉取來自私有 GHCR 倉庫的 Docker 映像。
系統架構
倉庫結構:apps/(ArgoCD Application YAML)、projects/<name>/<component>/(Kustomize manifest)。Root App(root-app.yaml)監聽 apps/ 目錄,kubeseal 將 Secret 加密為可安全提交的 SealedSecret 物件。私有 GHCR 映像使用共用的 ghcr-pull-secret。_template/ 目錄支援快速上線新專案。
學習與心得
建立這個 GitOps 平台讓我實際掌握了 ArgoCD App-of-Apps 模式,以及完整的 GitOps 工作流循環:程式碼推送 → Docker 構建 → GHCR 推送 → Tag 提交 → ArgoCD 同步 → 滾動更新。用 kubeseal 管理 Secret 讓我深刻理解了將加密 Secret 保存在 Git 中以支援稽核追蹤的重要性。