Config Sync 可讓您從中央可靠資料來源,自動在叢集間部署 Kubernetes 資源,取代手動 kubectl 指令。在 GitOps 工作流程中,可靠資料來源是中央存放區,用於儲存定義叢集資源的 YAML 或 JSON 設定檔。Config Sync 會持續監控這個存放區,並自動將變更套用至叢集。
您可以從三種來源同步設定檔:Git 存放區、開放容器倡議 (OCI) 映像檔和 Helm 圖表。瞭解 Config Sync 與各來源類型的互動方式,有助於您選擇最適合工作流程和環境的選項。
Git 存放區
Git 是廣泛採用的版本管控和協作技術。您可以視需要使用 Git 整理存放區,並享有版本管控和分支的好處。Git 發展成熟且廣受支援,因此您有多種供應商和工具可供選擇。
將 Config Sync 設為以 Git 存放區做為可靠資料來源時,Config Sync 會使用協調器 Pod 中的 git-sync 容器,從 Git 存放區提取設定。您可以設定存放區網址、分支版本和修訂版本 (修訂版本或標記),進一步控管從 Git 存放區提取設定的位置。
RootSync 設定範例
以下範例顯示從 Git 存放區同步的 RootSync 資訊清單:
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
name: root-sync
namespace: config-management-system
spec:
sourceType: git
sourceFormat: unstructured
git:
repo: https://github.com/example/my-configs.git
revision: main
dir: cluster-configs
auth: none # replace with your authentication method such as ssh or token
period: 60s
這項設定會讓 Config Sync 從 Git 存放區同步處理資訊清單。Config Sync 會監控 https://github.com/example/my-configs.git 存放區 main 分支中的 cluster-configs 目錄,每 60 秒檢查一次更新,不需驗證。
用途範例:集中管理
假設您是平台管理員,想使用 Git 存放區,對機群中的所有叢集強制執行基準政策。在這種情況下,您可以將標準 NetworkPolicies、RoleBindings 和 ResourceQuotas 儲存在名為 standard-configs 的中央 Git 存放區。佈建新叢集時,Config Sync 會設為從 standard-configs 存放區同步,確保所有叢集從一開始就符合組織標準。
OCI 映像檔
OCI 映像檔是封裝應用程式及其依附元件的標準格式。這種做法會將設定視為構件,類似於處理容器映像檔的方式。這種做法具有不可變性,且能大規模提升效能。有了 OCI,您就能使用容器映像檔基礎架構和 Artifact Registry 等工具管理映像檔,並透過 Workload Identity Federation for GKE 簡化驗證程序。
如要使用 OCI 做為設定來源,通常需要另外執行程序,將設定檔建構為 OCI 映像檔,然後推送至 Artifact Registry 等登錄檔平台。相較於以檔案形式儲存在 Git 存放區的設定,這種方法可能較不適合人類直接閱讀。
將 Config Sync 設為以 OCI 映像檔做為可靠資料來源時,Config Sync 會使用 reconciler Pod 中的 oci-sync 容器,從登錄檔提取含有設定的 OCI 映像檔。
RootSync 設定範例
以下範例顯示 RootSync 資訊清單,可從儲存在 Artifact Registry 的 OCI 映像檔同步:
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
name: root-sync
namespace: config-management-system
spec:
sourceType: oci
sourceFormat: unstructured
oci:
image: us-central1-docker.pkg.dev/my-project/my-repo/my-config-image:v1.0.0
dir: .
auth: k8sserviceaccount
這項設定會設定 Config Sync,從 OCI 映像檔同步。Config Sync 會使用 Kubernetes 服務帳戶進行驗證,從 Artifact Registry 提取 us-central1-docker.pkg.dev/my-project/my-repo/my-config-image:v1.0.0 映像檔。
應用實例:整合 CI/CD 管道
假設您想將 OCI 映像檔建立作業整合至組織的 CI/CD 管道。合併設定檔的變更後,您可以設定管道來執行驗證測試 (例如 nomos vet 指令)、將 YAML 檔案建構為 OCI 映像檔,並將映像檔推送至 Artifact Registry。Config Sync 接著會自動偵測並將新版映像檔套用至叢集,確保所有設定變更都經過驗證並有版本記錄。
Helm 資訊套件
Helm 是熱門的 Kubernetes 套件管理工具,使用稱為「圖表」的套件格式。Config Sync 可以擷取、轉譯及同步 Helm 資訊套件中定義的資源。
Helm 提供一致的方法,可包裝及重複使用 Kubernetes 應用程式。您可以使用範本或預先建構的 Helm 圖表,建立一致且可重複使用的設定。
如果您不熟悉 Helm,範本和發布程序可能會增加設定管理管道的複雜度。
使用 Helm 圖表做為可靠資料來源設定 Config Sync 時,Config Sync 會使用協調器 Pod 中的 helm-sync 容器,從 Helm 存放區 (例如 Artifact Registry) 或 Git 存放區提取圖表,然後轉譯圖表來產生 Kubernetes 資訊清單。或者,您也可以搭配使用 Config Sync 與 Kustomize 來轉譯 Helm 圖表。如要進一步瞭解這個方法,請參閱「搭配使用 Config Sync 與 Kustomize 和 Helm」。
RootSync 設定範例
以下範例顯示 RootSync 資訊清單,可從儲存在 Artifact Registry 的 Helm 圖表同步:
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
name: root-sync
namespace: config-management-system
spec:
sourceType: helm
helm:
repo: oci://us-central1-docker.pkg.dev/my-project/my-helm-repo
chart: my-chart
version: 1.2.0
auth: gcpserviceaccount
gcpServiceAccountEmail: my-service-account@my-project.iam.gserviceaccount.com
releaseName: my-chart-release
namespace: my-app-namespace # Namespace where the chart resources will be deployed
這項設定會設定 Config Sync,從 OCI 存放區同步 Helm 圖表。Config Sync 會從 oci://us-central1-docker.pkg.dev/my-project/my-helm-repo 存放區擷取 my-chart 圖表的 1.2.0 版本,並使用 my-service-account@my-project.iam.gserviceaccount.com 服務帳戶進行驗證。這項指令會將圖表資源部署到 my-app-namespace 命名空間,版本名稱為 my-chart-release。
用途範例:部署第三方應用程式
假設您是應用程式團隊成員,想將 Prometheus 部署至叢集。您可以設定 Config Sync,從預先建構的 Helm 圖表提取部署 Prometheus 的設定。您不必手動執行 Helm 指令,而是在 Config Sync 的 RootSync 或 RepoSync 物件中定義圖表來源、版本和任何自訂 values。Config Sync 接著會讓 Deployment 與指定的圖表版本和設定保持同步。
選擇來源類型
最佳來源類型取決於團隊現有的工具、工作流程和偏好。您可以參考下表,瞭解各來源類型的關鍵特性,做出明智決策:
| 功能 | Git 存放區 | OCI 映像檔 | Helm 資訊套件 |
|---|---|---|---|
| 適用情境 | 一般用途設定管理;彈性;人類可讀 | 不可變更、有版本的設定;運用容器基礎架構 | 封裝及發布複雜的應用程式 |
| 可變動性 | 可以變更 | 無法變更 | 可變動 (圖表版本不可變動,但值可以變更) |
| 復原 | 還原修訂版本或變更分支版本 | 部署先前的映像檔標記 | 復原至先前的圖表版本 |
| 工具 | 標準 Git 用戶端、CI/CD 管道 | Docker 或 Podman、Container Registry | Helm CLI、Helm 存放區 |
| 效能 | 大型存放區的速度可能較慢 | 速度較快,特別是在大規模作業時 | 從圖表存放區擷取時速度很快 |
| 驗證 | 彈性 (SSH、權杖),設定可能較複雜 | 透過 Workload Identity Federation for GKE 簡化作業 (例如使用 Artifact Registry) | 透過 Workload Identity Federation for GKE 簡化作業 (例如使用 Artifact Registry) |
您也可以在同一個叢集上,針對不同用途使用不同來源類型。例如,叢集可能包含下列項目:
RootSync,從 Git 存放區同步,其中包含由平台團隊管理的基本叢集資源和政策。- 特定命名空間中的
RepoSync,從 Helm 圖表同步,用於部署由應用程式團隊管理的 Redis 執行個體。 - 另一個
RepoSync位於不同命名空間,從 OCI 映像檔同步,其中包含由獨立 CI/CD 程序建構的一組應用程式專屬設定。
後續步驟
- 瞭解 GitOps 最佳做法。
- 使用預設設定安裝 Config Sync。
- 設定從 Git 同步。
- 從 Artifact Registry 同步處理 OCI 構件。
- 從 Artifact Registry 同步 Helm chart。