2.2. Format d’emballage du cadre opérateur


Ce guide décrit le format d’emballage pour les opérateurs pris en charge par Operator Lifecycle Manager (OLM) dans Red Hat OpenShift Service sur AWS.

2.2.1. Format de paquet

Le format groupé pour les opérateurs est un format d’emballage introduit par le Cadre de l’opérateur. Afin d’améliorer l’évolutivité et de permettre aux utilisateurs en amont d’héberger leurs propres catalogues, la spécification de format groupé simplifie la distribution des métadonnées de l’opérateur.

Le bundle Opérateur représente une seule version d’un Opérateur. Les manifestes de paquets sur disque sont conteneurisés et expédiés sous forme d’image de paquet, qui est une image de conteneur non-runnable qui stocke les manifestes Kubernetes et les métadonnées de l’opérateur. Le stockage et la distribution de l’image de paquet sont ensuite gérés à l’aide d’outils de conteneurs existants tels que podman et docker et des registres de conteneurs tels que Quay.

Les métadonnées de l’opérateur peuvent inclure:

  • Informations qui identifient l’opérateur, par exemple son nom et sa version.
  • Des informations supplémentaires qui pilotent l’interface utilisateur, par exemple son icône et quelques exemples de ressources personnalisées (CRs).
  • API requise et fournies.
  • Images connexes.

Lorsque le chargement se manifeste dans la base de données du Registre de l’opérateur, les exigences suivantes sont validées:

  • Le faisceau doit avoir au moins un canal défini dans les annotations.
  • Chaque paquet a exactement une version de service cluster (CSV).
  • Lorsqu’un CSV possède une définition de ressource personnalisée (CRD), ce CRD doit exister dans le paquet.

2.2.1.1. Les manifestes

Les manifestes de paquets se réfèrent à un ensemble de manifestes Kubernetes qui définissent le déploiement et le modèle RBAC de l’opérateur.

Le bundle comprend un CSV par répertoire et généralement les CRD qui définissent les API appartenant au CSV dans son répertoire /manifestes.

Exemple de mise en page de format de paquet

etcd
├── manifests
│   ├── etcdcluster.crd.yaml
│   └── etcdoperator.clusterserviceversion.yaml
│   └── secret.yaml
│   └── configmap.yaml
└── metadata
    └── annotations.yaml
    └── dependencies.yaml
Copy to Clipboard Toggle word wrap

Autres objets pris en charge

Les types d’objets suivants peuvent également être inclus en option dans le répertoire /manifestes d’un bundle:

Les types d’objets optionnels pris en charge

  • ClusterRole
  • ClusterRoleBinding
  • ConfigMap
  • ConsoleCLIDownload
  • ConsoleLink
  • ConsoleQuickStart
  • ConsoleYamlSample
  • Budget de perturbation de Pod
  • Classe de priorité
  • À propos de PrometheusRule
  • Le rôle
  • À propos de RoleBinding
  • Le secret
  • Le service
  • Compte de ServiceAccount
  • À propos de ServiceMonitor
  • À propos de VerticalPodAutoscaler

Lorsque ces objets optionnels sont inclus dans un paquet, Operator Lifecycle Manager (OLM) peut les créer à partir du paquet et gérer leur cycle de vie avec le CSV:

Cycle de vie pour les objets optionnels

  • Lorsque le CSV est supprimé, OLM supprime l’objet optionnel.
  • Lorsque le CSV est mis à jour:

    • Lorsque le nom de l’objet optionnel est le même, OLM le met à jour en place.
    • Lorsque le nom de l’objet optionnel a changé d’une version à l’autre, OLM le supprime et le recrée.

2.2.1.2. Annotations

Le bundle inclut également un fichier annotations.yaml dans son répertoire /metadata. Ce fichier définit des données agrégées de niveau supérieur qui aident à décrire le format et les informations du paquet sur la façon dont le paquet devrait être ajouté dans un index de paquets:

Exemple annotations.yaml

annotations:
  operators.operatorframework.io.bundle.mediatype.v1: "registry+v1" 
1

  operators.operatorframework.io.bundle.manifests.v1: "manifests/" 
2

  operators.operatorframework.io.bundle.metadata.v1: "metadata/" 
3

  operators.operatorframework.io.bundle.package.v1: "test-operator" 
4

  operators.operatorframework.io.bundle.channels.v1: "beta,stable" 
5

  operators.operatorframework.io.bundle.channel.default.v1: "stable" 
6
Copy to Clipboard Toggle word wrap

1
Le type de média ou le format du paquet Opérateur. Le format Register+v1 signifie qu’il contient un CSV et ses objets Kubernetes associés.
2
Le chemin dans l’image vers le répertoire qui contient l’opérateur se manifeste. Cette étiquette est réservée à une utilisation future et actuellement par défaut aux manifestes/. La valeur manifeste.v1 implique que le paquet contient des manifestes d’opérateur.
3
Le chemin dans l’image vers le répertoire qui contient des fichiers de métadonnées sur le paquet. Cette étiquette est réservée à une utilisation future et actuellement par défaut aux métadonnées/. La valeur métadonnées.v1 implique que ce paquet possède les métadonnées de l’opérateur.
4
Le nom du paquet.
5
La liste des canaux auxquels le bundle s’abonne lorsqu’elle est ajoutée dans un Registre d’opérateur.
6
Le canal par défaut auquel un opérateur doit être souscrit lorsqu’il est installé à partir d’un registre.
Note

En cas d’inadéquation, le fichier annotations.yaml fait autorité car le registre de l’opérateur sur le groupe qui s’appuie sur ces annotations n’a accès qu’à ce fichier.

2.2.1.3. Dépendances

Les dépendances d’un opérateur sont listées dans un fichier de dépendances.yaml dans le dossier métadonnées d’un bundle. Ce fichier est facultatif et actuellement utilisé uniquement pour spécifier des dépendances explicites de version d’opérateur.

La liste de dépendances contient un champ de type pour chaque élément pour spécifier quel type de dépendance il s’agit. Les types de dépendances des opérateurs suivants sont pris en charge:

emballage OLM.
Ce type indique une dépendance pour une version spécifique de l’opérateur. Les informations de dépendance doivent inclure le nom du paquet et la version du paquet au format semver. À titre d’exemple, vous pouvez spécifier une version exacte telle que 0.5.2 ou une gamme de versions telles que >0.5.1.
à propos de OLM.gvk
Avec ce type, l’auteur peut spécifier une dépendance avec des informations de groupe/version/type (GVK), similaire à l’utilisation existante CRD et API dans un CSV. Il s’agit d’un chemin permettant aux auteurs de l’opérateur de consolider toutes les dépendances, API ou versions explicites, pour être au même endroit.
limite OLM.
Ce type déclare des contraintes génériques sur les propriétés arbitraires de l’opérateur.

Dans l’exemple suivant, les dépendances sont spécifiées pour un opérateur Prometheus et etcd CRD:

Exemple de fichier dépendances.yaml

dependencies:
  - type: olm.package
    value:
      packageName: prometheus
      version: ">0.27.0"
  - type: olm.gvk
    value:
      group: etcd.database.coreos.com
      kind: EtcdCluster
      version: v1beta2
Copy to Clipboard Toggle word wrap

2.2.1.4. À propos de l’opm CLI

L’outil Opm CLI est fourni par le Cadre d’opérateur pour une utilisation avec le format de paquet Opm. Cet outil vous permet de créer et de maintenir des catalogues d’opérateurs à partir d’une liste de paquets d’opérateurs similaires aux référentiels de logiciels. Le résultat est une image de conteneur qui peut être stockée dans un registre de conteneurs puis installée sur un cluster.

Le catalogue contient une base de données de pointeurs vers l’opérateur manifeste du contenu qui peut être interrogé via une API incluse qui est servie lorsque l’image du conteneur est exécutée. Dans Red Hat OpenShift Service sur AWS, Operator Lifecycle Manager (OLM) peut référencer l’image dans une source de catalogue, définie par un objet CatalogSource, qui sonne l’image à intervalles réguliers pour permettre des mises à jour fréquentes aux opérateurs installés sur le cluster.

  • Consultez les outils CLI pour les étapes d’installation de l’opm CLI.

2.2.2. Faits saillants

Les catalogues basés sur des fichiers sont la dernière itération du format de catalogue dans Operator Lifecycle Manager (OLM). Il s’agit d’un texte simple (JSON ou YAML) et d’une évolution de configuration déclarative du format de base de données SQLite antérieur, et il est entièrement rétrocompatible. L’objectif de ce format est d’activer l’édition de catalogue de l’opérateur, la composabilité et l’extensibilité.

Édition de l’édition

Avec les catalogues basés sur des fichiers, les utilisateurs qui interagissent avec le contenu d’un catalogue sont en mesure d’apporter des modifications directes au format et de vérifier que leurs modifications sont valides. Comme ce format est en texte brut JSON ou YAML, les mainteneurs de catalogue peuvent facilement manipuler les métadonnées de catalogue à la main ou avec des outils JSON ou YAML largement connus et pris en charge, tels que le jq CLI.

Cette modifiabilité permet les fonctionnalités suivantes et les extensions définies par l’utilisateur:

  • La promotion d’un faisceau existant vers un nouveau canal
  • Changer le canal par défaut d’un paquet
  • Algorithmes personnalisés pour ajouter, mettre à jour et supprimer les chemins de mise à niveau
Composabilité

Les catalogues basés sur des fichiers sont stockés dans une hiérarchie de répertoire arbitraire, ce qui permet la composition du catalogue. À titre d’exemple, envisagez deux répertoires de catalogues distincts basés sur des fichiers : catalogA et catalogB. Le mainteneur de catalogue peut créer un nouveau catalogue combiné en créant un nouveau catalogue C et en copiant le catalogueA et le catalogueB.

Cette composabilité permet des catalogues décentralisés. Le format permet aux auteurs de l’opérateur de maintenir des catalogues spécifiques à l’opérateur, et il permet aux mainteneurs de construire trivialement un catalogue composé de catalogues individuels de l’opérateur. Les catalogues basés sur des fichiers peuvent être composés en combinant plusieurs autres catalogues, en extrayant des sous-ensembles d’un catalogue, ou une combinaison de ces deux catalogues.

Note

Les paquets en double et les paquets dupliqués dans un paquet ne sont pas autorisés. La commande de validation opm renvoie une erreur si des doublons sont trouvés.

Les auteurs de l’opérateur étant plus familiers avec leur opérateur, ses dépendances et sa compatibilité de mise à niveau, ils sont en mesure de maintenir leur propre catalogue spécifique à l’opérateur et d’avoir un contrôle direct sur son contenu. Avec les catalogues basés sur des fichiers, les auteurs de l’opérateur possèdent la tâche de construire et de maintenir leurs paquets dans un catalogue. Cependant, les mainteneurs de catalogues composites ne possèdent que la tâche de gérer les paquets dans leur catalogue et de le publier aux utilisateurs.

Extensibilité

La spécification de catalogue basée sur des fichiers est une représentation de bas niveau d’un catalogue. Bien qu’il puisse être maintenu directement sous sa forme de bas niveau, les mainteneurs de catalogue peuvent construire des extensions intéressantes sur le dessus qui peuvent être utilisées par leur propre outil personnalisé pour effectuer un certain nombre de mutations.

À titre d’exemple, un outil pourrait traduire une API de haut niveau, telle que (mode=semver), jusqu’au format de catalogue de bas niveau basé sur des fichiers pour les chemins de mise à niveau. Il se peut qu’un mainteneur de catalogue doive personnaliser toutes les métadonnées du paquet en ajoutant une nouvelle propriété à des paquets répondant à certains critères.

Bien que cette extensibilité permette de développer des outils officiels supplémentaires en plus des API de bas niveau pour le futur Red Hat OpenShift Service sur les versions AWS, l’avantage majeur est que les responsables du catalogue ont également cette capacité.

Important

À partir de Red Hat OpenShift Service sur AWS 4.11, le catalogue par défaut Red Hat fourni par l’opérateur publie dans le format de catalogue basé sur des fichiers. Les catalogues de Red Hat fournis par défaut pour Red Hat OpenShift Service sur AWS 4.6 à 4.10 publiés dans le format de base de données SQLite obsolète.

Les sous-commandes opm, les drapeaux et les fonctionnalités liés au format de base de données SQLite sont également obsolètes et seront supprimés dans une version ultérieure. Les fonctionnalités sont toujours prises en charge et doivent être utilisées pour les catalogues utilisant le format de base de données SQLite obsolète.

La plupart des sous-commandes et des drapeaux opm pour travailler avec le format de base de données SQLite, tels que le prune de l’index opm, ne fonctionnent pas avec le format de catalogue basé sur des fichiers. Consultez Gérer les catalogues personnalisés pour plus d’informations sur le travail avec les catalogues basés sur les fichiers.

2.2.2.1. La structure des répertoires

Les catalogues basés sur des fichiers peuvent être stockés et chargés à partir de systèmes de fichiers basés sur des répertoires. L’opm CLI charge le catalogue en marchant le répertoire racine et en récursant dans des sous-répertoires. Le CLI tente de charger tous les fichiers qu’il trouve et échoue si des erreurs se produisent.

Les fichiers non catalog peuvent être ignorés en utilisant les fichiers .indexignore, qui ont les mêmes règles pour les modèles et la préséance que les fichiers .gitignore.

Exemple de fichier .indexignore

# Ignore everything except non-object .json and .yaml files
**/*
!*.json
!*.yaml
**/objects/*.json
**/objects/*.yaml
Copy to Clipboard Toggle word wrap

Les responsables du catalogue ont la flexibilité de choisir la disposition souhaitée, mais il est recommandé de stocker les blobs de catalogue de chaque paquet dans des sous-répertoires distincts. Chaque fichier individuel peut être soit JSON ou YAML; il n’est pas nécessaire que chaque fichier d’un catalogue utilise le même format.

La structure de base recommandée

catalog
├── packageA
│   └── index.yaml
├── packageB
│   ├── .indexignore
│   ├── index.yaml
│   └── objects
│       └── packageB.v0.1.0.clusterserviceversion.yaml
└── packageC
    └── index.json
    └── deprecations.yaml
Copy to Clipboard Toggle word wrap

Cette structure recommandée a la propriété que chaque sous-répertoire de la hiérarchie des répertoires est un catalogue autonome, ce qui rend les opérations triviales de système de fichiers triviales de composition, de découverte et de navigation du catalogue. Le catalogue peut également être inclus dans un catalogue parent en le copiant dans le répertoire racine du catalogue parent.

2.2.2.2. Les schémas

Les catalogues basés sur des fichiers utilisent un format, basé sur la spécification du langage CUE, qui peut être étendu avec des schémas arbitraires. Le schéma _Meta CUE suivant définit le format auquel tous les blobs de catalogues basés sur des fichiers doivent adhérer:

_Méta schema

_Meta: {
  // schema is required and must be a non-empty string
  schema: string & !=""

  // package is optional, but if it's defined, it must be a non-empty string
  package?: string & !=""

  // properties is optional, but if it's defined, it must be a list of 0 or more properties
  properties?: [... #Property]
}

#Property: {
  // type is required
  type: string & !=""

  // value is required, and it must not be null
  value: !=null
}
Copy to Clipboard Toggle word wrap

Note

Aucun schéma CUE listé dans cette spécification ne doit être considéré comme exhaustif. La commande de validation opm a des validations supplémentaires qui sont difficiles ou impossibles à exprimer de manière concise dans CUE.

Le catalogue de gestion du cycle de vie de l’opérateur (OLM) utilise actuellement trois schémas (olm.package, olm.channel et olm.bundle), qui correspondent aux concepts de paquets et de paquets existants d’OLM.

Chaque paquet Opérateur dans un catalogue nécessite exactement un blob olm.package, au moins un blob olm.channel et un ou plusieurs blobs olm.bundle.

Note

Les schémas Olm.* sont réservés aux schémas définis par OLM. Les schémas personnalisés doivent utiliser un préfixe unique, tel qu’un domaine que vous possédez.

2.2.2.2.1. schéma OLM.package

Le schéma olm.package définit les métadonnées au niveau du paquet pour un opérateur. Cela inclut son nom, sa description, son canal par défaut et son icône.

Exemple 2.1. schéma OLM.package

#Package: {
  schema: "olm.package"

  // Package name
  name: string & !=""

  // A description of the package
  description?: string

  // The package's default channel
  defaultChannel: string & !=""

  // An optional icon
  icon?: {
    base64data: string
    mediatype:  string
  }
}
Copy to Clipboard Toggle word wrap
2.2.2.2.2. schéma OLM.canal

Le schéma olm.channel définit un canal à l’intérieur d’un paquet, les entrées de paquet qui sont membres du canal et les chemins de mise à niveau pour ces paquets.

Lorsqu’une entrée de paquet représente un bord dans plusieurs blobs olm.canal, elle ne peut apparaître qu’une seule fois par canal.

Il est valable pour une valeur de remplacement d’une entrée de référencer un autre nom de paquet qui ne peut pas être trouvé dans ce catalogue ou un autre catalogue. Cependant, tous les autres invariants de canal doivent tenir vrai, comme un canal n’ayant pas plusieurs têtes.

Exemple 2.2. schéma OLM.canal

#Channel: {
  schema: "olm.channel"
  package: string & !=""
  name: string & !=""
  entries: [...#ChannelEntry]
}

#ChannelEntry: {
  // name is required. It is the name of an `olm.bundle` that
  // is present in the channel.
  name: string & !=""

  // replaces is optional. It is the name of bundle that is replaced
  // by this entry. It does not have to be present in the entry list.
  replaces?: string & !=""

  // skips is optional. It is a list of bundle names that are skipped by
  // this entry. The skipped bundles do not have to be present in the
  // entry list.
  skips?: [...string & !=""]

  // skipRange is optional. It is the semver range of bundle versions
  // that are skipped by this entry.
  skipRange?: string & !=""
}
Copy to Clipboard Toggle word wrap
Avertissement

Lors de l’utilisation du champ skipRange, les versions de l’opérateur sauté sont taillées à partir du graphique de mise à jour et sont plus longues installables par les utilisateurs avec la propriété spec.startingCSV des objets d’abonnement.

Il est possible de mettre à jour progressivement un opérateur tout en gardant les versions précédemment installées à la disposition des utilisateurs pour l’installation future en utilisant à la fois le champ skipRange et le champ de remplacement. Assurez-vous que le champ remplace la version précédente immédiate de la version de l’opérateur en question.

2.2.2.2.3. schéma OLM.bundle

Exemple 2.3. schéma OLM.bundle

#Bundle: {
  schema: "olm.bundle"
  package: string & !=""
  name: string & !=""
  image: string & !=""
  properties: [...#Property]
  relatedImages?: [...#RelatedImage]
}

#Property: {
  // type is required
  type: string & !=""

  // value is required, and it must not be null
  value: !=null
}

#RelatedImage: {
  // image is the image reference
  image: string & !=""

  // name is an optional descriptive name for an image that
  // helps identify its purpose in the context of the bundle
  name?: string & !=""
}
Copy to Clipboard Toggle word wrap
2.2.2.2.4. schéma OLM.déprécations

Le schéma optionnel olm.deprecations définit les informations de déprécation pour les paquets, les paquets et les canaux dans un catalogue. Les auteurs d’opérateurs peuvent utiliser ce schéma pour fournir des messages pertinents sur leurs opérateurs, tels que l’état du support et les chemins de mise à niveau recommandés, aux utilisateurs exécutant ces opérateurs à partir d’un catalogue.

Lorsque ce schéma est défini, le service Red Hat OpenShift sur la console web AWS affiche des badges d’avertissement pour les éléments affectés de l’opérateur, y compris tous les messages de déprécation personnalisés, sur les pages pré- et post-installation de l’opérateur.

L’entrée de schéma olm.deprecations contient un ou plusieurs des types de référence suivants, qui indique la portée de déprécation. Après l’installation de l’opérateur, tous les messages spécifiés peuvent être considérés comme des conditions d’état sur l’objet d’abonnement associé.

Expand
Tableau 2.1. Les types de référence de déprécation
Le typeChamp d’applicationÉtat du statut

emballage OLM.

Représente l’ensemble du paquet

Forfait déprécié

canal OLM.

Il représente un canal

ChannelDeprécated

à propos de OLM.bundle

Il représente une version de bundle

BundleDeprecated

Chaque type de référence a ses propres exigences, comme détaillé dans l’exemple suivant.

Exemple 2.4. Exemple de schéma olm.deprecations avec chaque type de référence

schema: olm.deprecations
package: my-operator 
1

entries:
  - reference:
      schema: olm.package 
2

    message: | 
3

    The 'my-operator' package is end of life. Please use the
    'my-operator-new' package for support.
  - reference:
      schema: olm.channel
      name: alpha 
4

    message: |
    The 'alpha' channel is no longer supported. Please switch to the
    'stable' channel.
  - reference:
      schema: olm.bundle
      name: my-operator.v1.68.0 
5

    message: |
    my-operator.v1.68.0 is deprecated. Uninstall my-operator.v1.68.0 and
    install my-operator.v1.72.0 for support.
Copy to Clipboard Toggle word wrap
1
Chaque schéma de déprécation doit avoir une valeur de paquet, et cette référence de paquet doit être unique dans tout le catalogue. Il ne doit pas y avoir de champ de nom associé.
2
Le schéma olm.package ne doit pas inclure un champ nom, car il est déterminé par le champ de paquet défini plus tôt dans le schéma.
3
Les champs de messages, pour tout type de référence, doivent être d’une longueur non nulle et représenté comme un blob de texte opaque.
4
Le champ nom du schéma olm.channel est requis.
5
Le champ nom du schéma olm.bundle est requis.
Note

La fonction de déprécation ne tient pas compte du chevauchement de la déprécation, par exemple le paquet par rapport au canal par rapport au faisceau.

Les auteurs de l’opérateur peuvent enregistrer les entrées de schéma olm.deprecations en tant que fichier deprecations.yaml dans le même répertoire que le fichier index.yaml du paquet:

Exemple de structure de répertoire pour un catalogue avec déprécations

my-catalog
└── my-operator
    ├── index.yaml
    └── deprecations.yaml
Copy to Clipboard Toggle word wrap

2.2.2.3. Les propriétés

Les propriétés sont des morceaux arbitraires de métadonnées qui peuvent être attachés à des schémas de catalogue basés sur des fichiers. Le champ type est une chaîne qui spécifie efficacement la signification sémantique et syntaxique du champ de valeur. La valeur peut être tout JSON ou YAML arbitraire.

L’OLM définit une poignée de types de propriétés, encore une fois en utilisant le préfixe Olm.* réservé.

2.2.2.3.1. immobilier OLM.package

La propriété olm.package définit le nom et la version du paquet. Il s’agit d’une propriété requise sur les paquets, et il doit y avoir exactement l’une de ces propriétés. Le champ packageName doit correspondre au champ paquet de première classe du paquet, et le champ de version doit être une version sémantique valide.

Exemple 2.5. immobilier OLM.package

#PropertyPackage: {
  type: "olm.package"
  value: {
    packageName: string & !=""
    version: string & !=""
  }
}
Copy to Clipboard Toggle word wrap
2.2.2.3.2. immobilier OLM.gvk

La propriété olm.gvk définit le groupe/version/type (GVK) d’une API Kubernetes fournie par ce paquet. Cette propriété est utilisée par OLM pour résoudre un paquet avec cette propriété en tant que dépendance pour d’autres bundles qui répertorient le même GVK qu’une API requise. Le GVK doit adhérer aux validations Kubernetes GVK.

Exemple 2.6. immobilier OLM.gvk

#PropertyGVK: {
  type: "olm.gvk"
  value: {
    group: string & !=""
    version: string & !=""
    kind: string & !=""
  }
}
Copy to Clipboard Toggle word wrap
2.2.2.3.3. conditions d’utilisation OLM.package.required

La propriété olm.package.required définit le nom du paquet et la gamme de versions d’un autre paquet que ce paquet nécessite. Dans chaque propriété de paquet requise, une liste de paquets, OLM s’assure qu’un opérateur est installé sur le cluster pour le paquet listé et dans la gamme de versions requise. Le champ versionRange doit être une plage sémantique valide (semver).

Exemple 2.7. la propriété OLM.package.required

#PropertyPackageRequired: {
  type: "olm.package.required"
  value: {
    packageName: string & !=""
    versionRange: string & !=""
  }
}
Copy to Clipboard Toggle word wrap
2.2.2.3.4. conditions d’utilisation OLM.gvk.required

La propriété olm.gvk.required définit le groupe/version/type (GVK) d’une API Kubernetes que ce paquet nécessite. Dans chaque propriété GVK requise, une liste de paquets, OLM s’assure qu’un opérateur est installé sur le cluster qui le fournit. Le GVK doit adhérer aux validations Kubernetes GVK.

Exemple 2.8. la propriété OLM.gvk.required

#PropertyGVKRequired: {
  type: "olm.gvk.required"
  value: {
    group: string & !=""
    version: string & !=""
    kind: string & !=""
  }
}
Copy to Clipboard Toggle word wrap

2.2.2.4. Exemple de catalogue

Avec les catalogues basés sur des fichiers, les responsables du catalogue peuvent se concentrer sur la curation et la compatibilité de l’opérateur. Étant donné que les auteurs de l’opérateur ont déjà produit des catalogues spécifiques à l’opérateur pour leurs opérateurs, les responsables du catalogue peuvent construire leur catalogue en rendant chaque catalogue Opérateur dans un sous-répertoire du répertoire racine du catalogue.

Il existe de nombreuses façons possibles de créer un catalogue basé sur des fichiers; les étapes suivantes décrivent une approche simple:

  1. Conserver un fichier de configuration unique pour le catalogue, contenant des références d’image pour chaque opérateur dans le catalogue:

    Exemple de fichier de configuration du catalogue

    name: community-operators
    repo: quay.io/community-operators/catalog
    tag: latest
    references:
    - name: etcd-operator
      image: quay.io/etcd-operator/index@sha256:5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03
    - name: prometheus-operator
      image: quay.io/prometheus-operator/index@sha256:e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317
    Copy to Clipboard Toggle word wrap

  2. Exécutez un script qui analyse le fichier de configuration et crée un nouveau catalogue à partir de ses références:

    Exemple de script

    name=$(yq eval '.name' catalog.yaml)
    mkdir "$name"
    yq eval '.name + "/" + .references[].name' catalog.yaml | xargs mkdir
    for l in $(yq e '.name as $catalog | .references[] | .image + "|" + $catalog + "/" + .name + "/index.yaml"' catalog.yaml); do
      image=$(echo $l | cut -d'|' -f1)
      file=$(echo $l | cut -d'|' -f2)
      opm render "$image" > "$file"
    done
    opm generate dockerfile "$name"
    indexImage=$(yq eval '.repo + ":" + .tag' catalog.yaml)
    docker build -t "$indexImage" -f "$name.Dockerfile" .
    docker push "$indexImage"
    Copy to Clipboard Toggle word wrap

2.2.2.5. Lignes directrices

Considérez les directives suivantes lors de la maintenance des catalogues basés sur des fichiers.

2.2.2.5.1. Des paquets immuables

L’avis général de Operator Lifecycle Manager (OLM) est que les images groupées et leurs métadonnées doivent être traitées comme immuables.

Lorsqu’un paquet cassé a été poussé à un catalogue, vous devez supposer qu’au moins un de vos utilisateurs a été mis à niveau vers ce paquet. Basé sur cette hypothèse, vous devez libérer un autre paquet avec un chemin de mise à niveau à partir du paquet cassé pour s’assurer que les utilisateurs avec le paquet cassé installé reçoivent une mise à niveau. L’OLM ne réinstallera pas un paquet installé si le contenu de ce paquet est mis à jour dans le catalogue.

Cependant, il y a certains cas où un changement dans les métadonnées du catalogue est préféré:

  • Canal promotion: Si vous avez déjà publié un paquet et décidez plus tard que vous souhaitez l’ajouter à un autre canal, vous pouvez ajouter une entrée pour votre paquet dans un autre blob olm.channel.
  • De nouveaux chemins de mise à niveau: Si vous publiez une nouvelle version de paquet 1.2.z, par exemple 1.2.4, mais 1.3.0 est déjà publié, vous pouvez mettre à jour les métadonnées du catalogue pour 1.3.0 pour sauter 1.2.4.
2.2.2.5.2. Contrôle des sources

Les métadonnées du catalogue doivent être stockées dans le contrôle de la source et traitées comme source de vérité. Les mises à jour des images de catalogue devraient inclure les étapes suivantes:

  1. Actualisez le répertoire du catalogue contrôlé par la source avec un nouveau commit.
  2. Créez et poussez l’image du catalogue. Employez une taxonomie de marquage cohérente, telle que :dernière ou :<target_cluster_version>, afin que les utilisateurs puissent recevoir des mises à jour d’un catalogue au fur et à mesure qu’ils deviennent disponibles.

2.2.2.6. L’utilisation de CLI

En ce qui concerne les instructions concernant la création de catalogues basés sur des fichiers à l’aide de l’opm CLI, voir Gérer les catalogues personnalisés. En ce qui concerne la documentation de référence sur les commandes opm CLI liées à la gestion des catalogues basés sur des fichiers, consultez les outils CLI.

2.2.2.7. Automatisation

Les auteurs d’opérateurs et les responsables du catalogue sont encouragés à automatiser la maintenance de leur catalogue avec des flux de travail CI/CD. Les mainteneurs de catalogues peuvent encore s’améliorer à ce sujet en construisant l’automatisation GitOps pour accomplir les tâches suivantes:

  • Les auteurs de la demande de tirage (PR) sont autorisés à apporter les modifications demandées, par exemple en mettant à jour la référence d’image de leur paquet.
  • Assurez-vous que les mises à jour du catalogue passent la commande opm valid.
  • Assurez-vous que les références mises à jour du paquet ou de l’image du catalogue existent, que les images du catalogue s’exécutent avec succès dans un cluster, et que les opérateurs de ce paquet peuvent être installés avec succès.
  • Fusionner automatiquement les PR qui passent les vérifications précédentes.
  • Automatiquement reconstruire et republier l’image du catalogue.
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat