fleet.yaml

Le fichier fleet.yaml ajoute des options à un paquet. Tout répertoire contenant un fichier fleet.yaml est automatiquement transformé en paquet.

Pour plus d’informations sur la personnalisation des paquets à l’aide de fleet.yaml, voir Contenu du dépôt Git.

Le contenu de fleet.yaml correspond à la structure FleetYAML dans fleetyaml.go, qui contient le BundleSpec.

Exemple complet

Details
fleet.yaml
# The default namespace to be applied to resources. This field is not used to
# enforce or lock down the deployment to a specific namespace, but instead
# provide the default value of the namespace field if one is not specified in
# the manifests.
#
# Default: default
defaultNamespace: default

# All resources will be assigned to this namespace and if any cluster scoped
# resource exists the deployment will fail.
#
# Default: ""
namespace: default

# namespaceLabels are labels that will be appended to the namespace created by
# Fleet.
namespaceLabels:
  key: value

# namespaceAnnotations are annotations that will be appended to the namespace
# created by Fleet.
namespaceAnnotations:
  key: value

# Name of the bundle. If not specified, the bundle name will be computed based
# on the GitRepo's name, and the path from which the bundle is created.
# Default: ""
name: my-great-bundle

# Optional map of labels, that are set at the bundle and can be used in a
# dependsOn.selector
labels:
  key: value

kustomize:
  # Use a custom folder for kustomize resources. This folder must contain a
  # kustomization.yaml file.
  dir: ./kustomize

helm:

  # These options control how "fleet apply" downloads the chart
  # (See `Helm Options` below for more details)
  #
  chart: ./chart

  # A https URL to a Helm repo to download the chart from, or an OCI registry
  # URL (oci://...). For OCI registries, repo is the canonical field and no
  # chart name is needed. For standard Helm repos, the value of `chart` is used
  # as the chart name to look up in the repository.
  repo: https://charts.rancher.io

  # The version of the chart or semver constraint of the chart to find. If a
  # constraint is specified, it is evaluated each time git changes.
  # (See `Helm Options` below for more details)
  version: 0.1.0

  # By default fleet downloads any dependency found in a helm chart.  Use
  # disableDependencyUpdate: true to disable this feature.
  disableDependencyUpdate: false

  ### These options only work for helm-type bundles.
  #
  # Any values that should be placed in the `values.yaml` and passed to helm
  # during install.
  values:

    any-custom: value

    # All labels on Rancher clusters are available using
    # global.fleet.clusterLabels.LABELNAME These can now be accessed directly as
    # variables The variable's value will be an empty string if the referenced
    # cluster label does not exist on the targeted cluster.
    variableName: global.fleet.clusterLabels.LABELNAME

    # See Templating notes below for more information on templating.
    templatedLabel: "${ .ClusterLabels.LABELNAME }-foo"

    valueFromEnv:
      "${ .ClusterLabels.ENV }": ${ .ClusterValues.someValue | upper | quote }

  # Path to any values files that need to be passed to helm during install.
  valuesFiles:
    - values1.yaml
    - values2.yaml

  # Allow to use values files from configmaps or secrets defined in the
  # downstream clusters.
  valuesFrom:
    - configMapKeyRef:
        name: configmap-values
        # default to namespace of bundle
        namespace: default
        key: values.yaml
    - secretKeyRef:
        name: secret-values
        namespace: default
        key: values.yaml

  ### These options control how fleet-agent deploys the bundle, they also apply
  ### for kustomize- and manifest-style bundles.
  #
  # A custom release name to deploy the chart as. If not specified a release name
  # will be generated by combining the invoking GitRepo.name + GitRepo.path.
  releaseName: my-release
  #
  # Makes helm skip the check for its own annotations
  takeOwnership: false
  #
  # Override immutable resources. This could be dangerous.
  force: false
  #
  # Set the Helm --atomic flag when upgrading
  atomic: false
  #
  # Disable go template pre-processing on the fleet values
  disablePreProcess: false
  #
  # Disable DNS resolution in Helm's template functions
  disableDNS: false
  #
  # Skip evaluation of the values.schema.json file
  skipSchemaValidation: false
  #
  # If set and timeoutSeconds provided, will wait until all Jobs have been
  # completed before marking the GitRepo as ready.  It will wait for as long as
  # timeoutSeconds.
  waitForJobs: true

# A paused bundle will not update downstream clusters but instead mark the bundle
# as OutOfSync. One can then manually confirm that a bundle should be deployed to
# the downstream clusters.
#
# Default: false
paused: false

# If rolloutStrategy is not defined in the fleet.yaml file, Fleet uses default rollout values.
rolloutStrategy:

  # A number or percentage of clusters that can be unavailable during an update
  # of a bundle. This follows the same basic approach as a deployment rollout
  # strategy. Once the number of clusters meets unavailable state update will be
  # paused. Default value is 100% which doesn't take effect on update.
  #
  # default: 100%
  maxUnavailable: 15%

  # A number or percentage of cluster partitions that can be unavailable during
  # an update of a bundle.
  #
  # default: 0
  maxUnavailablePartitions: 20%

  # A number or percentage of how to automatically partition clusters if not
  # specific partitioning strategy is configured.
  # The default value is defined in rolloutStrategy.maxUnavailable
  autoPartitionSize: 10%

  # The minimum number of clusters that need to be present before
  # auto-partitioning is enabled. If the number of target clusters is less
  # than this value, all clusters will be placed in a single partition.
  #
  # default: 200
  autoPartitionThreshold: 100

  # The maximum number of new BundleDeployments that can be created in a
  # single reconciliation. This limits the rate at which new deployments are
  # staged when a bundle is first applied to many clusters.
  #
  # default: 50
  maxNew: 50

  # A list of definitions of partitions.  If any target clusters do not match
  # the configuration they are added to partitions at the end following the
  # autoPartitionSize.
  partitions:

    # A user friend name given to the partition used for Display (optional).
    # default: ""
    - name: canary

      # A number or percentage of clusters that can be unavailable in this
      # partition before this partition is treated as done.
      # default: 10%
      maxUnavailable: 10%

      # Selector matching cluster labels to include in this partition
      clusterSelector:
        matchLabels:
          env: prod

      # OR, if selecting by ClusterGroup labels:
      clusterGroupSelector:
        matchLabels:
          env: prod

      # A cluster group name to include in this partition
      clusterGroup: agroup


# Target customization are used to determine how resources should be modified
# per target Targets are evaluated in order and the first one to match a cluster
# is used for that cluster.
targetCustomizations:

  # The name of target. If not specified a default name of the format
  # "target000" will be used. This value is mostly for display
  - name: prod

    # Custom namespace value overriding the value at the root.
    namespace: newvalue

    # Custom defaultNamespace value overriding the value at the root.
    defaultNamespace: newdefaultvalue

    # Custom kustomize options overriding the options at the root.
    kustomize: {}

    # Custom Helm options override the options at the root.
    helm: {}

    # If using raw YAML these are names that map to overlays/{name} that will be
    # used to replace or patch a resource. If you wish to customize the file
    # ./subdir/resource.yaml then a file
    # ./overlays/myoverlay/subdir/resource.yaml will replace the base file.  A
    # file named ./overlays/myoverlay/subdir/resource_patch.yaml will patch the
    # base file.  A patch can in JSON Patch or JSON Merge format or a strategic
    # merge patch for builtin Kubernetes types. Refer to "Raw YAML Resource
    # Customization" below for more information.
    yaml:
      overlays:
        - custom2
        - custom3

    # A selector used to match clusters.  The structure is the standard
    # metav1.LabelSelector format. If clusterGroupSelector or clusterGroup is
    # specified, clusterSelector will be used only to further refine the
    # selection after clusterGroupSelector and clusterGroup is evaluated.
    clusterSelector:
      matchLabels:
        env: prod

    # A selector used to match a specific cluster by name. When using Fleet in
    # Rancher, make sure to put the name of the clusters.fleet.cattle.io
    # resource.
    clusterName: dev-cluster

    # A selector used to match cluster groups.
    clusterGroupSelector:
      matchLabels:
        region: us-east

    # A specific clusterGroup by name that will be selected.
    clusterGroup: group1

    # Resources will not be deployed in the matched clusters if doNotDeploy is
    # true.
    doNotDeploy: false

    # Drift correction removes any external change made to resources managed by
    # Fleet.  It performs a helm rollback, which uses a three-way merge strategy
    # by default.  It will try to update all resources by doing a PUT request if
    # force is enabled.  Three-way strategic merge might fail when updating an
    # item inside of an array as it will try to add a new item instead of
    # replacing the existing one.  This can be fixed by using force.  Keep in
    # mind that resources might be recreated if force is enabled.  Failed
    # rollback will be removed from the helm history unless keepFailHistory is
    # set to true.
    correctDrift:
      enabled: false
      force: false # Warning: it might recreate resources if set to true
      keepFailHistory: false

# dependsOn allows you to configure dependencies to other bundles. The current
# bundle will only be deployed, after all dependencies are deployed an
# accepted state. The default accepted state is the Ready state.
dependsOn:

  # Format:
  #     <GITREPO-NAME>-<BUNDLE_PATH> with all path separators replaced by "-"
  #
  # Example:
  #
  #      GitRepo name "one", Bundle path "/multi-cluster/hello-world"
  #      results in "one-multi-cluster-hello-world".
  #
  # Note:
  #
  #   Bundle names are limited to 53 characters long. If longer they will be
  #   shortened:
  #
  #     opni-fleet-examples-fleets-opni-ui-plugin-operator-crd becomes
  #     opni-fleet-examples-fleets-opni-ui-plugin-opera-021f7
  - name: one-multi-cluster-hello-world
      acceptedStates:
        - Ready
        - Modified
  # Select bundles to depend on based on their label.
  - selector:
      matchLabels:
        app: weak-monkey
    acceptedStates:
      - Ready
      - Modified

# Ignore fields when monitoring a Bundle. This can be used when Fleet thinks
# some conditions in Custom Resources makes the Bundle to be in an error state
# when it shouldn't.
ignore:

  # Conditions to be ignored
  conditions:

    # In this example a condition will be ignored if it contains
    # {"type": "Active", "status", "False"}
    - type: Active
      status: "False"

# Override targets defined in the GitRepo. The Bundle will not have any targets
# from the GitRepo if overrideTargets is provided.
overrideTargets:
  - clusterSelector:
      matchLabels:
        env: dev

Configuration générale du paquet

Ces options définissent les propriétés fondamentales et le comportement du paquet lui-même et s’appliquent à tous les types de paquets.

Option Description S’applique à

paused

Si vrai, le paquet ne sera pas mis à jour sur les clusters en aval. Au lieu de cela, il sera marqué comme Hors de synchronisation. Vous pouvez ensuite approuver manuellement le déploiement.

Toutes

labels

Une carte de paires clé-valeur définies au niveau du paquet. Celles-ci peuvent être utilisées dans un dependsOn.selector pour définir des dépendances.

Toutes

dependsOn

Une liste de paquets dont ce paquet dépend. Le paquet actuel n’est déployé qu’après que toutes les dépendances sont dans un état accepté. Les états acceptés correspondent à tous les bundle states.

Toutes

ignore

Spécifie les champs à ignorer lors de la surveillance de l’état du paquet. Utile pour éviter les états d’erreur faux provenant des ressources personnalisées.

Toutes

overrideTargets

Une liste de personnalisations cibles qui remplacent toutes les cibles définies dans le GitRepo.

Toutes

Configuration de l’espace de noms

Ces options contrôlent l’espace de noms Kubernetes où les ressources seront déployées.

Option Description S’applique à

defaultNamespace

Espace de noms par défaut pour les ressources qui n’en spécifient pas un.

Toutes

namespace

Assigne toutes les ressources dans le paquet à cet espace de noms. Échoue si des ressources à portée de cluster existent.

Toutes

namespaceLabels

Étiquettes à ajouter à l’espace de noms créé par SUSE® Rancher Prime Continuous Delivery.

Toutes

namespaceAnnotations

Annotations à ajouter à l’espace de noms créé par SUSE® Rancher Prime Continuous Delivery.

Toutes

Configuration du paquet Helm

Tous les paquets sont déployés à l’aide de Helm, mais ces options sont spécifiques aux paquets de style Helm (ceux avec un fichier Chart.yaml).

Les paramètres helm.chart, helm.repo et helm.version définis à la racine de fleet.yaml déterminent quel graphique Helm Fleet télécharge.

Fleet télécharge le graphique pendant la phase initiale de création du paquet. Cela se produit avant que targetCustomizations ne soient traités. En conséquence, targetCustomizations ne peut pas être utilisé pour sélectionner une source de graphique différente pour des clusters individuels, tels que :

  • un répertoire de graphique local différent

  • un dépôt Helm séparé

  • un registre OCI différent

Si un cluster spécifique doit utiliser un registre ou une source de graphique différente (par exemple, en raison de restrictions réseau ou de restrictions de la passerelle de périmètre de sécurité), configurez-le à l’aide d’une ressource GitRepo séparée ou d’un chemin de paquet différent.

Source de graphique

Ces options spécifient comment télécharger le graphique. La référence peut être un chemin local, une URL go-getter, un dépôt Helm ou un dépôt OCI Helm.

Option Description S’applique à

helm.chart

L’emplacement du graphique Helm (chemin local ou URL go-getter). Pour les registres OCI, utilisez helm.repo à la place (voir ci-dessous).

Helm

helm.repo

URL d’un dépôt Helm ou d’un registre OCI (oci://…​).

Helm

helm.version

Version du chart ou contrainte semver. Réévalué à chaque changement git.

Helm

helm.disableDependencyUpdate

Si vrai, désactive les téléchargements automatiques de dépendances.

Helm

La référence du chart peut être l’une des suivantes :

  • Chemin local (chart)

  • URL go-getter (chart)

  • URL du chart OCI (repo: oci://…​)

  • Dépôt Helm (repo + chart + version optionnel)

  • Dépôt Helm OCI (repo: oci://…​ + version optionnel)

helm.repo

Pour les registres OCI, helm.repo est le champ canonique pour l’URL OCI. Utilisez-le comme ceci :

helm:
  repo: "oci://ghcr.io/fleetrepoci/guestbook"
  version: "0.1.0"  # optional

Ceci est cohérent avec la façon dont les registres OCI sont référencés dans ressources HelmOp.

helm.chart

Spécifie un chemin local ou une URL go-getter pour le chart Helm. Lorsque helm.repo est défini sur une URL de dépôt Helm standard (non-OCI), helm.chart contient le nom du chart dans ce dépôt.

Si un secret pour la clé SSH a été défini via helmSecretName, il est injecté automatiquement.

Si le fichier fleet.yaml est situé en dehors du répertoire du chart intégré, il doit faire référence explicitement au chart en utilisant helm.chart. Sinon, SUSE® Rancher Prime Continuous Delivery n’installera pas le chart, et les champs spécifiques à Helm comme valuesFiles ou valuesFrom n’auront aucun effet.

Limitation : Le téléchargement de charts Helm depuis Git avec des bundles CA personnalisés ne fonctionne pas. Si un bundle CA est configuré dans un secret référencé dans helmSecretName, il sera ignoré. Voir fleet#3646 pour plus de détails.

Obsolète : Placer une URL OCI (par exemple oci://…​) dans helm.chart est obsolète. Utilisez helm.repo pour les URL OCI à la place.

# Deprecated - still works, but produces a warning in Fleet logs:
helm:
  chart: "oci://ghcr.io/fleetrepoci/guestbook"

# Preferred:
helm:
  repo: "oci://ghcr.io/fleetrepoci/guestbook"

helm.version

Détermine quel chart télécharger depuis les registres OCI.

Les registres OCI ne prennent pas en charge le caractère ` dans les balises semver. Helm remplace ` par _ automatiquement lors de la publication des charts. Utilisez la version + dans fleet.yaml ; SUSE® Rancher Prime Continuous Delivery effectue le même remplacement en interne.

Valeurs

Options pour personnaliser les valeurs des charts Helm.

Option Description S’applique à

helm.values

Paires clé-valeur passées à Helm en tant que valeurs personnalisées. Prend en charge le templating.

Helm

helm.valuesFiles

Chemins vers les fichiers de valeurs passés à Helm.

Helm

helm.valuesFrom

Charge les valeurs à partir de ConfigMaps ou de Secrets dans les clusters en aval.

Helm

Il n’est pas nécessaire de spécifier le values.yaml propre à un chart. Il est toujours utilisé par défaut.

Voir Utilisation des valeurs Helm pour plus d’informations.

Pour les étapes de traitement des valeurs, reportez-vous à Cycle de vie du bundle.

Templating des valeurs

SUSE® Rancher Prime Continuous Delivery prend en charge les expressions de template Go pour des besoins de templating avancés. Voir les fonctions de modèle Sprig pour les fonctions disponibles.

Évitez les fonctions qui produisent des sorties aléatoires (par exemple, uuidv4), car elles déclenchent des redéploiements.

Vous pouvez tester le templating des valeurs avec la CLI, référez-vous à fleet-target.

Clés de contexte de modèle :

  • .ClusterValues

  • .ClusterLabels

  • .ClusterAnnotations

  • .ClusterName

  • .ClusterNamespace

Exemple :

${ get .ClusterLabels "management.cattle.io/cluster-display-name" }

La fonctionnalité de templating SUSE® Rancher Prime Continuous Delivery utilise des délimiteurs ${ } (pas ceux de Helm {{ }}). Échappez-les en utilisant des accents graves :

foo-bar-${`${PWD}`}

Sorties :

foo-bar-${PWD}

Lorsque vous utilisez le templating, protégez-vous contre les valeurs nulles.

Exemple :

${ if hasKey .ClusterLabels "LABELNAME" }${ .ClusterLabels.LABELNAME }${ else }missing${ end}

Déploiement Helm

Ces options contrôlent comment l’agent de Fleet déploie les ressources. Elles s’appliquent également à kustomize- et les bundles de style manifeste.

Option Description S’applique à

helm.releaseName

Nom de version personnalisé. Par défaut, un nom généré est utilisé.

Toutes

helm.takeOwnership

Ignorer les vérifications d’annotation.

Toutes

helm.force

Remplacer les ressources immuables.

Toutes

helm.atomic

Utiliser le drapeau Helm --atomic.

Toutes

helm.waitForJobs

Attendre que tous les travaux soient terminés avant de marquer GitRepo comme prêt.

Toutes

helm.disablePreProcess

Désactiver le prétraitement des modèles Go.

Toutes

helm.disableDNS

Désactiver la résolution DNS dans les modèles.

Toutes

helm.skipSchemaValidation

Ignorer la validation values.schema.json.

Toutes

Configuration Kustomize

Utilisé lors du déploiement à partir d’un répertoire contenant un fichier kustomization.yaml.

Option

Description

S’applique à

kustomize.dir

Dossier personnalisé pour les ressources Kustomize. Doit contenir un fichier kustomization.yaml.

Kustomize

Stratégie de déploiement (Déploiement progressif)

Ces options contrôlent la manière dont les mises à jour se déploient à travers les clusters.

Option Description S’applique à

rolloutStrategy.maxUnavailable

Nombre maximum de clusters non disponibles pendant la mise à jour.

Toutes

rolloutStrategy.maxUnavailablePartitions

Nombre maximum de partitions non disponibles pendant la mise à jour.

Toutes

rolloutStrategy.autoPartitionSize

Taille de partition automatique pour les clusters.

Toutes

rolloutStrategy.autoPartitionThreshold

Le nombre minimum de clusters requis avant que le partitionnement automatique soit activé. En dessous de ce seuil, tous les clusters sont placés dans une seule partition.

Toutes

rolloutStrategy.maxNew

Nombre maximum de nouveaux BundleDeployments pouvant être mis en attente par réconciliation. La valeur par défaut est 50.

Toutes

rolloutStrategy.partitions

Définit les partitions de clusters pour les déploiements progressifs.

Toutes

Pour plus d’informations, voir Stratégie de déploiement.

Ciblage et personnalisation

Ces options vous permettent de personnaliser les déploiements pour des clusters ou groupes de clusters spécifiques.

Option Description S’applique à

targetCustomizations

Liste des règles pour modifier les ressources par cible.

Toutes

targetCustomizations.name

Nom d’affichage pour la personnalisation.

Toutes

targetCustomizations.clusterSelector

Sélecteur d’étiquettes Kubernetes pour les clusters.

Toutes

targetCustomizations.clusterGroup

Nom du groupe de clusters à cibler.

Toutes

targetCustomizations.clusterGroupSelector

Sélecteur d’étiquettes pour les groupes de clusters.

Toutes

targetCustomizations.clusterName

Nom de cluster spécifique à cibler.

Toutes

targetCustomizations.doNotDeploy

Empêche le déploiement vers les clusters correspondants.

Toutes

targetCustomizations.namespace

Remplace l’espace de noms au niveau racine.

Toutes

targetCustomizations.defaultNamespace

Remplace l’espace de noms par défaut au niveau racine.

Toutes

targetCustomizations.helm

Remplace la configuration Helm au niveau racine.

Toutes

targetCustomizations.kustomize

Remplace la configuration Kustomize au niveau racine.

Kustomize

targetCustomizations.yaml.overlays

Noms de superposition pour remplacer ou corriger les ressources YAML.

YAML brut

targetCustomizations.correctDrift

Active la correction de dérive pour les ressources gérées.

Toutes

Personnalisations prises en charge

Le remplacement des versions des charts Helm dans les personnalisations cibles peut augmenter la taille des paquets. Parce que SUSE® Rancher Prime Continuous Delivery stocke des paquets dans etcd, cela peut dépasser la limite de taille des blobs d’etcd. Référez-vous à fleet#1650 pour plus de détails.