Auf dieser Seite werden Flottenpakete, die FleetPackage
API und ihre Beziehung zu Config Sync erläutert.
Eine FleetPackage
ist eine deklarative API, mit der Sie Pakete in einer Flotte verwalten können. Ein Flottenpaket ist eine Sammlung von Kubernetes-YAML-Manifesten, die die Clusterkonfiguration definieren. Mit Flottenpaketen können Sie Pakete über einen sofortigen oder progressiven Roll‑out in Clustern bereitstellen, die bei Ihrer Flotte registriert sind.
Sie definieren jedes FleetPackage
-Objekt einmal und können das Paket dann mit einer neuen Überarbeitung aktualisieren. Wenn Sie eine neue Revision anwenden, übernimmt der Flottenpaketdienst diese Änderungen und stellt sie in Ihren Clustern bereit.
Vorteile
Mit Flottenpaketen können Sie Kubernetes-Ressourcen in Clustern bereitstellen, die in einer Flotte registriert sind. Nachdem Sie ein Flottenpaket erstellt und angewendet haben, werden die Kubernetes-Konfigurationsdateien im Git-Repository automatisch im neuen Cluster bereitgestellt. Fleet-Pakete bauen auf den Vorteilen von Config Sync wie der automatischen Driftkorrektur auf und bieten die folgenden einzigartigen Vorteile:
Ressourcenbereitstellung automatisieren:Nachdem Sie ein Flottenpaket eingerichtet haben, werden die Kubernetes-Ressourcen, auf die es verweist, automatisch vom Flottenpaketdienst in allen Clustern bereitgestellt.
Neue Cluster automatisch konfigurieren: Wenn Sie ein Flottenpaket konfigurieren und später einer Flotte neue Cluster hinzufügen, werden alle durch das Flottenpaket definierten Ressourcen automatisch im neuen Cluster bereitgestellt.
Kubernetes-Konfigurationen im großen Maßstab verwalten:Anstatt Cluster einzeln zu verwalten, können Sie mit Flottenpaketen Ressourcen in einer ganzen Flotte von Clustern bereitstellen.
Auswirkungen falscher Änderungen minimieren:Wählen Sie eine maximale Anzahl von Clustern aus, in denen Ressourcen gleichzeitig bereitgestellt werden sollen. Sie können die Änderungen an jedem Cluster genau beobachten, um sicherzustellen, dass sich falsche Änderungen nicht auf Ihre gesamte Flotte auswirken.
Config Sync-Konfiguration vereinfachen:Flottenpakete verwenden Cloud Build zur Authentifizierung bei Git. Das bedeutet, dass Sie sich einmal pro Projekt authentifizieren müssen und nicht einmal pro
RootSync
- oderRepoSync
-Objekt.
Möglicherweise ziehen Sie es vor, Config Sync mit RootSync
- oder RepoSync
-Objekten anstelle von Flottenpaketen zu verwenden, wenn eines oder mehrere der folgenden Szenarien auf Sie zutreffen:
Sie verwalten eine kleine Anzahl von Clustern.
Sie benötigen mehr Kontrolle darüber, wie Ressourcen in Ihren Clustern bereitgestellt werden, als die Fleet Package API mit Labels und Varianten bietet.
Anforderungen und Einschränkungen
Beim Konfigurieren eines Flottenpakets werden nur Git-Repositories als Source of Truth unterstützt.
Die in Git gespeicherten Kubernetes-Ressourcen müssen den Endzustand der Ressource darstellen. Zusätzliche Overlays zum Transformieren der in Git gespeicherten Ressource werden nicht unterstützt. Weitere Informationen zu den Unterschieden zwischen diesen Ressourcen finden Sie unter Best Practice: WET-Repositories erstellen.
Die
FleetPackage
API ist nur in der Regionus-central1
verfügbar. Sie können weiterhin in Clustern in verschiedenen Regionen bereitstellen, müssen aber Cloud Build einrichten und die gcloud CLI inus-central1
konfigurieren.
Architektur
Mit der FleetPackage
API können Sie Kubernetes-Manifeste in einer Flotte von Clustern bereitstellen. Die FleetPackage
API verwendet Cloud Build, um Kubernetes-Ressourcen aus Ihrem Git-Repository zu synchronisieren und abzurufen. Der Flottenpaketdienst stellt diese Ressourcen dann in Ihren Clustern bereit.
Beispielanwendungsfälle
Mit Flottenpaketen können Sie Ressourcen aus einem Git-Repository in Ihrer gesamten Clusterflotte bereitstellen. Sie können Ihr Flottenpaket auch so konfigurieren, dass Sie steuern können, wie, wo und welche Art von Ressourcen bereitgestellt werden.
Im folgenden Abschnitt finden Sie Beispiele für verschiedene FleetPackage
-Konfigurationen.
Weitere Informationen zum Anwenden von Flottenpaketen finden Sie unter Flottenpakete bereitstellen.
Bereitstellung in allen Clustern einer Flotte
Im folgenden FleetPackage
wird eine Rolling-Strategie verwendet, um Kubernetes-Ressourcen in jeweils drei Clustern bereitzustellen. Das Ziel sind alle Cluster in einer Flotte:
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
Bereitstellung in einer Teilmenge von Clustern
Im folgenden FleetPackage
wird ein Label-Selektor verwendet, um Kubernetes-Ressourcen nur in Clustern mit dem Mitgliedschaftslabel country
bereitzustellen, das mit "us"
in der Flotte übereinstimmt:
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
Bereitstellung von Variantenressourcen in einem Cluster
In diesem Beispiel haben Sie in Ihrem Git-Repository einen Ordner mit dem Namen „deployments“, der zwei verschiedene Bereitstellungsspezifikationen enthält:
Replikate: 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
Replikate: 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
Mit Varianten können Sie entweder die „kleinen“ oder die „großen“ Bereitstellungen in verschiedenen Clustern bereitstellen. Jeder Cluster hat das Label nginx-size=small
oder nginx-size=large
.
Das FleetPackage
in diesem Beispiel würde so aussehen:
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']}