跳轉到

GitOps

GitOps 與 Kubernetes 的整合

img img

架構一

img

  1. 開發者對 Git(Application) Repo 產生修改,這份修改觸發了相關的 CI Pipeline ,這過程中經歷過測試等階段,最後將相關的 Image 給推到遠方的 Container Registry。

  2. 系統管理者針對 Git(Yaml) Repo 產生修改,這份修改觸發了相關的 CI Pipeline, 這過程中會針對 Yaml 本身的格式與內容進行測試,確保沒有任何出錯。

  3. 當 Git(Yaml) Repo 通過 CI Pipeline 而合併程式碼後,接下來 Kubernetes 內的 Controller 會知道 Git(Yaml) Repo 有更新

  4. 一種是 Git 那邊透過 Webhook 的方式告訴 Controller

  5. 一種是 Controller 定期輪詢後得到這個結果

  6. 同步 Git(Yaml) Repo 裡面的狀態描述檔案與 Kubernetes 叢集內的狀態,確保目前運行狀態與 Git 內的檔案描述一致

  7. 如果今天不想要 3 這個步驟的自動化,也可以由管理員經過確認後,手動要求 Controller 去同步 Git 並更新

架構二

img

這種架構希望可以解決 Contaienr Image 頻繁更新的問題,因此 Controller 本身又會多了監聽 Container Registry 的能力。

當 Controller 發現有新的版本的時候,只要這個版本號碼有符合規則,就會把新的版本資訊給套用到 Kubernetes 裡面。

但是因為 GitOps 的原則是希望以 Git 作為單一檔案來源,如果這樣做就會破壞這個規則,因此這時候 Controller 就要根據當前 Image Tag 的變化,把變化內容給寫回到 Git(Yaml) Repo 之中。

這也是為什麼 Controller 要對 Git(Yaml) Repo 進行更新與撰寫新 Commit 的原因。

也因為這個原因,我們的 Controller 也必須要對該 Git(Yaml) Repo 擁有讀寫的能力,這方面對於系統又會增加一些設定要處理。

Microsoft Azure - GitOps based CI/CD Pipeline

img

Intro to ArgoCD

CD Workflow without Argo CD

img img

CD Workflow with ArgoCD

img img img img img

Working with multiple clusters

img img

Reference