DevOps / 基礎設施2026

Side Project Ops(GitOps 平台)

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

Side Project Ops(GitOps 平台)

專案概述

一個 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 操作。

解決方案:
實作 App-of-Apps 模式:單一 Root ArgoCD Application 監聽 apps/ 目錄,並自動建立/更新子 Application。新增專案只需在 apps/ 新增一個 Application YAML 並提交——ArgoCD 處理其餘事宜。

Git 中的 Secret 管理

將 Kubernetes Secret(資料庫密碼、API 金鑰)儲存在 Git 倉庫是安全風險。

解決方案:
使用 kubeseal(Bitnami Sealed Secrets)以叢集公鑰加密 Secret 後才提交。加密的 SealedSecret YAML 可安全地公開存放;只有叢集的 Controller 才能在部署時解密。

私有映像倉庫 Pull

K3s Pod 需要在所有命名空間拉取來自私有 GHCR 倉庫的 Docker 映像。

解決方案:
建立共用的 ghcr-pull-secret Kubernetes Secret(已 seal),並在每個部署的 Kustomize patch 中設定為 imagePullSecrets,讓所有專案無需以明文儲存憑證即可拉取私有 GHCR 映像。

系統架構

倉庫結構: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 中以支援稽核追蹤的重要性。

技術棧

GitOps & CD

ArgoCDApp-of-Apps Pattern

容器調度

K3sKustomize

機密管理

kubesealBitnami Sealed Secrets

部署

GitHub ActionsGHCRDocker