

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 通量
<a name="flux"></a>

Flux 是 Kubernetes 的另一個工具，以獨特的方式實作 GitOps 原則。

## GitOps 支援
<a name="flux-gitops"></a>


| 區域圖 | 工具功能 | 
| --- | --- | 
| Git 作為單一事實來源 | Flux 使用 Git 儲存庫作為定義系統所需狀態的最終來源。應用程式和基礎設施的所有組態都存放在 Git 中。 | 
| 宣告式組態 | Flux 使用叢集所需狀態的宣告式描述。這些描述通常是 Kubernetes 資訊清單、Helm Chart 或 Kustomize 浮水印。 | 
| 自動化非同步 | Flux 會持續監控 Git 儲存庫的變更。當它偵測到變更時，會自動將其套用至叢集。 | 
| Kubernetes 原生 | Flux 建置為一組 Kubernetes 控制器和自訂資源。它使用 Kubernetes 中的延伸機制來提供 GitOps 功能。 | 
| 提取型部署模型 | 與傳統的推送式 CI/CD 系統不同，Flux 使用提取式模型。叢集會從 Git 提取所需的狀態，而不是使用外部系統推送變更。 | 
| 持續對帳 | Flux 會持續比較叢集的實際狀態與 Git 中所需的狀態。它會自動更正在這些狀態之間偵測到的任何偏離。 | 
| 多租戶 | Flux 透過 *Kustomizations *和 *HelmReleases* 的概念支援多租戶。不同的團隊可以獨立管理自己的組態部分。 | 
| 漸進式交付 | Flux 透過其 Flagger 元件支援進階部署策略，例如 Canary Releases 和 A/B 測試。 | 
| Helm 整合 | Flux 包含 Helm 的原生支援，因此您可以透過 GitOps 輕鬆管理 Helm 版本。 | 
| 映像更新自動化 | 當容器登錄檔中有新版本可用時，Flux 可以自動更新 Git 中的容器映像。 | 
| Kustomize 支援 | 您可以使用 Flux for Kustomize 提供的原生支援來自訂和修補 Kubernetes 資訊清單。 | 
| 安全性和 RBAC | Flux 與 Kubernetes RBAC 整合以進行存取控制。它支援透過各種後端進行秘密管理。 | 
| 可觀測性 | Flux 提供有關對帳和操作的狀態資訊和指標。它與監控工具整合，以增強可觀測性。 | 
| 事件驅動型架構 | Flux 使用事件驅動方法來實作對帳和更新。 | 
| 可擴展性 | 該工具旨在可擴展，因此您可以新增自訂控制器和資源。 | 
| 跨叢集同步 | Flux 支援從單一組儲存庫管理多個叢集。 | 
| 相依性管理 | 它允許在系統的不同部分之間定義相依性，並確保正確的操作順序。 | 
| Webhook 接收器 | 您可以設定 Flux 從 Git 提供者或其他系統接收 Webhook，以立即開始對帳。 | 

透過實作這些 GitOps 原則，Flux 提供強大且靈活的系統來管理 Kubernetes 叢集和應用程式。它可確保您的基礎設施和應用程式始終與您的 Git 儲存庫同步，並在複雜的 Kubernetes 環境中提供一致性、可靠性和易於管理。工具的 Kubernetes 原生方法和專注於自動化，使其特別適合雲端原生環境。

如需 Flux 可以解決的案例和需求，請參閱本指南稍後的 [Flux 使用案例](use-cases.md#flux-use-cases)。如需 Argo CD 和 Flux 之間的比較，請參閱本指南稍後的功能[比較](use-cases.md#argo-flux-comparison)。

如需詳細資訊，請參閱 [Flux 文件](https://fluxcd.io/flux/)。

## 架構
<a name="flux-architecture"></a>

下圖說明在 EKS 叢集中使用 Flux 的 GitOps 驅動 CD 工作流程。如需詳細資訊，請參閱 [Flux 文件](https://fluxcd.io/flux/)。

![上的磁通架構和工作流程 AWS。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/eks-gitops-tools/images/flux-on-aws.png)


其中：
+ **步驟 1：提取請求 (PR) 合併**。開發人員會將變更遞交至存放在 Git 儲存庫中的 Kubernetes 資訊清單或 Helm Chart。檢閱 PR 並合併到主分支時，會在來源控制中更新應用程式的所需狀態。
+ **步驟 2：儲存庫同步**。Flux 會在 EKS 叢集的專用命名空間內執行，並持續監控設定的 Git 儲存庫。當偵測到變更時，它會提取最新的更新，以協調宣告的狀態。
+ **步驟 3：部署至目標命名空間**。Flux 會將 Git 中所需的狀態與叢集中的即時狀態進行比較。然後，它會將必要的變更套用至目標工作負載命名空間，以便相應地部署或更新應用程式。