資訊科普系列(15)-GitOps介紹

曹仲辰
MODA IT
Published in
6 min readDec 1, 2023
https://github.com/weaveworks/awesome-gitops

GitOps 是 Weaveworks 提出的一種持續交付(CD)的概念。以 Git中的文件做唯一且可追溯的源,達到基礎設施即程式碼(IaC)。所有的應用程式部署都只能依賴這份 Git 上內容去變化。

基礎設施即程式碼(IaC)

顧名思義,以程式碼來建置我們的基礎設施,作業系統、資料庫、網路、容器、CD/CD 工具……等等,其最大優點是可以重複執行、重複使用,而且容易自動化。

GitOps的基本原則

  1. GitOps 要有聲明性: GitOps 管理的系統必須以聲明文件表達所需狀態。
  2. Gi​​tOps 應用受版本控制且不可變:所需狀態應以版本控制和完整版本歷史記錄的方式儲存
  3. GitOps 應用程式自動拉取:會自動從來源中拉取新版本
  4. GitOps 應用程式不斷協調:代理程式會持續觀察實際的系統狀態並嘗試應用所需狀態

讓系統具有「可觀測性」,你可以看到系統目前的狀態。所有的操作都透過 Git 來操作,所有的操作過程都會是一個一個的 Commit。

Pull Mode

在目標環境中安裝一個代理程式(agent),並由該 agent 主動去我們的 Git 儲存庫拉回檔案,因為所有更改都儲存在commit中,可以輕鬆的回溯。

https://www.gss.com.tw/security-epaper/2764-gss-0183-GitOps

GitOps vs 傳統 pipeline

傳統 CD 是由開發團隊完成,但 GitOps 會在開發團隊完成後把 CD 給維運團隊寫。

GitOps

優點:環境狀態與 Git 儲存庫中的一致,實現了聲明式配置的一致性。

缺點: 如果出問題很難釐清是開發或維運團隊的問題。

pipeline

優點:適用於各種工作流程和不同的技術堆疊

缺點: 随著系統和流程的複雜化,管理和維護可能變得複雜

GitOps優勢

https://www.harness.io/blog/gitops
  1. 可視性:GitOps 為開發團隊提供了所需的監視,日誌記錄、追蹤和可視化功能,以便他們知道什麼時候發生中斷以及在何處發生。
  2. 版本控制和變更管理:由於所有部署都是版本化的,因此團隊可以輕鬆地簡化操作及審核。並在出現問題時迅速回復至舊版本
  3. 生產效率:開發團隊可以直接對運行中的 production 環境進行更新,節省時間。
  4. 稽核:每個操作可追溯到一次 commit,使團隊可以輕鬆地找到出現任何問題的根本原因。

工作流程

https://learn.microsoft.com/zh-tw/azure/azure-arc/kubernetes/conceptual-gitops-ci-cd

GitOps 工具

自動同步 Git 中的聲明文件。具備版本控制、實時監控、roll back等功能,GitOps工具為團隊提供了高度可觀察和可維護的環境。

常見的工具有:

  1. Argo CD
  2. Flux
  3. Gitkube
  4. Jenkins X
  5. Weave Flux
  6. Helm Operator

GitOps 最初是為 Kubernetes 設計的,但其核心思想和流程在不同領域都具有通用性。隨著shift left模式的推廣,大多數人都在CI / CD流程的早期階段增加了自動化工具。無論有沒有 Kubernetes 環境,開發人員現在都可以輕鬆使用 Git ,來管理基礎架構的組態設定及進行應用系統部署。

IaC 工具

Terraform、Ansible

雲原生應用程式

GCP

Shift Left

通過在開發早期引入測試和安全措施,提高問題發現的速度,降低修復成本,並最大程度地減少在後期階段修復問題的需要。

Secrets

因為安全性問題,我們不會直接把secrets(密碼、令牌、憑證……)放到git內,為了解決這個問題,可以透過一些輔助程式來幫忙。

  • argocd-vault-plugin — 一個 ArgoCD 插件,用於從 Vault 檢索機密並將其註入 Kubernetes 資源中
  • git-secret — 一個 bash 工具,用於將您的私人資料儲存在 git 儲存庫中
  • Kamus — Kubernetes 應用程式的零信任秘密加解密解決方案
  • Sealed Secrets — 單向加密Secrets
  • SOPS — Secrets OPerationS
  • Vault Secrets Operator — 將 Vault 中的機密與 Kubernetes 同步

參考資料

https://www.huanlintalk.com/2023/07/gitops-overview.html

https://github.com/weaveworks/awesome-gitopshttps://www.gss.com.tw/security-epaper/2764-gss-0183-GitOps

https://learn.microsoft.com/zh-tw/azure/azure-arc/kubernetes/conceptual-gitops-ci-cd

--

--