本頁面說明車隊套件、FleetPackage
API,以及這些項目與 Config Sync 的關係。
FleetPackage
是一種宣告式 API,可讓您管理整個車隊的套件。艦隊套件是一組 Kubernetes YAML 資訊清單,用於定義叢集設定。使用機群套件時,您可以透過一次性或漸進式推出作業,將套件部署至已向機群註冊的叢集。
您只需定義每個 FleetPackage
物件一次,之後就能使用新修訂版本更新該套件。套用新修訂版本後,機群套件服務會擷取這些變更,並將其部署至叢集。
優點
使用機群套件,在註冊至機群的叢集中部署 Kubernetes 資源。建立並套用機群套件後,機群套件會自動將 Git 存放區中的 Kubernetes 設定檔部署到新叢集。機群套件以 Config Sync 的優點為基礎 (例如自動修正漂移),並提供下列獨特優勢:
自動推出資源:設定機群套件後,機群套件服務會自動在所有叢集上,部署該套件指向的 Kubernetes 資源。
自動設定新叢集:如果您設定機群套件,然後將新叢集新增至機群,系統會自動將機群套件定義的所有資源部署至新叢集。
大規模管理 Kubernetes 設定:不必逐一管理叢集,而是使用機群套件,將資源部署至整個叢集機群。
盡量減少錯誤變更造成的影響:一次最多可選擇要將資源部署到多少個叢集。您可以密切監控每個叢集的變更,確保錯誤的變更不會影響整個機群。
簡化 Config Sync 設定:機群套件會使用 Cloud Build 向 Git 進行驗證,也就是說,您只需為每個專案驗證一次,不必為每個
RootSync
或RepoSync
物件驗證。
如果符合下列一或多個情境,您可能會偏好使用 Config Sync 和 RootSync
或 RepoSync
物件,而非機群套件:
您管理少數幾個叢集。
您需要進一步控管資源部署至叢集的方式,而不只是透過 Fleet 套件 API 提供的標籤和變體。
需求條件和限制
設定車隊套件時,只有 Git 存放區支援做為單一事實來源。
儲存在 Git 中的 Kubernetes 資源必須代表資源的最終狀態。系統不支援用來轉換 Git 中所儲存資源的其他疊加層。如要進一步瞭解這些資源的差異,請參閱「最佳做法:建立 WET 存放區」。
FleetPackage
API 僅適用於us-central1
區域。您仍可部署至不同區域的叢集,但必須在us-central1
中設定 Cloud Build 並設定 gcloud CLI。
架構
您可以使用 FleetPackage
API,將 Kubernetes 資訊清單部署至叢集機群。FleetPackage
API 會使用 Cloud Build,從 Git 存放區同步及擷取 Kubernetes 資源。機群套件服務隨後會將這些資源部署至叢集。
應用實例
您可以使用機群套件,將 Git 存放區中的資源部署至整個叢集機群。您也可以設定機群套件,控管部署資源的方式、位置和類型。
以下章節將列出不同 FleetPackage
設定的範例。如要進一步瞭解如何套用機群套件,請參閱「部署機群套件」。
部署至機群中的所有叢集
下列 FleetPackage
會使用輪流策略,一次將 Kubernetes 資源部署至三個叢集,並以機群中的所有叢集為目標:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
rolloutStrategy:
rolling:
maxConcurrent: 3
部署至叢集子集
下列 FleetPackage
使用標籤選取器,只將 Kubernetes 資源部署到成員標籤 country
與艦隊中 "us"
相符的叢集:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
selector:
matchLabels:
country: "us"
rolloutStrategy:
rolling:
maxConcurrent: 3
將變體資源部署至叢集
以這個範例來說,您的 Git 存放區有名為「deployments」的資料夾,其中包含兩個不同的部署規格:
副本:3
# small.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
副本:10
# large.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 10 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
您可以透過變體,將「小型」或「大型」部署作業部署至不同叢集。每個叢集都有 nginx-size=small
或 nginx-size=large
標籤。
本例中的 FleetPackage
會類似於下列內容:
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
path: deployments
variantsPattern: "*.yaml"
rolloutStrategy:
rolling:
maxConcurrent: 2
target:
fleet:
project: projects/my-project
variantSelector:
variantNameTemplate: ${membership.labels['nginx-size']}