2.4. Gestionnaire du cycle de vie des opérateurs (OLM)
2.4.1. Concepts et ressources du gestionnaire du cycle de vie de l'opérateur
Ce guide fournit une vue d'ensemble des concepts qui régissent Operator Lifecycle Manager (OLM) dans OpenShift Container Platform.
2.4.1.1. Qu'est-ce que l'Operator Lifecycle Manager ?
Operator Lifecycle Manager (OLM) aide les utilisateurs à installer, mettre à jour et gérer le cycle de vie des applications natives Kubernetes (Operators) et de leurs services associés s'exécutant sur leurs clusters OpenShift Container Platform. Il fait partie de l'Operator Framework, une boîte à outils open source conçue pour gérer les opérateurs de manière efficace, automatisée et évolutive.
Figure 2.2. Flux de travail du gestionnaire du cycle de vie de l'opérateur
OLM fonctionne par défaut dans OpenShift Container Platform 4.12, ce qui aide les administrateurs de clusters à installer, mettre à niveau et accorder l'accès aux opérateurs fonctionnant sur leur cluster. La console web d'OpenShift Container Platform fournit des écrans de gestion permettant aux administrateurs de cluster d'installer des opérateurs, ainsi que d'accorder à des projets spécifiques l'accès à l'utilisation du catalogue d'opérateurs disponibles sur le cluster.
Pour les développeurs, une expérience en libre-service permet de provisionner et de configurer des instances de bases de données, de surveillance et de services de big data sans avoir à être des experts en la matière, car l'opérateur dispose de ces connaissances.
2.4.1.2. Ressources OLM
Les définitions de ressources personnalisées (CRD) suivantes sont définies et gérées par Operator Lifecycle Manager (OLM) :
Ressources | Nom court | Description |
---|---|---|
|
| Métadonnées de l'application. Par exemple : nom, version, icône, ressources nécessaires. |
|
| Un référentiel de CSV, CRD et paquets qui définissent une application. |
|
| Maintient les CSV à jour en suivant un canal dans un paquet. |
|
| Liste calculée des ressources à créer pour installer ou mettre à jour automatiquement un CSV. |
|
|
Configure tous les opérateurs déployés dans le même espace de noms que l'objet |
| - |
Crée un canal de communication entre OLM et un opérateur qu'il gère. Les opérateurs peuvent écrire dans le tableau |
2.4.1.2.1. Version du service de cluster
Un cluster service version (CSV) représente une version spécifique d'un Operator en cours d'exécution sur un cluster OpenShift Container Platform. Il s'agit d'un manifeste YAML créé à partir des métadonnées de l'opérateur qui aide Operator Lifecycle Manager (OLM) à exécuter l'opérateur dans le cluster.
OLM a besoin de ces métadonnées sur un opérateur pour s'assurer qu'il peut être exécuté en toute sécurité sur un cluster et pour fournir des informations sur la manière dont les mises à jour doivent être appliquées lorsque de nouvelles versions de l'opérateur sont publiées. Cela ressemble à l'empaquetage d'un logiciel pour un système d'exploitation traditionnel ; considérez l'étape d'empaquetage pour OLM comme l'étape à laquelle vous créez votre paquet rpm
, deb
, ou apk
.
Un CSV comprend les métadonnées qui accompagnent l'image d'un conteneur d'opérateur, utilisées pour remplir les interfaces utilisateur avec des informations telles que le nom, la version, la description, les étiquettes, le lien vers le référentiel et le logo.
Un CSV est également une source d'informations techniques nécessaires à l'exécution de l'opérateur, telles que les ressources personnalisées (CR) qu'il gère ou dont il dépend, les règles RBAC, les exigences du cluster et les stratégies d'installation. Ces informations indiquent à OLM comment créer les ressources requises et configurer l'opérateur en tant que déploiement.
2.4.1.2.2. Source du catalogue
Un site catalog source représente un magasin de métadonnées, généralement en faisant référence à un site index image stocké dans un registre de conteneurs. Operator Lifecycle Manager (OLM) interroge les sources du catalogue pour découvrir et installer les opérateurs et leurs dépendances. OperatorHub dans la console web d'OpenShift Container Platform affiche également les opérateurs fournis par les sources du catalogue.
Les administrateurs de cluster peuvent consulter la liste complète des opérateurs fournis par une source de catalogue activée sur un cluster en utilisant la page Administration
Le site spec
d'un objet CatalogSource
indique comment construire un pod ou comment communiquer avec un service qui sert l'API gRPC du registre des opérateurs.
Exemple 2.8. Exemple d'objet CatalogSource
apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: generation: 1 name: example-catalog 1 namespace: openshift-marketplace 2 annotations: olm.catalogImageTemplate: 3 "quay.io/example-org/example-catalog:v{kube_major_version}.{kube_minor_version}.{kube_patch_version}" spec: displayName: Example Catalog 4 image: quay.io/example-org/example-catalog:v1 5 priority: -400 6 publisher: Example Org sourceType: grpc 7 grpcPodConfig: securityContextConfig: <security_mode> 8 nodeSelector: 9 custom_label: <label> priorityClassName: system-cluster-critical 10 tolerations: 11 - key: "key1" operator: "Equal" value: "value1" effect: "NoSchedule" updateStrategy: registryPoll: 12 interval: 30m0s status: connectionState: address: example-catalog.openshift-marketplace.svc:50051 lastConnect: 2021-08-26T18:14:31Z lastObservedState: READY 13 latestImageRegistryPoll: 2021-08-26T18:46:25Z 14 registryService: 15 createdAt: 2021-08-26T16:16:37Z port: 50051 protocol: grpc serviceName: example-catalog serviceNamespace: openshift-marketplace
- 1
- Nom de l'objet
CatalogSource
. Cette valeur est également utilisée comme partie du nom du pod connexe qui est créé dans l'espace de noms demandé. - 2
- Espace de noms dans lequel créer le catalogue. Pour rendre le catalogue disponible à l'échelle du cluster dans tous les espaces de noms, définissez cette valeur sur
openshift-marketplace
. Les sources de catalogues fournies par Red Hat par défaut utilisent également l'espace de nomsopenshift-marketplace
. Sinon, définissez la valeur sur un espace de noms spécifique pour que l'opérateur ne soit disponible que dans cet espace de noms. - 3
- Facultatif : Pour éviter que les mises à niveau de clusters ne laissent les installations Operator dans un état non pris en charge ou sans chemin de mise à jour continu, vous pouvez activer le changement automatique de la version de l'image d'index de votre catalogue Operator dans le cadre des mises à niveau de clusters.
Définissez l'annotation
olm.catalogImageTemplate
avec le nom de votre image d'index et utilisez une ou plusieurs variables de version du cluster Kubernetes comme indiqué lors de la construction du modèle pour la balise d'image. L'annotation remplace le champspec.image
au moment de l'exécution. Voir la section "Modèle d'image pour les sources de catalogue personnalisées" pour plus de détails. - 4
- Nom d'affichage du catalogue dans la console web et la CLI.
- 5
- Image d'index pour le catalogue. En option, peut être omis lors de l'utilisation de l'annotation
olm.catalogImageTemplate
, qui définit la spécification d'extraction au moment de l'exécution. - 6
- Poids de la source du catalogue. OLM utilise ce poids pour établir des priorités lors de la résolution des dépendances. Un poids élevé indique que le catalogue est préféré aux catalogues de poids inférieur.
- 7
- Les types de sources sont les suivants :
-
grpc
avec une référenceimage
: OLM extrait l'image et exécute le pod, qui est censé servir une API conforme. -
grpc
avec un champaddress
: OLM tente de contacter l'API gRPC à l'adresse indiquée. Ce champ ne doit pas être utilisé dans la plupart des cas. -
configmap
: OLM analyse les données de la carte de configuration et exécute un pod qui peut servir l'API gRPC.
-
- 8
- Spécifiez la valeur de
legacy
ourestricted
. Si le champ n'est pas défini, la valeur par défaut estlegacy
. Dans une prochaine version d'OpenShift Container Platform, il est prévu que la valeur par défaut soitrestricted
. Si votre catalogue ne peut pas s'exécuter avec les autorisationsrestricted
, il est recommandé de définir manuellement ce champ surlegacy
. - 9
- Facultatif : Pour les sources de catalogue de type
grpc
, remplace le sélecteur de nœud par défaut pour le pod qui sert le contenu dansspec.image
, s'il est défini. - 10
- Facultatif : Pour les sources de catalogue de type
grpc
, remplace le nom de la classe de priorité par défaut pour le pod qui sert le contenu dansspec.image
, s'il est défini. Kubernetes fournit les classes de prioritésystem-cluster-critical
etsystem-node-critical
par défaut. La définition d'un champ vide (""
) attribue au pod la priorité par défaut. D'autres classes de priorité peuvent être définies manuellement. - 11
- Facultatif : Pour les sources de catalogue de type
grpc
, remplace les tolérances par défaut pour le pod servant le contenu dansspec.image
, si elles sont définies. - 12
- Vérifier automatiquement la présence de nouvelles versions à un intervalle donné pour rester à jour.
- 13
- Dernier état observé de la connexion au catalogue. Par exemple :
-
READY
: Une connexion est établie avec succès. -
CONNECTING
: Une connexion tente de s'établir. -
TRANSIENT_FAILURE
: Un problème temporaire s'est produit lors de la tentative d'établissement d'une connexion, tel qu'un dépassement de délai. L'état repassera éventuellement àCONNECTING
et la tentative recommencera.
Pour plus de détails, voir la section États de connectivité dans la documentation gRPC.
-
- 14
- Dernière heure à laquelle le registre du conteneur stockant l'image du catalogue a été interrogé pour s'assurer que l'image est à jour.
- 15
- Informations sur l'état du service de registre des opérateurs du catalogue.
La référence à name
d'un objet CatalogSource
dans un abonnement indique à OLM où rechercher l'opérateur demandé :
Exemple 2.9. Exemple Subscription
objet référençant une source de catalogue
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: example-operator namespace: example-namespace spec: channel: stable name: example-operator source: example-catalog sourceNamespace: openshift-marketplace
Ressources supplémentaires
- Comprendre OperatorHub
- Red Hat-provided Operator catalogs
- Ajout d'une source de catalogue à un cluster
- Priorité au catalogue
- Visualisation de l'état de la source du catalogue de l'opérateur à l'aide de la CLI
- Comprendre et gérer l'admission à la sécurité des pods
- Catalogage de la source d'ordonnancement des pods
2.4.1.2.2.1. Modèle d'image pour les sources de catalogue personnalisées
La compatibilité de l'opérateur avec le cluster sous-jacent peut être exprimée par une source de catalogue de différentes manières. L'une d'entre elles, utilisée pour les sources de catalogue fournies par défaut par Red Hat, consiste à identifier des balises d'image pour les images d'index qui sont spécifiquement créées pour une version de plateforme particulière, par exemple OpenShift Container Platform 4.12.
Au cours d'une mise à niveau de cluster, la balise d'image d'index pour les sources de catalogue par défaut fournies par Red Hat est mise à jour automatiquement par l'opérateur de version de cluster (CVO) afin que Operator Lifecycle Manager (OLM) tire la version mise à jour du catalogue. Par exemple, lors d'une mise à niveau d'OpenShift Container Platform 4.11 à 4.12, le champ spec.image
dans l'objet CatalogSource
pour le catalogue redhat-operators
est mis à jour de :
registry.redhat.io/redhat/redhat-operator-index:v4.11
à :
registry.redhat.io/redhat/redhat-operator-index:v4.12
Cependant, l'OVC ne met pas automatiquement à jour les balises d'image pour les catalogues personnalisés. Pour s'assurer que les utilisateurs disposent d'une installation d'Operator compatible et prise en charge après une mise à niveau du cluster, les catalogues personnalisés doivent également être mis à jour pour faire référence à une image d'index mise à jour.
À partir d'OpenShift Container Platform 4.9, les administrateurs de clusters peuvent ajouter l'annotation olm.catalogImageTemplate
dans l'objet CatalogSource
pour les catalogues personnalisés à une référence d'image qui inclut un modèle. Les variables de version Kubernetes suivantes sont prises en charge pour une utilisation dans le modèle :
-
kube_major_version
-
kube_minor_version
-
kube_patch_version
Vous devez spécifier la version du cluster Kubernetes et non celle du cluster OpenShift Container Platform, car cette dernière n'est actuellement pas disponible pour le templating.
À condition d'avoir créé et poussé une image d'index avec une balise spécifiant la version Kubernetes mise à jour, la définition de cette annotation permet de modifier automatiquement les versions de l'image d'index dans les catalogues personnalisés après une mise à niveau du cluster. La valeur de l'annotation est utilisée pour définir ou mettre à jour la référence de l'image dans le champ spec.image
de l'objet CatalogSource
. Cela permet d'éviter que les mises à niveau de cluster ne laissent les installations d'opérateurs dans des états non pris en charge ou sans chemin de mise à jour continu.
Vous devez vous assurer que l'image d'index avec la balise mise à jour, quel que soit le registre dans lequel elle est stockée, est accessible par le cluster au moment de la mise à niveau du cluster.
Exemple 2.10. Exemple de source de catalogue avec un modèle d'image
apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: generation: 1 name: example-catalog namespace: openshift-marketplace annotations: olm.catalogImageTemplate: "quay.io/example-org/example-catalog:v{kube_major_version}.{kube_minor_version}" spec: displayName: Example Catalog image: quay.io/example-org/example-catalog:v1.25 priority: -400 publisher: Example Org
Si le champ spec.image
et l'annotation olm.catalogImageTemplate
sont tous deux définis, le champ spec.image
est remplacé par la valeur résolue de l'annotation. Si l'annotation n'aboutit pas à une spécification d'extraction utilisable, la source du catalogue revient à la valeur définie pour spec.image
.
Si le champ spec.image
n'est pas défini et que l'annotation ne se résout pas en une spécification d'extraction utilisable, OLM interrompt le rapprochement de la source du catalogue et la place dans une condition d'erreur lisible par l'homme.
Pour un cluster OpenShift Container Platform 4.12, qui utilise Kubernetes 1.25, l'annotation olm.catalogImageTemplate
dans l'exemple précédent se résout à la référence d'image suivante :
quay.io/example-org/example-catalog:v1.25
Pour les futures versions d'OpenShift Container Platform, vous pouvez créer des images d'index mises à jour pour vos catalogues personnalisés qui ciblent la version Kubernetes ultérieure utilisée par la version ultérieure d'OpenShift Container Platform. Avec l'annotation olm.catalogImageTemplate
définie avant la mise à niveau, la mise à niveau du cluster vers la version ultérieure d'OpenShift Container Platform mettrait automatiquement à jour l'image d'index du catalogue.
2.4.1.2.3. Abonnement
Un subscription, défini par un objet Subscription
, représente l'intention d'installer un opérateur. C'est la ressource personnalisée qui relie un opérateur à une source de catalogue.
Les abonnements décrivent le canal d'un paquetage d'opérateur auquel il faut s'abonner et s'il faut effectuer les mises à jour automatiquement ou manuellement. S'il est défini sur automatique, l'abonnement permet à Operator Lifecycle Manager (OLM) de gérer et de mettre à jour l'opérateur afin de garantir que la dernière version est toujours en cours d'exécution dans le cluster.
Exemple d'objet Subscription
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: example-operator namespace: example-namespace spec: channel: stable name: example-operator source: example-catalog sourceNamespace: openshift-marketplace
Cet objet Subscription
définit le nom et l'espace de noms de l'opérateur, ainsi que le catalogue dans lequel les données de l'opérateur peuvent être trouvées. Le canal, tel que alpha
, beta
, ou stable
, permet de déterminer quel flux d'opérateur doit être installé à partir de la source du catalogue.
Les noms des canaux dans un abonnement peuvent varier d'un opérateur à l'autre, mais le système de dénomination doit suivre une convention commune au sein d'un opérateur donné. Par exemple, les noms des canaux peuvent suivre un flux de mises à jour de versions mineures pour l'application fournie par l'opérateur (1.2
, 1.3
) ou une fréquence de publication (stable
, fast
).
En plus d'être facilement visible depuis la console web d'OpenShift Container Platform, il est possible d'identifier la disponibilité d'une version plus récente d'un Operator en inspectant l'état de l'abonnement correspondant. La valeur associée au champ currentCSV
est la version la plus récente connue par OLM, et installedCSV
est la version installée sur le cluster.
2.4.1.2.4. Plan d'installation
Un install plan, défini par un objet InstallPlan
, décrit un ensemble de ressources que Operator Lifecycle Manager (OLM) crée pour installer ou mettre à niveau une version spécifique d'un opérateur. La version est définie par une version de service de cluster (CSV).
Pour installer un opérateur, un administrateur de cluster ou un utilisateur ayant reçu des autorisations d'installation d'opérateur doit d'abord créer un objet Subscription
. Un abonnement représente l'intention de s'abonner à un flux de versions disponibles d'un opérateur à partir d'une source de catalogue. L'abonnement crée ensuite un objet InstallPlan
pour faciliter l'installation des ressources de l'opérateur.
Le plan d'installation doit ensuite être approuvé selon l'une des stratégies d'approbation suivantes :
-
Si le champ
spec.installPlanApproval
de l'abonnement est défini surAutomatic
, le plan d'installation est approuvé automatiquement. -
Si le champ
spec.installPlanApproval
de l'abonnement est défini surManual
, le plan d'installation doit être approuvé manuellement par un administrateur de cluster ou un utilisateur disposant des autorisations appropriées.
Une fois le plan d'installation approuvé, OLM crée les ressources spécifiées et installe l'opérateur dans l'espace de noms spécifié par l'abonnement.
Exemple 2.11. Exemple d'objet InstallPlan
apiVersion: operators.coreos.com/v1alpha1 kind: InstallPlan metadata: name: install-abcde namespace: operators spec: approval: Automatic approved: true clusterServiceVersionNames: - my-operator.v1.0.1 generation: 1 status: ... catalogSources: [] conditions: - lastTransitionTime: '2021-01-01T20:17:27Z' lastUpdateTime: '2021-01-01T20:17:27Z' status: 'True' type: Installed phase: Complete plan: - resolving: my-operator.v1.0.1 resource: group: operators.coreos.com kind: ClusterServiceVersion manifest: >- ... name: my-operator.v1.0.1 sourceName: redhat-operators sourceNamespace: openshift-marketplace version: v1alpha1 status: Created - resolving: my-operator.v1.0.1 resource: group: apiextensions.k8s.io kind: CustomResourceDefinition manifest: >- ... name: webservers.web.servers.org sourceName: redhat-operators sourceNamespace: openshift-marketplace version: v1beta1 status: Created - resolving: my-operator.v1.0.1 resource: group: '' kind: ServiceAccount manifest: >- ... name: my-operator sourceName: redhat-operators sourceNamespace: openshift-marketplace version: v1 status: Created - resolving: my-operator.v1.0.1 resource: group: rbac.authorization.k8s.io kind: Role manifest: >- ... name: my-operator.v1.0.1-my-operator-6d7cbc6f57 sourceName: redhat-operators sourceNamespace: openshift-marketplace version: v1 status: Created - resolving: my-operator.v1.0.1 resource: group: rbac.authorization.k8s.io kind: RoleBinding manifest: >- ... name: my-operator.v1.0.1-my-operator-6d7cbc6f57 sourceName: redhat-operators sourceNamespace: openshift-marketplace version: v1 status: Created ...
2.4.1.2.5. Groupes d'opérateurs
Un site Operator group, défini par la ressource OperatorGroup
, fournit une configuration multitenant aux opérateurs installés dans OLM. Un groupe d'opérateurs sélectionne des espaces de noms cibles dans lesquels générer l'accès RBAC requis pour les opérateurs qui en font partie.
L'ensemble des espaces de noms cibles est fourni par une chaîne délimitée par des virgules, stockée dans l'annotation olm.targetNamespaces
d'une version de service de cluster (CSV). Cette annotation est appliquée aux instances CSV des opérateurs membres et est projetée dans leurs déploiements.
Ressources supplémentaires
2.4.1.2.6. Conditions de l'opérateur
Dans le cadre de son rôle de gestion du cycle de vie d'un opérateur, Operator Lifecycle Manager (OLM) déduit l'état d'un opérateur à partir de l'état des ressources Kubernetes qui définissent l'opérateur. Bien que cette approche fournisse un certain niveau d'assurance qu'un opérateur est dans un état donné, il y a de nombreux cas où un opérateur peut avoir besoin de communiquer des informations à OLM qui ne pourraient pas être déduites autrement. Ces informations peuvent alors être utilisées par OLM pour mieux gérer le cycle de vie de l'opérateur.
OLM fournit une définition de ressource personnalisée (CRD) appelée OperatorCondition
qui permet aux opérateurs de communiquer des conditions à OLM. Il existe un ensemble de conditions prises en charge qui influencent la gestion de l'opérateur par OLM lorsqu'elles sont présentes dans le tableau Spec.Conditions
d'une ressource OperatorCondition
.
Par défaut, le tableau Spec.Conditions
n'est pas présent dans un objet OperatorCondition
jusqu'à ce qu'il soit ajouté par un utilisateur ou à la suite d'une logique d'opérateur personnalisée.
Ressources supplémentaires
2.4.2. Architecture du gestionnaire du cycle de vie de l'opérateur
Ce guide présente l'architecture des composants de Operator Lifecycle Manager (OLM) dans OpenShift Container Platform.
2.4.2.1. Responsabilités des composantes
Le gestionnaire du cycle de vie des opérateurs (OLM) est composé de deux opérateurs : l'opérateur OLM et l'opérateur de catalogue.
Chacun de ces opérateurs est responsable de la gestion des définitions de ressources personnalisées (CRD) qui constituent la base du cadre OLM :
Ressources | Nom court | Propriétaire | Description |
---|---|---|---|
|
| OLM | Métadonnées de l'application : nom, version, icône, ressources nécessaires, installation, etc. |
|
| Catalogue | Liste calculée des ressources à créer pour installer ou mettre à jour automatiquement un CSV. |
|
| Catalogue | Un référentiel de CSV, CRD et paquets qui définissent une application. |
|
| Catalogue | Utilisé pour maintenir les CSV à jour en suivant un canal dans un paquet. |
|
| OLM |
Configure tous les opérateurs déployés dans le même espace de noms que l'objet |
Chacun de ces opérateurs est également responsable de la création des ressources suivantes :
Ressources | Propriétaire |
---|---|
| OLM |
| |
| |
| |
| Catalogue |
|
2.4.2.2. Opérateur OLM
L'opérateur OLM est chargé de déployer les applications définies par les ressources CSV une fois que les ressources requises spécifiées dans le CSV sont présentes dans le cluster.
L'opérateur OLM ne s'occupe pas de la création des ressources nécessaires ; vous pouvez choisir de créer manuellement ces ressources à l'aide du CLI ou de l'opérateur de catalogue. Cette séparation des préoccupations permet aux utilisateurs de s'approprier progressivement la partie du cadre OLM qu'ils choisissent d'exploiter pour leur application.
L'opérateur OLM utilise le flux de travail suivant :
- Surveillez les versions de service de cluster (CSV) dans un espace de noms et vérifiez que les exigences sont respectées.
Si les conditions sont remplies, exécutez la stratégie d'installation pour le CSV.
NoteUn CSV doit être un membre actif d'un groupe d'opérateurs pour que la stratégie d'installation s'exécute.
2.4.2.3. Opérateur de catalogue
L'opérateur de catalogue est responsable de la résolution et de l'installation des versions de service de cluster (CSV) et des ressources requises qu'elles spécifient. Il est également chargé de surveiller les sources du catalogue pour détecter les mises à jour des paquets dans les canaux et de les mettre à niveau, automatiquement si nécessaire, vers les dernières versions disponibles.
Pour suivre un paquet dans un canal, vous pouvez créer un objet Subscription
configurant le paquet souhaité, le canal et l'objet CatalogSource
que vous souhaitez utiliser pour extraire les mises à jour. Lorsque des mises à jour sont trouvées, un objet InstallPlan
approprié est écrit dans l'espace de noms au nom de l'utilisateur.
L'opérateur de catalogue utilise le flux de travail suivant :
- Connectez-vous à chaque source de catalogue dans le cluster.
Rechercher les plans d'installation non résolus créés par un utilisateur et, le cas échéant, les trouver :
- Rechercher le fichier CSV correspondant au nom demandé et l'ajouter en tant que ressource résolue.
- Pour chaque CRD géré ou requis, ajouter le CRD en tant que ressource résolue.
- Pour chaque CRD requis, trouvez le CSV qui le gère.
- Surveillez les plans d'installation résolus et créez toutes les ressources découvertes, si elles ont été approuvées par un utilisateur ou automatiquement.
- Surveillez les sources et les abonnements du catalogue et créez des plans d'installation basés sur ces sources et abonnements.
2.4.2.4. Registre du catalogue
Le registre de catalogue stocke les CSV et les CRD pour la création dans un cluster et stocke les métadonnées sur les paquets et les canaux.
Un site package manifest est une entrée dans le registre du catalogue qui associe une identité de paquet à des ensembles de CSV. Au sein d'un paquet, les canaux pointent vers un CSV particulier. Comme les CSV font explicitement référence au CSV qu'ils remplacent, un manifeste de paquet fournit à l'opérateur de catalogue toutes les informations nécessaires pour mettre à jour un CSV vers la dernière version d'un canal, en passant par chaque version intermédiaire.
2.4.3. Flux de travail du gestionnaire du cycle de vie de l'opérateur
Ce guide décrit le flux de travail de l'Operator Lifecycle Manager (OLM) dans OpenShift Container Platform.
2.4.3.1. Processus d'installation et de mise à niveau de l'opérateur dans OLM
Dans l'écosystème du gestionnaire du cycle de vie des opérateurs (OLM), les ressources suivantes sont utilisées pour résoudre les problèmes d'installation et de mise à niveau des opérateurs :
-
ClusterServiceVersion
(CSV) -
CatalogSource
-
Subscription
Les métadonnées des opérateurs, définies dans des fichiers CSV, peuvent être stockées dans une collection appelée source de catalogue. OLM utilise les sources du catalogue, qui utilisent l'API du registre des opérateurs, pour rechercher les opérateurs disponibles ainsi que les mises à niveau des opérateurs installés.
Figure 2.3. Vue d'ensemble des sources du catalogue
Au sein d'un catalogue source, les opérateurs sont organisés en packages et en flux de mises à jour appelés channels, ce qui devrait être un modèle de mise à jour familier d'OpenShift Container Platform ou d'autres logiciels à cycle de publication continu tels que les navigateurs Web.
Figure 2.4. Paquets et chaînes dans un catalogue source
Un utilisateur indique un paquet et un canal particuliers dans une source de catalogue particulière dans un subscription, par exemple un paquet etcd
et son canal alpha
. Si un abonnement est souscrit pour un paquet qui n'a pas encore été installé dans l'espace de nommage, le dernier opérateur pour ce paquet est installé.
OLM évite délibérément les comparaisons de versions, de sorte que l'opérateur "latest" ou "newest" disponible sur un chemin donné catalog
Chaque CSV a un paramètre replaces
qui indique l'opérateur qu'il remplace. Il en résulte un graphe de CSV qui peut être interrogé par OLM et dont les mises à jour peuvent être partagées entre les canaux. Les canaux peuvent être considérés comme des points d'entrée dans le graphe des mises à jour :
Figure 2.5. Graphique OLM des mises à jour des canaux disponibles
Exemples de chaînes dans un paquet
packageName: example channels: - name: alpha currentCSV: example.v0.1.2 - name: beta currentCSV: example.v0.1.3 defaultChannel: alpha
Pour qu'OLM puisse demander avec succès des mises à jour, compte tenu d'une source de catalogue, d'un paquet, d'un canal et d'un CSV, un catalogue doit pouvoir renvoyer, sans ambiguïté et de manière déterministe, un CSV unique qui replaces
le CSV d'entrée.
2.4.3.1.1. Exemple de chemin de mise à niveau
Pour un exemple de scénario de mise à niveau, considérons un opérateur installé correspondant à la version CSV 0.1.1
. OLM interroge la source du catalogue et détecte une mise à niveau dans le canal souscrit avec la nouvelle version CSV 0.1.3
qui remplace une version CSV plus ancienne mais non installée 0.1.2
, qui à son tour remplace la version CSV plus ancienne et installée 0.1.1
.
OLM remonte de la tête de réseau aux versions précédentes via le champ replaces
spécifié dans les CSV pour déterminer le chemin de mise à niveau 0.1.3
0.1.2
0.1.1
; le sens de la flèche indique que la première version remplace la seconde. OLM met à niveau l'opérateur une version à la fois jusqu'à ce qu'il atteigne la tête de canal.
Pour ce scénario, OLM installe la version de l'opérateur 0.1.2
pour remplacer la version existante de l'opérateur 0.1.1
. Ensuite, il installe la version de l'opérateur 0.1.3
pour remplacer la version de l'opérateur 0.1.2
précédemment installée. À ce stade, la version de l'opérateur installée 0.1.3
correspond à la tête de canal et la mise à niveau est terminée.
2.4.3.1.2. Sauter des mises à niveau
Le chemin de base pour les mises à niveau dans OLM est le suivant :
- Une source de catalogue est mise à jour avec une ou plusieurs mises à jour d'un opérateur.
- OLM parcourt toutes les versions de l'opérateur jusqu'à la dernière version que contient la source du catalogue.
Cependant, il arrive que cette opération ne soit pas sûre. Dans certains cas, une version publiée d'un opérateur ne doit jamais être installée sur un cluster si ce n'est pas déjà fait, par exemple parce qu'une version introduit une vulnérabilité grave.
Dans ce cas, OLM doit prendre en compte deux états de la grappe et fournir un graphique de mise à jour qui prenne en charge les deux états :
- L'opérateur intermédiaire "bad" a été vu par le cluster et installé.
- L'opérateur intermédiaire "bad" n'a pas encore été installé sur le cluster.
En envoyant un nouveau catalogue et en ajoutant une version skipped, OLM est assuré de toujours recevoir une mise à jour unique, quel que soit l'état du cluster et qu'il ait ou non déjà vu la mauvaise mise à jour.
Exemple de CSV avec la version sautée
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: name: etcdoperator.v0.9.2 namespace: placeholder annotations: spec: displayName: etcd description: Etcd Operator replaces: etcdoperator.v0.9.0 skips: - etcdoperator.v0.9.1
Prenons l'exemple suivant : Old CatalogSource et New CatalogSource.
Figure 2.6. Sauter des mises à jour
Ce graphique le confirme :
- Tout opérateur trouvé dans Old CatalogSource a un seul remplaçant dans New CatalogSource.
- Tout opérateur trouvé dans New CatalogSource a un seul remplaçant dans New CatalogSource.
- Si la mauvaise mise à jour n'a pas encore été installée, elle ne le sera jamais.
2.4.3.1.3. Remplacement de plusieurs opérateurs
La création de New CatalogSource comme décrit nécessite la publication de CSV qui replace
un Opérateur, mais peut skip
plusieurs. Ceci peut être réalisé en utilisant l'annotation skipRange
:
olm.skipRange : <semver_range>
où <semver_range>
a le format de la gamme de versions supporté par la bibliothèque semver.
Lors de la recherche de mises à jour dans les catalogues, si l'en-tête d'un canal comporte une annotation skipRange
et que l'opérateur actuellement installé possède un champ de version compris dans la plage, OLM effectue une mise à jour de la dernière entrée du canal.
L'ordre de priorité est le suivant :
-
Tête de chaîne dans la source spécifiée par
sourceName
sur l'abonnement, si les autres critères de saut sont remplis. -
L'opérateur suivant qui remplace l'opérateur actuel, dans la source spécifiée par
sourceName
. - Tête de chaîne dans une autre source visible pour l'abonnement, si les autres critères de saut sont remplis.
- L'opérateur suivant qui remplace l'opérateur actuel dans toute source visible par l'abonnement.
Exemple de CSV avec skipRange
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: name: elasticsearch-operator.v4.1.2 namespace: <namespace> annotations: olm.skipRange: '>=4.1.0 <4.1.2'
2.4.3.1.4. Prise en charge du flux Z
Une version z-stream, ou patch, doit remplacer toutes les versions précédentes de z-stream pour la même version mineure. OLM ne tient pas compte des versions majeures, mineures ou des correctifs, il lui suffit de construire le graphique correct dans un catalogue.
En d'autres termes, OLM doit être capable de prendre un graphique comme dans Old CatalogSource et, comme précédemment, de générer un graphique comme dans New CatalogSource:
Figure 2.7. Remplacement de plusieurs opérateurs
Ce graphique le confirme :
- Tout opérateur trouvé dans Old CatalogSource a un seul remplaçant dans New CatalogSource.
- Tout opérateur trouvé dans New CatalogSource a un seul remplaçant dans New CatalogSource.
- Toute version de z-stream dans Old CatalogSource sera mise à jour avec la dernière version de z-stream dans New CatalogSource.
- Les rejets non disponibles peuvent être considérés comme des nœuds de graphe "virtuels" ; leur contenu n'a pas besoin d'exister, le registre doit simplement répondre comme si le graphe ressemblait à ceci.
2.4.4. Résolution des dépendances de l'Operator Lifecycle Manager
Ce guide présente les cycles de vie de la résolution des dépendances et de la mise à niveau des définitions de ressources personnalisées (CRD) avec Operator Lifecycle Manager (OLM) dans OpenShift Container Platform.
2.4.4.1. À propos de la résolution des dépendances
Le gestionnaire du cycle de vie des opérateurs (OLM) gère la résolution des dépendances et le cycle de vie des mises à jour des opérateurs en cours d'exécution. À bien des égards, les problèmes rencontrés par OLM sont similaires à ceux d'autres gestionnaires de paquets de systèmes ou de langues, tels que yum
et rpm
.
Cependant, il existe une contrainte que les systèmes similaires n'ont généralement pas et qu'OLM respecte : comme les opérateurs sont toujours en cours d'exécution, OLM s'efforce de garantir que vous ne vous retrouvez jamais avec un ensemble d'opérateurs qui ne fonctionnent pas les uns avec les autres.
Par conséquent, OLM ne doit jamais créer les scénarios suivants :
- Installer un ensemble d'opérateurs nécessitant des API qui ne peuvent être fournies
- Mettre à jour un opérateur de manière à interrompre un autre opérateur qui en dépend
Cela est possible grâce à deux types de données :
Propriétés | Métadonnées typées sur l'opérateur qui constituent son interface publique dans le résolveur de dépendances. Les exemples incluent le groupe/version/genre (GVK) des API fournies par l'opérateur et la version sémantique (semver) de l'opérateur. |
Contraintes ou dépendances | Les exigences d'un opérateur qui doivent être satisfaites par d'autres opérateurs qui peuvent ou non avoir déjà été installés sur le cluster cible. Ces exigences agissent comme des requêtes ou des filtres sur tous les opérateurs disponibles et limitent la sélection lors de la résolution des dépendances et de l'installation. Il s'agit par exemple d'exiger qu'une API spécifique soit disponible sur le cluster ou d'attendre l'installation d'un opérateur particulier avec une version particulière. |
OLM convertit ces propriétés et ces contraintes en un système de formules booléennes et les transmet à un solveur SAT, un programme qui établit la satisfiabilité booléenne, qui se charge de déterminer quels opérateurs doivent être installés.
2.4.4.2. Propriétés de l'opérateur
Tous les opérateurs d'un catalogue ont les propriétés suivantes :
olm.package
- Inclut le nom du paquet et la version de l'opérateur
olm.gvk
- Une propriété unique pour chaque API fournie à partir de la version du service de cluster (CSV)
Des propriétés supplémentaires peuvent également être déclarées directement par l'auteur d'un opérateur en incluant un fichier properties.yaml
dans le répertoire metadata/
de l'ensemble Operator.
Exemple de propriété arbitraire
properties: - type: olm.kubeversion value: version: "1.16.0"
2.4.4.2.1. Propriétés arbitraires
Les auteurs d'opérateurs peuvent déclarer des propriétés arbitraires dans un fichier properties.yaml
dans le répertoire metadata/
du paquet Operator. Ces propriétés sont traduites en une structure de données cartographique qui sert d'entrée au résolveur du gestionnaire du cycle de vie de l'opérateur (OLM) au moment de l'exécution.
Ces propriétés sont opaques pour le résolveur car il ne les comprend pas, mais il peut évaluer les contraintes génériques par rapport à ces propriétés pour déterminer si les contraintes peuvent être satisfaites compte tenu de la liste des propriétés.
Exemple de propriétés arbitraires
properties: - property: type: color value: red - property: type: shape value: square - property: type: olm.gvk value: group: olm.coreos.io version: v1alpha1 kind: myresource
Cette structure peut être utilisée pour construire une expression CEL (Common Expression Language) pour les contraintes génériques.
Ressources supplémentaires
2.4.4.3. Dépendances des opérateurs
Les dépendances d'un Opérateur sont listées dans un fichier dependencies.yaml
dans le dossier metadata/
d'un bundle. Ce fichier est facultatif et n'est actuellement utilisé que pour spécifier les dépendances explicites de la version de l'opérateur.
La liste des dépendances contient un champ type
pour chaque élément afin de spécifier de quel type de dépendance il s'agit. Les types de dépendances de l'opérateur suivants sont pris en charge :
olm.package
-
Ce type indique une dépendance pour une version spécifique de l'opérateur. Les informations sur la dépendance doivent inclure le nom du paquet et la version du paquet au format semver. Par exemple, vous pouvez spécifier une version exacte telle que
0.5.2
ou une plage de versions telle que>0.5.1
. olm.gvk
- Avec ce type, l'auteur peut spécifier une dépendance avec des informations sur le groupe, la version et le type (GVK), de manière similaire à l'utilisation existante des CRD et des API dans un CSV. Il s'agit d'un chemin permettant aux auteurs d'opérateurs de consolider toutes les dépendances, API ou versions explicites, au même endroit.
olm.constraint
- Ce type déclare des contraintes génériques sur des propriétés arbitraires de l'opérateur.
Dans l'exemple suivant, des dépendances sont spécifiées pour un opérateur Prometheus et des CRD etcd :
Exemple de fichier dependencies.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
2.4.4.4. Contraintes génériques
Une propriété olm.constraint
déclare une contrainte de dépendance d'un type particulier, en distinguant les propriétés sans contrainte et les propriétés avec contrainte. Son champ value
est un objet contenant un champ failureMessage
qui contient une représentation sous forme de chaîne de caractères du message de la contrainte. Ce message est affiché sous la forme d'un commentaire informatif à l'intention des utilisateurs si la contrainte n'est pas satisfaisable au moment de l'exécution.
Les clés suivantes indiquent les types de contraintes disponibles :
gvk
-
Type dont la valeur et l'interprétation sont identiques au type
olm.gvk
package
-
Type dont la valeur et l'interprétation sont identiques au type
olm.package
cel
- Une expression en langage d'expression commun (CEL) évaluée au moment de l'exécution par le résolveur du gestionnaire du cycle de vie de l'opérateur (OLM) sur des propriétés arbitraires de l'ensemble et des informations sur les grappes
all
,any
,not
-
Contraintes de conjonction, de disjonction et de négation, respectivement, contenant une ou plusieurs contraintes concrètes, telles que
gvk
ou une contrainte composée imbriquée
2.4.4.4.1. Contraintes du langage d'expression commun (CEL)
Le type de contrainte cel
prend en charge le langage d'expression commun (CEL) en tant que langage d'expression. La structure cel
possède un champ rule
qui contient la chaîne d'expression CEL évaluée par rapport aux propriétés de l'opérateur au moment de l'exécution afin de déterminer si l'opérateur satisfait à la contrainte.
Exemple de contrainte cel
type: olm.constraint value: failureMessage: 'require to have "certified"' cel: rule: 'properties.exists(p, p.type == "certified")'
La syntaxe CEL prend en charge un large éventail d'opérateurs logiques, tels que AND
et OR
. Par conséquent, une expression CEL unique peut comporter plusieurs règles pour plusieurs conditions liées entre elles par ces opérateurs logiques. Ces règles sont évaluées par rapport à un ensemble de données de propriétés différentes provenant d'une liasse ou d'une source donnée, et la sortie est résolue en une liasse ou un opérateur unique qui satisfait à toutes ces règles dans le cadre d'une contrainte unique.
Exemple cel
Contrainte avec plusieurs règles
type: olm.constraint value: failureMessage: 'require to have "certified" and "stable" properties' cel: rule: 'properties.exists(p, p.type == "certified") && properties.exists(p, p.type == "stable")'
2.4.4.4.2. Contraintes composées (tout, n'importe quoi, pas)
Les types de contraintes composées sont évalués conformément à leurs définitions logiques.
Voici un exemple de contrainte conjonctive (all
) de deux paquets et d'un GVK. C'est-à-dire qu'ils doivent tous être satisfaits par les paquets installés :
Exemple de contrainte all
schema: olm.bundle name: red.v1.0.0 properties: - type: olm.constraint value: failureMessage: All are required for Red because... all: constraints: - failureMessage: Package blue is needed for... package: name: blue versionRange: '>=1.0.0' - failureMessage: GVK Green/v1 is needed for... gvk: group: greens.example.com version: v1 kind: Green
Voici un exemple de contrainte disjonctive (any
) de trois versions du même GVK. C'est-à-dire qu'au moins l'une d'entre elles doit être satisfaite par les liasses installées :
Exemple de contrainte any
schema: olm.bundle name: red.v1.0.0 properties: - type: olm.constraint value: failureMessage: Any are required for Red because... any: constraints: - gvk: group: blues.example.com version: v1beta1 kind: Blue - gvk: group: blues.example.com version: v1beta2 kind: Blue - gvk: group: blues.example.com version: v1 kind: Blue
Voici un exemple de contrainte de négation (not
) d'une version d'un GVK. En d'autres termes, ce kit ne peut être fourni par aucune liasse de l'ensemble des résultats :
Exemple de contrainte not
schema: olm.bundle name: red.v1.0.0 properties: - type: olm.constraint value: all: constraints: - failureMessage: Package blue is needed for... package: name: blue versionRange: '>=1.0.0' - failureMessage: Cannot be required for Red because... not: constraints: - gvk: group: greens.example.com version: v1alpha1 kind: greens
La sémantique de la négation peut sembler peu claire dans le contexte de la contrainte not
. Pour clarifier, la négation demande en fait au résolveur de supprimer de l'ensemble des résultats toute solution possible qui inclut un GVK particulier, un paquetage à une version, ou qui satisfait à une contrainte composée enfant.
En corollaire, la contrainte composée not
ne doit être utilisée qu'à l'intérieur des contraintes all
ou any
, car la négation sans sélection préalable d'un ensemble possible de dépendances n'a pas de sens.
2.4.4.4.3. Contraintes composées imbriquées
Une contrainte composée imbriquée, qui contient au moins une contrainte composée fille ainsi que zéro ou plusieurs contraintes simples, est évaluée de bas en haut en suivant les procédures applicables à chaque type de contrainte décrit précédemment.
Voici un exemple de disjonction de conjonctions, où l'une, l'autre ou les deux peuvent satisfaire à la contrainte :
Exemple de contrainte composée imbriquée
schema: olm.bundle name: red.v1.0.0 properties: - type: olm.constraint value: failureMessage: Required for Red because... any: constraints: - all: constraints: - package: name: blue versionRange: '>=1.0.0' - gvk: group: blues.example.com version: v1 kind: Blue - all: constraints: - package: name: blue versionRange: '<1.0.0' - gvk: group: blues.example.com version: v1beta1 kind: Blue
La taille brute maximale d'un type olm.constraint
est de 64 Ko afin de limiter les attaques par épuisement des ressources.
2.4.4.5. Préférences en matière de dépendance
Il peut y avoir plusieurs options qui répondent également à une dépendance d'un opérateur. Le résolveur de dépendances du gestionnaire du cycle de vie des opérateurs (OLM) détermine l'option qui répond le mieux aux exigences de l'opérateur demandé. En tant qu'auteur ou utilisateur d'un opérateur, il peut être important de comprendre comment ces choix sont faits afin que la résolution des dépendances soit claire.
2.4.4.5.1. Priorité au catalogue
Sur le cluster OpenShift Container Platform, OLM lit les sources du catalogue pour savoir quels opérateurs sont disponibles pour l'installation.
Exemple d'objet CatalogSource
apiVersion: "operators.coreos.com/v1alpha1"
kind: "CatalogSource"
metadata:
name: "my-operators"
namespace: "operators"
spec:
sourceType: grpc
grpcPodConfig:
securityContextConfig: <security_mode> 1
image: example.com/my/operator-index:v1
displayName: "My Operators"
priority: 100
- 1
- Spécifiez la valeur de
legacy
ourestricted
. Si le champ n'est pas défini, la valeur par défaut estlegacy
. Dans une prochaine version d'OpenShift Container Platform, il est prévu que la valeur par défaut soitrestricted
. Si votre catalogue ne peut pas s'exécuter avec les autorisationsrestricted
, il est recommandé de définir manuellement ce champ surlegacy
.
Un objet CatalogSource
possède un champ priority
, qui est utilisé par le résolveur pour savoir comment préférer les options pour une dépendance.
Deux règles régissent les préférences en matière de catalogues :
- Les options des catalogues de priorité supérieure sont préférées aux options des catalogues de priorité inférieure.
- Les options du même catalogue que la personne dépendante sont préférées à tout autre catalogue.
2.4.4.5.2. Commande de chaînes
Un paquet Operator dans un catalogue est une collection de canaux de mise à jour auxquels un utilisateur peut s'abonner dans un cluster OpenShift Container Platform. Les canaux peuvent être utilisés pour fournir un flux particulier de mises à jour pour une version mineure (1.2
, 1.3
) ou une fréquence de publication (stable
, fast
).
Il est probable qu'une dépendance soit satisfaite par des opérateurs dans le même paquet, mais dans des canaux différents. Par exemple, la version 1.2
d'un opérateur peut exister dans les canaux stable
et fast
.
Chaque paquet a un canal par défaut, qui est toujours préféré aux autres canaux. Si aucune option du canal par défaut ne peut satisfaire une dépendance, les options des canaux restants sont prises en compte dans l'ordre lexicographique du nom du canal.
2.4.4.5.3. Ordre à l'intérieur d'un canal
Il existe presque toujours plusieurs options pour satisfaire une dépendance au sein d'un même canal. Par exemple, les opérateurs d'un paquet et d'un canal fournissent le même ensemble d'API.
Lorsqu'un utilisateur crée un abonnement, il indique le canal dont il souhaite recevoir les mises à jour. Cela réduit immédiatement la recherche à ce seul canal. Mais à l'intérieur du canal, il est probable que de nombreux opérateurs répondent à une dépendance.
Au sein d'un canal, les nouveaux opérateurs situés plus haut dans le graphe de mise à jour sont privilégiés. Si la tête d'un canal satisfait une dépendance, elle sera essayée en premier.
2.4.4.5.4. Autres contraintes
En plus des contraintes fournies par les dépendances des paquets, OLM inclut des contraintes supplémentaires pour représenter l'état souhaité de l'utilisateur et appliquer les invariants de résolution.
2.4.4.5.4.1. Contrainte d'abonnement
Une contrainte d'abonnement filtre l'ensemble des opérateurs qui peuvent satisfaire un abonnement. Les abonnements sont des contraintes fournies par l'utilisateur au résolveur de dépendances. Elles déclarent l'intention d'installer un nouvel opérateur s'il n'est pas déjà présent sur le cluster, ou de maintenir à jour un opérateur existant.
2.4.4.5.4.2. Contrainte du paquet
Au sein d'un espace de noms, deux opérateurs ne peuvent pas provenir du même paquetage.
2.4.4.6. Améliorations du CRD
OLM met à niveau une définition de ressource personnalisée (CRD) immédiatement si elle appartient à une seule version de service de cluster (CSV). Si une CRD appartient à plusieurs CSV, elle est mise à niveau lorsqu'elle remplit toutes les conditions de compatibilité ascendante suivantes :
- Toutes les versions de service existantes dans le CRD actuel sont présentes dans le nouveau CRD.
- Toutes les instances existantes, ou les ressources personnalisées, qui sont associées aux versions de service du document de référence sont valides lorsqu'elles sont validées par rapport au schéma de validation du nouveau document de référence.
Ressources supplémentaires
2.4.4.7. Meilleures pratiques en matière de dépendance
Lorsque vous spécifiez des dépendances, vous devez tenir compte de certaines bonnes pratiques.
- Dépendent des API ou d'une gamme de versions spécifiques d'opérateurs
-
Les opérateurs peuvent ajouter ou supprimer des API à tout moment ; spécifiez toujours une dépendance
olm.gvk
pour toutes les API dont vos opérateurs ont besoin. L'exception à cette règle est si vous spécifiez des contraintesolm.package
à la place. - Fixer une version minimale
La documentation Kubernetes sur les modifications d'API décrit les modifications autorisées pour les opérateurs de type Kubernetes. Ces conventions de versionnement permettent à un opérateur de mettre à jour une API sans modifier la version de l'API, tant que l'API est rétrocompatible.
Pour les dépendances d'opérateurs, cela signifie que la connaissance de la version de l'API d'une dépendance peut ne pas suffire à garantir que l'opérateur dépendant fonctionne comme prévu.
Par exemple :
-
TestOperator v1.0.0 fournit la version API v1alpha1 de la ressource
MyObject
. -
TestOperator v1.0.1 ajoute un nouveau champ
spec.newfield
àMyObject
, mais il s'agit toujours de la version 1alpha1.
Votre opérateur peut avoir besoin de la possibilité d'écrire
spec.newfield
dans la ressourceMyObject
. Une contrainteolm.gvk
ne suffit pas à OLM pour déterminer que vous avez besoin de TestOperator v1.0.1 et non de TestOperator v1.0.0.Dans la mesure du possible, si un opérateur spécifique qui fournit une API est connu à l'avance, spécifier une contrainte supplémentaire
olm.package
pour fixer un minimum.-
TestOperator v1.0.0 fournit la version API v1alpha1 de la ressource
- Omettre une version maximale ou autoriser une gamme très large
Étant donné que les opérateurs fournissent des ressources à l'échelle du cluster, telles que des services API et des CRD, un opérateur qui spécifie une petite fenêtre pour une dépendance peut limiter inutilement les mises à jour pour d'autres consommateurs de cette dépendance.
Dans la mesure du possible, ne fixez pas de version maximale. Sinon, définissez une plage sémantique très large pour éviter les conflits avec d'autres opérateurs. Par exemple,
>1.0.0 <2.0.0
.Contrairement aux gestionnaires de paquets classiques, les auteurs d'opérateurs indiquent explicitement que les mises à jour sont sûres grâce aux canaux d'OLM. Si une mise à jour est disponible pour un abonnement existant, on suppose que l'auteur de l'opérateur indique qu'il peut mettre à jour la version précédente. La définition d'une version maximale pour une dépendance annule le flux de mises à jour de l'auteur en le tronquant inutilement à une limite supérieure particulière.
NoteLes administrateurs de cluster ne peuvent pas remplacer les dépendances définies par l'auteur d'un opérateur.
Toutefois, des versions maximales peuvent et doivent être fixées s'il existe des incompatibilités connues qui doivent être évitées. Des versions spécifiques peuvent être omises à l'aide de la syntaxe de l'intervalle de versions, par exemple
> 1.0.0 !1.2.1
.
Ressources supplémentaires
- Documentation Kubernetes : Modifier l'API
2.4.4.8. Mises en garde concernant la dépendance
Lorsque vous spécifiez des dépendances, vous devez tenir compte de certaines mises en garde.
- Pas de contraintes composées (AND)
Il n'existe actuellement aucune méthode pour spécifier une relation ET entre les contraintes. En d'autres termes, il n'existe aucun moyen de spécifier qu'un opérateur dépend d'un autre opérateur qui fournit une API donnée et possède la version
>1.1.0
.Cela signifie que lorsqu'on spécifie une dépendance telle que :
dependencies: - type: olm.package value: packageName: etcd version: ">3.1.0" - type: olm.gvk value: group: etcd.database.coreos.com kind: EtcdCluster version: v1beta2
Il serait possible pour OLM de satisfaire cette exigence avec deux opérateurs : l'un qui fournit EtcdCluster et l'autre qui a la version
>3.1.0
. Le fait que cela se produise ou qu'un opérateur satisfaisant les deux contraintes soit sélectionné dépend de l'ordre dans lequel les options potentielles sont visitées. Les préférences en matière de dépendance et les options d'ordre sont bien définies et peuvent faire l'objet d'un raisonnement, mais par prudence, les opérateurs doivent s'en tenir à l'un ou l'autre mécanisme.- Compatibilité entre les espaces de noms
- OLM effectue la résolution des dépendances au niveau de l'espace de noms. Il est possible de se retrouver dans une impasse de mise à jour si la mise à jour d'un opérateur dans un espace de noms pose un problème à un opérateur dans un autre espace de noms, et vice-versa.
2.4.4.9. Exemples de scénarios de résolution des dépendances
Dans les exemples suivants, provider est un opérateur qui "possède" un service de CRD ou d'API.
Exemple : Déclassement d'API dépendantes
A et B sont des API (CRD) :
- Le fournisseur de A dépend de B.
- Le fournisseur de B dispose d'un abonnement.
- Le fournisseur de B se met à jour pour fournir C mais supprime B.
Il en résulte que :
- B n'a plus de fournisseur.
- A ne fonctionne plus.
C'est un cas qu'OLM évite grâce à sa stratégie de mise à jour.
Exemple : Blocage de la version
A et B sont des API :
- Le fournisseur de A a besoin de B.
- Le fournisseur de B a besoin de A.
- Le fournisseur de A se met à jour (fournit A2, exige B2) et supprime A.
- Le fournisseur de B met à jour (fournit B2, exige A2) et supprime B.
Si OLM tente de mettre à jour A sans mettre simultanément à jour B, ou vice-versa, il ne peut pas passer à de nouvelles versions des opérateurs, même si un nouvel ensemble compatible peut être trouvé.
Il s'agit d'un autre cas où OLM empêche la mise en œuvre de sa stratégie de mise à niveau.
2.4.4.10. Colocalisation des opérateurs dans un espace de noms
Le gestionnaire du cycle de vie des opérateurs (OLM) traite les opérateurs gérés par OLM qui sont installés dans le même espace de noms, ce qui signifie que leurs ressources Subscription
sont hébergées dans le même espace de noms, comme des opérateurs liés. Même s'ils ne sont pas réellement liés, OLM prend en compte leurs états, tels que leur version et leur politique de mise à jour, lorsque l'un d'entre eux est mis à jour.
Ce comportement par défaut se manifeste de deux manières :
-
InstallPlan
les ressources des mises à jour en cours comprennent les ressourcesClusterServiceVersion
(CSV) de tous les autres opérateurs qui se trouvent dans le même espace de noms. - Tous les opérateurs d'un même espace de noms partagent la même politique de mise à jour. Par exemple, si un opérateur est réglé sur des mises à jour manuelles, les politiques de mise à jour de tous les autres opérateurs sont également réglées sur le mode manuel.
Ces scénarios peuvent entraîner les problèmes suivants :
- Il devient difficile de raisonner sur les plans d'installation pour les mises à jour d'opérateurs, parce qu'il y a beaucoup plus de ressources définies dans ces plans que le seul opérateur mis à jour.
- Il devient impossible de faire en sorte que certains opérateurs d'un espace de noms soient mis à jour automatiquement tandis que d'autres le sont manuellement, ce que souhaitent souvent les administrateurs de clusters.
Ces problèmes apparaissent généralement parce que, lors de l'installation d'opérateurs avec la console web d'OpenShift Container Platform, le comportement par défaut installe les opérateurs qui prennent en charge le mode d'installation All namespaces dans l'espace de noms global par défaut openshift-operators
.
En tant qu'administrateur de cluster, vous pouvez contourner manuellement ce comportement par défaut en utilisant le flux de travail suivant :
- Créer un espace de noms pour l'installation de l'opérateur.
- Créez un custom global Operator group, qui est un groupe d'opérateurs qui surveille tous les espaces de noms. En associant ce groupe d'opérateurs à l'espace de noms que vous venez de créer, vous faites de l'espace de noms d'installation un espace de noms global, ce qui rend les opérateurs qui y sont installés disponibles dans tous les espaces de noms.
- Installer l'opérateur souhaité dans l'espace de noms de l'installation.
Si l'opérateur a des dépendances, celles-ci sont automatiquement installées dans l'espace de noms pré-créé. Par conséquent, les opérateurs dépendants peuvent avoir la même politique de mise à jour et des plans d'installation partagés. Pour une procédure détaillée, voir "Installer des opérateurs globaux dans des espaces de noms personnalisés".
2.4.5. Groupes d'opérateurs
Ce guide décrit l'utilisation des groupes d'opérateurs avec Operator Lifecycle Manager (OLM) dans OpenShift Container Platform.
2.4.5.1. À propos des groupes d'opérateurs
Un site Operator group, défini par la ressource OperatorGroup
, fournit une configuration multitenant aux opérateurs installés dans OLM. Un groupe d'opérateurs sélectionne des espaces de noms cibles dans lesquels générer l'accès RBAC requis pour les opérateurs qui en font partie.
L'ensemble des espaces de noms cibles est fourni par une chaîne délimitée par des virgules, stockée dans l'annotation olm.targetNamespaces
d'une version de service de cluster (CSV). Cette annotation est appliquée aux instances CSV des opérateurs membres et est projetée dans leurs déploiements.
2.4.5.2. Appartenance à un groupe d'opérateurs
Un opérateur est considéré comme member d'un groupe d'opérateurs si les conditions suivantes sont remplies :
- Le CSV de l'opérateur existe dans le même espace de noms que le groupe d'opérateurs.
- Les modes d'installation figurant dans le CSV de l'opérateur prennent en charge l'ensemble des espaces de noms ciblés par le groupe d'opérateurs.
Un mode d'installation dans un CSV se compose d'un champ InstallModeType
et d'un champ booléen Supported
. La spécification d'un CSV peut contenir un ensemble de modes d'installation de quatre InstallModeTypes
distincts :
Type de mode d'installation | Description |
---|---|
| L'opérateur peut être membre d'un groupe d'opérateurs qui sélectionne son propre espace de noms. |
| L'opérateur peut être membre d'un groupe d'opérateurs qui sélectionne un espace de noms. |
| L'opérateur peut être membre d'un groupe d'opérateurs qui sélectionne plusieurs espaces de noms. |
|
L'opérateur peut être membre d'un groupe d'opérateurs qui sélectionne tous les espaces de noms (l'ensemble d'espaces de noms cible est la chaîne vide |
Si la spécification d'un CSV omet une entrée de InstallModeType
, ce type est considéré comme non pris en charge, sauf si la prise en charge peut être déduite d'une entrée existante qui le prend implicitement en charge.
2.4.5.3. Sélection de l'espace de noms cible
Vous pouvez nommer explicitement l'espace de noms cible d'un groupe d'opérateurs à l'aide du paramètre spec.targetNamespaces
:
apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: my-group namespace: my-namespace spec: targetNamespaces: - my-namespace
Vous pouvez également spécifier un espace de noms en utilisant un sélecteur d'étiquettes avec le paramètre spec.selector
:
apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: my-group namespace: my-namespace spec: selector: cool.io/prod: "true"
L'énumération de plusieurs espaces de noms via spec.targetNamespaces
ou l'utilisation d'un sélecteur d'étiquettes via spec.selector
n'est pas recommandée, car la prise en charge de plus d'un espace de noms cible dans un groupe d'opérateurs sera probablement supprimée dans une prochaine version.
Si spec.targetNamespaces
et spec.selector
sont tous deux définis, spec.selector
est ignoré. Vous pouvez également omettre spec.selector
et spec.targetNamespaces
pour spécifier un groupe d'opérateurs global, qui sélectionne tous les espaces de noms :
apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: my-group namespace: my-namespace
L'ensemble résolu des espaces de noms sélectionnés est indiqué dans le paramètre status.namespaces
d'un groupe d'opérateurs. Le paramètre status.namespace
d'un groupe d'opérateurs global contient la chaîne vide (""
), qui signale à un opérateur consommateur qu'il doit surveiller tous les espaces de noms.
2.4.5.4. Annotations CSV du groupe d'opérateurs
Les CSV membres d'un groupe d'opérateurs ont les annotations suivantes :
Annotation | Description |
---|---|
| Contient le nom du groupe d'opérateurs. |
| Contient l'espace de noms du groupe d'opérateurs. |
| Contient une chaîne de caractères délimitée par des virgules qui répertorie la sélection de l'espace de noms cible du groupe d'opérateurs. |
Toutes les annotations, à l'exception de olm.targetNamespaces
, sont incluses dans les CSV copiés. L'omission de l'annotation olm.targetNamespaces
sur les CSV copiés empêche la duplication des espaces de noms cibles entre les locataires.
2.4.5.5. Annotation des API fournies
Un group/version/kind (GVK) est un identifiant unique pour une API Kubernetes. Les informations sur les GVK fournis par un groupe d'opérateurs sont indiquées dans une annotation olm.providedAPIs
. La valeur de l'annotation est une chaîne composée de <kind>.<version>.<group>
délimitée par des virgules. Les GVK des CRD et des services API fournis par tous les CSV membres actifs d'un groupe d'opérateurs sont inclus.
Examinez l'exemple suivant d'un objet OperatorGroup
avec un seul membre actif CSV qui fournit la ressource PackageManifest
:
apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: annotations: olm.providedAPIs: PackageManifest.v1alpha1.packages.apps.redhat.com name: olm-operators namespace: local ... spec: selector: {} serviceAccount: metadata: creationTimestamp: null targetNamespaces: - local status: lastUpdated: 2019-02-19T16:18:28Z namespaces: - local
2.4.5.6. Contrôle d'accès basé sur les rôles
Lorsqu'un groupe d'opérateurs est créé, trois rôles de grappe sont générés. Chacun contient une règle d'agrégation unique avec un sélecteur de rôle de cluster défini pour correspondre à une étiquette, comme illustré ci-dessous :
Rôle de la grappe | Étiquette à faire correspondre |
---|---|
|
|
|
|
|
|
Les ressources RBAC suivantes sont générées lorsqu'un CSV devient un membre actif d'un groupe d'opérateurs, tant que le CSV surveille tous les espaces de noms avec le mode d'installation AllNamespaces
et n'est pas dans un état d'échec avec la raison InterOperatorGroupOwnerConflict
:
- Rôles de cluster pour chaque ressource API d'un CRD
- Rôles de cluster pour chaque ressource API d'un service API
- Rôles supplémentaires et liaisons de rôles
Rôle de la grappe | Paramètres |
---|---|
|
Verbes sur
Étiquettes d'agrégation :
|
|
Verbes sur
Étiquettes d'agrégation :
|
|
Verbes sur
Étiquettes d'agrégation :
|
|
Verbes sur
Étiquettes d'agrégation :
|
Rôle de la grappe | Paramètres |
---|---|
|
Verbes sur
Étiquettes d'agrégation :
|
|
Verbes sur
Étiquettes d'agrégation :
|
|
Verbes sur
Étiquettes d'agrégation :
|
Rôles supplémentaires et liaisons de rôles
-
Si le CSV définit exactement un espace de noms cible qui contient
*
, un rôle de cluster et une liaison de rôle de cluster correspondante sont générés pour chaque permission définie dans le champpermissions
du CSV. Toutes les ressources générées reçoivent les étiquettesolm.owner: <csv_name>
etolm.owner.namespace: <csv_namespace>
. -
Si le CSV not définit exactement un espace de noms cible qui contient
*
, tous les rôles et toutes les liaisons de rôles dans l'espace de noms Opérateur avec les étiquettesolm.owner: <csv_name>
etolm.owner.namespace: <csv_namespace>
sont copiés dans l'espace de noms cible.
2.4.5.7. Copie de fichiers CSV
OLM crée des copies de tous les CSV membres actifs d'un groupe d'opérateurs dans chacun des espaces de noms cibles de ce groupe d'opérateurs. L'objectif d'une copie de CSV est d'indiquer aux utilisateurs d'un espace de noms cible qu'un opérateur spécifique est configuré pour surveiller les ressources créées dans cet espace.
Les CSV copiés ont un motif de statut Copied
et sont mis à jour pour correspondre au statut de leur CSV source. L'annotation olm.targetNamespaces
est supprimée des CSV copiés avant qu'ils ne soient créés sur le cluster. L'omission de la sélection de l'espace de noms cible évite la duplication des espaces de noms cibles entre les locataires.
Les CSV copiés sont supprimés lorsque le CSV source n'existe plus ou que le groupe d'opérateurs auquel appartient le CSV source ne cible plus l'espace de noms du CSV copié.
Par défaut, le champ disableCopiedCSVs
est désactivé. Après avoir activé un champ disableCopiedCSVs
, OLM supprime les CSV copiés existants sur un cluster. Lorsqu'un champ disableCopiedCSVs
est désactivé, OLM ajoute à nouveau des CSV copiés.
Désactiver le champ
disableCopiedCSVs
:$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OLMConfig metadata: name: cluster spec: features: disableCopiedCSVs: false EOF
Activez le champ
disableCopiedCSVs
:$ cat << EOF | oc apply -f - apiVersion: operators.coreos.com/v1 kind: OLMConfig metadata: name: cluster spec: features: disableCopiedCSVs: true EOF
2.4.5.8. Groupes d'opérateurs statiques
Un groupe d'opérateurs est static si son champ spec.staticProvidedAPIs
est défini sur true
. Par conséquent, OLM ne modifie pas l'annotation olm.providedAPIs
d'un groupe d'opérateurs, ce qui signifie qu'elle peut être définie à l'avance. Cela est utile lorsqu'un utilisateur souhaite utiliser un groupe d'opérateurs pour empêcher la contention des ressources dans un ensemble d'espaces de noms, mais qu'il ne dispose pas de CSV membres actifs qui fournissent les API pour ces ressources.
Voici un exemple de groupe d'opérateurs qui protège les ressources Prometheus
dans tous les espaces de noms avec l'annotation something.cool.io/cluster-monitoring: "true"
:
apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: cluster-monitoring namespace: cluster-monitoring annotations: olm.providedAPIs: Alertmanager.v1.monitoring.coreos.com,Prometheus.v1.monitoring.coreos.com,PrometheusRule.v1.monitoring.coreos.com,ServiceMonitor.v1.monitoring.coreos.com spec: staticProvidedAPIs: true selector: matchLabels: something.cool.io/cluster-monitoring: "true"
2.4.5.9. Intersection des groupes d'opérateurs
Deux groupes d'opérateurs sont considérés comme ayant intersecting provided APIs si l'intersection de leurs ensembles d'espaces de noms cibles n'est pas un ensemble vide et si l'intersection de leurs ensembles d'API fournis, définis par les annotations olm.providedAPIs
, n'est pas un ensemble vide.
Un problème potentiel est que les groupes d'opérateurs dont les API fournies se recoupent peuvent être en concurrence pour les mêmes ressources dans l'ensemble des espaces de noms qui se recoupent.
Lors de la vérification des règles d'intersection, l'espace de noms d'un groupe d'opérateurs est toujours inclus dans les espaces de noms cibles sélectionnés.
Règles d'intersection
Chaque fois qu'un membre actif du CSV se synchronise, OLM interroge le cluster pour connaître l'ensemble des API fournies qui se croisent entre le groupe d'opérateurs du CSV et tous les autres. OLM vérifie ensuite si cet ensemble est vide :
Si
true
et les API fournies par le CSV sont un sous-ensemble de celles du groupe d'opérateurs :- Poursuivre la transition.
Si
true
et les API fournies par le CSV sont not un sous-ensemble de celles du groupe d'opérateurs :Si le groupe d'opérateurs est statique :
- Nettoyer les déploiements qui appartiennent au CSV.
-
Le CSV passe à l'état d'échec avec le motif d'état
CannotModifyStaticOperatorGroupProvidedAPIs
.
Si le groupe d'opérateurs est not statique :
-
Remplacer l'annotation
olm.providedAPIs
du groupe Operator par l'union de lui-même et des API fournies par le CSV.
-
Remplacer l'annotation
Si
false
et les API fournies par le CSV sont not un sous-ensemble de celles du groupe d'opérateurs :- Nettoyer les déploiements qui appartiennent au CSV.
-
Le CSV passe à l'état d'échec avec le motif d'état
InterOperatorGroupOwnerConflict
.
Si
false
et les API fournies par le CSV sont un sous-ensemble de celles du groupe d'opérateurs :Si le groupe d'opérateurs est statique :
- Nettoyer les déploiements qui appartiennent au CSV.
-
Le CSV passe à l'état d'échec avec le motif d'état
CannotModifyStaticOperatorGroupProvidedAPIs
.
Si le groupe d'opérateurs est not statique :
-
Remplacer l'annotation
olm.providedAPIs
du groupe Operator par la différence entre lui-même et les API fournies par le CSV.
-
Remplacer l'annotation
Les états de défaillance causés par les groupes d'opérateurs sont non terminaux.
Les actions suivantes sont effectuées à chaque fois qu'un groupe d'opérateurs se synchronise :
- L'ensemble des API fournies par les CSV des membres actifs est calculé à partir du cluster. Les CSV copiés sont ignorés.
-
L'ensemble de clusters est comparé à
olm.providedAPIs
, et siolm.providedAPIs
contient des API supplémentaires, ces API sont supprimées. - Tous les CSV qui fournissent les mêmes API dans tous les espaces de noms sont remis en file d'attente. Cela permet de notifier aux CSV en conflit dans des groupes qui se croisent que leur conflit a peut-être été résolu, soit par un redimensionnement, soit par la suppression du CSV en conflit.
2.4.5.10. Limites de la gestion d'un opérateur multilocataire
OpenShift Container Platform offre un support limité pour l'installation simultanée de différentes versions d'un opérateur sur le même cluster. Operator Lifecycle Manager (OLM) installe les opérateurs plusieurs fois dans différents espaces de noms. L'une des contraintes est que les versions de l'API de l'opérateur doivent être identiques.
Les opérateurs sont des extensions du plan de contrôle en raison de leur utilisation des objets CustomResourceDefinition
(CRD), qui sont des ressources globales dans Kubernetes. Les différentes versions majeures d'un opérateur ont souvent des CRD incompatibles. Cela les rend incompatibles à installer simultanément dans différents espaces de noms sur un cluster.
Tous les locataires, ou espaces de noms, partagent le même plan de contrôle d'un cluster. Par conséquent, les locataires d'un cluster multi-locataires partagent également des CRD globaux, ce qui limite les scénarios dans lesquels différentes instances du même opérateur peuvent être utilisées en parallèle sur le même cluster.
Les scénarios pris en charge sont les suivants :
- Opérateurs de différentes versions qui expédient exactement la même définition de CRD (dans le cas de CRD versionnés, exactement le même ensemble de versions)
- Les opérateurs de différentes versions qui n'expédient pas de CRD, mais dont le CRD est disponible dans un paquet séparé sur OperatorHub
Tous les autres scénarios ne sont pas pris en charge, car l'intégrité des données du cluster ne peut pas être garantie s'il y a plusieurs CRD concurrents ou se chevauchant, provenant de différentes versions de l'opérateur, à réconcilier sur le même cluster.
2.4.5.11. Dépannage des groupes d'opérateurs
L'adhésion
L'espace de noms d'un plan d'installation ne doit contenir qu'un seul groupe d'opérateurs. Lors de la génération d'une version de service de cluster (CSV) dans un espace de noms, un plan d'installation considère qu'un groupe d'opérateurs n'est pas valide dans les cas suivants :
- Aucun groupe d'opérateurs n'existe dans l'espace de noms du plan d'installation.
- Plusieurs groupes d'opérateurs existent dans l'espace de noms du plan d'installation.
- Un nom de compte de service incorrect ou inexistant est spécifié dans le groupe Opérateur.
Si un plan d'installation rencontre un groupe d'opérateurs non valide, le CSV n'est pas généré et la ressource
InstallPlan
continue à s'installer avec un message pertinent. Par exemple, le message suivant est fourni si plusieurs groupes d'opérateurs existent dans le même espace de noms :attenuated service account query failed - more than one operator group(s) are managing this namespace count=2
où
count=
indique le nombre de groupes d'opérateurs dans l'espace de noms.-
Si les modes d'installation d'une CSV ne prennent pas en charge la sélection de l'espace de noms cible du groupe d'opérateurs dans son espace de noms, la CSV passe à un état d'échec avec la raison
UnsupportedOperatorGroup
. Les CSV en état d'échec pour cette raison passent en attente après que la sélection de l'espace de noms cible du groupe d'opérateurs passe à une configuration prise en charge ou que les modes d'installation de la CSV soient modifiés pour prendre en charge la sélection de l'espace de noms cible.
2.4.6. Conditions de l'opérateur
Ce guide explique comment Operator Lifecycle Manager (OLM) utilise les conditions de l'opérateur.
2.4.6.1. À propos des conditions de l'opérateur
Dans le cadre de son rôle de gestion du cycle de vie d'un opérateur, Operator Lifecycle Manager (OLM) déduit l'état d'un opérateur à partir de l'état des ressources Kubernetes qui définissent l'opérateur. Bien que cette approche fournisse un certain niveau d'assurance qu'un opérateur est dans un état donné, il y a de nombreux cas où un opérateur peut avoir besoin de communiquer des informations à OLM qui ne pourraient pas être déduites autrement. Ces informations peuvent alors être utilisées par OLM pour mieux gérer le cycle de vie de l'opérateur.
OLM fournit une définition de ressource personnalisée (CRD) appelée OperatorCondition
qui permet aux opérateurs de communiquer des conditions à OLM. Il existe un ensemble de conditions prises en charge qui influencent la gestion de l'opérateur par OLM lorsqu'elles sont présentes dans le tableau Spec.Conditions
d'une ressource OperatorCondition
.
Par défaut, le tableau Spec.Conditions
n'est pas présent dans un objet OperatorCondition
jusqu'à ce qu'il soit ajouté par un utilisateur ou à la suite d'une logique d'opérateur personnalisée.
2.4.6.2. Conditions prises en charge
Le gestionnaire du cycle de vie de l'opérateur (OLM) prend en charge les conditions suivantes de l'opérateur.
2.4.6.2.1. État évolutif
La condition Upgradeable
Operator empêche le remplacement d'une version de service de cluster (CSV) existante par une version plus récente de la CSV. Cette condition est utile dans les cas suivants
- Un opérateur est sur le point de lancer un processus critique et ne doit pas être mis à niveau tant que le processus n'est pas terminé.
- Un opérateur effectue une migration de ressources personnalisées (CR) qui doit être achevée avant que l'opérateur ne soit prêt à être mis à niveau.
Exemple Upgradeable
Condition de l'opérateur
apiVersion: operators.coreos.com/v1 kind: OperatorCondition metadata: name: my-operator namespace: operators spec: conditions: - type: Upgradeable 1 status: "False" 2 reason: "migration" message: "The Operator is performing a migration." lastTransitionTime: "2020-08-24T23:15:55Z"
2.4.6.3. Ressources supplémentaires
2.4.7. Mesures du gestionnaire du cycle de vie de l'opérateur
2.4.7.1. Métriques exposées
Operator Lifecycle Manager (OLM) expose certaines ressources spécifiques à OLM pour une utilisation par la pile de surveillance de cluster OpenShift Container Platform basée sur Prometheus.
Nom | Description |
---|---|
| Nombre de sources du catalogue. |
|
État d'une source de catalogue. La valeur |
|
Lors du rapprochement d'une version de service de cluster (CSV), présente chaque fois qu'une version CSV est dans un état autre que |
| Nombre de CSV enregistrés avec succès. |
|
Lors du rapprochement d'un CSV, indique si une version du CSV est dans l'état |
| Compte monotone des mises à jour CSV. |
| Nombre de plans d'installation. |
| Compte monotone des avertissements générés par les ressources, telles que les ressources dépréciées, incluses dans un plan d'installation. |
| La durée d'une tentative de résolution de dépendance. |
| Nombre d'abonnements. |
|
Compte monotone des synchronisations d'abonnements. Inclut les étiquettes |
2.4.8. Gestion des webhooks dans Operator Lifecycle Manager
Les webhooks permettent aux auteurs de l'opérateur d'intercepter, de modifier et d'accepter ou de rejeter des ressources avant qu'elles ne soient enregistrées dans le magasin d'objets et traitées par le contrôleur de l'opérateur. Operator Lifecycle Manager (OLM) peut gérer le cycle de vie de ces webhooks lorsqu'ils sont livrés avec votre opérateur.
Voir Définition des versions de service de cluster (CSV) pour plus de détails sur la manière dont un développeur d'opérateur peut définir des webhooks pour son opérateur, ainsi que sur les considérations à prendre en compte lors de l'exécution sur OLM.
2.4.8.1. Ressources supplémentaires
- Types de plugins d'admission aux webhooks
Documentation sur Kubernetes :