À propos des packages de parc

Cette page explique les packages de flotte, l'API FleetPackage et leur lien avec Config Sync.

Un FleetPackage est une API déclarative qui vous permet de gérer des packages dans un parc. Un paquet de flotte est un ensemble de fichiers manifestes YAML Kubernetes qui définissent la configuration du cluster. En utilisant des packages de parc, vous pouvez déployer des packages via un déploiement simultané ou progressif sur les clusters enregistrés dans votre parc.

Vous définissez chaque objet FleetPackage une fois, puis vous pouvez mettre à jour ce package avec une nouvelle révision. Lorsque vous appliquez une nouvelle révision, le service de package de parc détecte ces modifications et les déploie dans vos clusters.

Avantages

Utilisez des packages de parc pour déployer des ressources Kubernetes dans les clusters enregistrés dans un parc. Une fois que vous avez créé et appliqué un package de flotte, il déploie automatiquement les fichiers de configuration Kubernetes du dépôt Git dans le nouveau cluster. Les packages de flotte s'appuient sur les avantages de Config Sync, comme la correction automatique de la dérive, et offrent les avantages uniques suivants:

  • Automatisation du déploiement des ressources:une fois que vous avez configuré un package de flotte, les ressources Kubernetes qu'il pointe vers sont automatiquement déployées par le service de package de flotte sur tous les clusters.

  • Configurer automatiquement de nouveaux clusters: si vous configurez un package de parc, puis ajoutez des clusters à un parc, toutes les ressources définies par le package de parc sont automatiquement déployées sur le nouveau cluster.

  • Gérez la configuration Kubernetes à grande échelle:au lieu de gérer les clusters un par un, utilisez des packages de flotte pour déployer des ressources sur l'ensemble d'une flotte de clusters.

  • Minimisez l'impact des modifications incorrectes:choisissez un nombre maximal de clusters sur lesquels déployer des ressources à la fois. Vous pouvez surveiller de près les modifications apportées à chaque cluster pour vous assurer que les modifications incorrectes n'affectent pas l'ensemble de votre parc.

  • Simplifiez la configuration de Config Sync:les packages de parc utilisent Cloud Build pour s'authentifier auprès de Git. Vous vous authentifiez donc une fois par projet au lieu d'une fois par objet RootSync ou RepoSync.

Vous pouvez préférer utiliser Config Sync avec des objets RootSync ou RepoSync au lieu de packages de parc si l'un ou plusieurs des scénarios suivants s'appliquent à vous:

  • Vous gérez un petit nombre de clusters.

  • Vous avez besoin de plus de contrôle sur la manière dont les ressources sont déployées dans vos clusters, au-delà de ce que l'API de package de parc fournit avec les libellés et les variantes.

Conditions requises et limites

  • Seuls les dépôts Git sont acceptés en tant que source de vérité lors de la configuration d'un package de flotte.

  • Les ressources Kubernetes stockées dans Git doivent représenter l'état final de la ressource. Les superpositions supplémentaires pour transformer la ressource stockée dans Git ne sont pas acceptées. Pour en savoir plus sur les différences entre ces ressources, consultez Bonne pratique: Créer des dépôts WET.

  • L'API FleetPackage n'est disponible que dans la région us-central1. Vous pouvez toujours déployer dans des clusters situés dans différentes régions, mais vous devez configurer Cloud Build et la gcloud CLI dans us-central1.

Architecture

Vous pouvez utiliser l'API FleetPackage pour déployer des fichiers manifestes Kubernetes sur une flotte de clusters. L'API FleetPackage utilise Cloud Build pour synchroniser et extraire les ressources Kubernetes à partir de votre dépôt Git. Le service de package de parc déploie ensuite ces ressources sur vos clusters.

Schéma illustrant le flux des ressources Kubernetes dans la synchronisation Git avec un parc de clusters

Exemples de cas d'utilisation

Vous pouvez utiliser des packages de parc pour déployer des ressources à partir d'un dépôt Git sur l'ensemble de votre parc de clusters. Vous pouvez également configurer votre package de parc pour contrôler comment, où et quel type de ressources sont déployés.

La section suivante présente des exemples de différentes configurations FleetPackage. Pour en savoir plus sur l'application des packages de parc, consultez la section Déploiement des packages de parc.

Déploiement sur tous les clusters d'un parc

L'FleetPackage suivante utilise une stratégie incrémentielle pour déployer des ressources Kubernetes sur trois clusters à la fois et cible tous les clusters d'une 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

Déploiement sur un sous-ensemble de clusters

L'FleetPackage suivant utilise un sélecteur de libellés pour déployer des ressources Kubernetes uniquement sur les clusters dont le libellé d'appartenance country correspond à "us" dans la 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
    selector:
      matchLabels:
        country: "us"
rolloutStrategy:
  rolling:
    maxConcurrent: 3

Déploiement de ressources de variantes sur un cluster

Pour cet exemple, dans votre dépôt Git, vous disposez d'un dossier nommé "deployments" contenant deux spécifications de déploiement différentes:

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

Vous pouvez utiliser des variantes pour déployer les déploiements "petits" ou "grands" sur différents clusters. Chaque cluster est associé à un libellé nginx-size=small ou nginx-size=large.

Dans cet exemple, FleetPackage ressemble à ceci:

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']}

Étape suivante

Déployer des packages de parc