Flottenpakete

Auf dieser Seite werden Fleet-Pakete, 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 besteht aus einer Reihe von Kubernetes-YAML-Manifesten, die die Clusterkonfiguration definieren. Mit Flottenpaketen können Sie Pakete durch ein gleichzeitiges oder progressives 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 Version aktualisieren. Wenn Sie eine neue Version anwenden, werden diese Änderungen vom Flottenpaketdienst übernommen und in Ihren Clustern bereitgestellt.

Vorteile

Mit Flottenpaketen können Sie Kubernetes-Ressourcen in Clustern bereitstellen, die bei 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 Abweichungskorrektur auf und bieten die folgenden einzigartigen Vorteile:

  • Automatisches Ressourcen-Roll-out:Nachdem Sie ein Flottenpaket eingerichtet haben, werden die darauf verweisenden Kubernetes-Ressourcen vom Flottenpaketdienst automatisch in allen Clustern bereitgestellt.

  • Neue Cluster automatisch konfigurieren: Wenn Sie ein Flottenpaket konfigurieren und einer Flotte später neue Cluster hinzufügen, werden alle vom Flottenpaket definierten Ressourcen automatisch im neuen Cluster bereitgestellt.

  • Kubernetes-Konfiguration im großen Maßstab verwalten:Anstatt Cluster einzeln zu verwalten, können Sie mit Cluster-Paketen Ressourcen für eine ganze Clusterflotte bereitstellen.

  • Auswirkungen von falschen Ä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.

  • Einfachere Config Sync-Konfiguration:Bei Flottenpaketen wird Cloud Build verwendet, um sich bei Git zu authentifizieren. Sie müssen sich also nur einmal pro Projekt und nicht einmal pro RootSync- oder RepoSync-Objekt authentifizieren.

Wenn eines oder mehrere der folgenden Szenarien auf Sie zutreffen, sollten Sie Config Sync mit RootSync- oder RepoSync-Objekten anstelle von Flottenpaketen verwenden:

  • 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

  • Bei der Konfiguration 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 zur Transformation 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 Region us-central1 verfügbar. Sie können weiterhin in Clustern in verschiedenen Regionen bereitstellen, müssen aber Cloud Build einrichten und die gcloud CLI in us-central1 konfigurieren.

Architektur

Mit der FleetPackage API können Sie Kubernetes-Manifeste in einer Clusterflotte 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.

Diagramm, das den Fluss von Kubernetes-Ressourcen in Git-Synchronisierungen mit einer Clusterflotte zeigt

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, 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

In der folgenden FleetPackage werden Kubernetes-Ressourcen mit einer schrittweisen Strategie in drei Clustern gleichzeitig bereitgestellt und auf alle Cluster in einer Flotte ausgerichtet:

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

In der folgenden FleetPackage werden Kubernetes-Ressourcen mithilfe einer Labelauswahl nur in Clustern bereitgestellt, deren Mitgliedschaftslabel country 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 befindet sich in Ihrem Git-Repository ein Ordner namens „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
    

Replicas: 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
    

Mithilfe von Varianten können Sie entweder die Bereitstellung „Klein“ oder „Groß“ in verschiedenen Clustern bereitstellen. Jeder Cluster hat das Label nginx-size=small oder nginx-size=large.

Die FleetPackage in diesem Beispiel würde in etwa 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']}

Nächste Schritte

Flottenpakete bereitstellen