5.5. Opérateurs basés sur le barreau


Les développeurs d’opérateurs peuvent profiter du support Helm dans le SDK de l’opérateur pour construire un exemple d’opérateur basé sur Helm pour Nginx et gérer son cycle de vie. Ce tutoriel passe par le processus suivant:

  • Créer un déploiement Nginx
  • Assurez-vous que la taille de déploiement est la même que celle spécifiée par la spécification de ressources personnalisées Nginx (CR)
  • Actualisez le statut Nginx CR en utilisant l’auteur de statut avec les noms des nginx pods
Important

La version prise en charge par Red Hat de l’outil Operator SDK CLI, y compris les outils d’échafaudage et de test connexes pour les projets Opérateur, est dépréciée et devrait être supprimée dans une future version de Red Hat OpenShift Service sur AWS. Le Red Hat fournira des corrections de bogues et une prise en charge de cette fonctionnalité pendant le cycle de vie de la version actuelle, mais cette fonctionnalité ne recevra plus d’améliorations et sera supprimée du futur service Red Hat OpenShift sur les versions AWS.

La version prise en charge par Red Hat du SDK de l’opérateur n’est pas recommandée pour la création de nouveaux projets d’opérateur. Les auteurs d’opérateurs avec des projets d’opérateur existants peuvent utiliser la version de l’outil Operator SDK CLI publié avec Red Hat OpenShift Service sur AWS 4 pour maintenir leurs projets et créer des versions d’opérateur ciblant de nouvelles versions de Red Hat OpenShift Service sur AWS.

Les images de base suivantes pour les projets d’opérateur ne sont pas dépréciées. Les fonctionnalités d’exécution et les API de configuration de ces images de base sont toujours prises en charge pour les corrections de bogues et pour l’adressage des CVE.

  • L’image de base pour les projets d’opérateurs basés sur Ansible
  • L’image de base pour les projets d’opérateur basé sur Helm

Afin d’obtenir de l’information sur la version non prise en charge et gérée par la communauté du SDK de l’opérateur, voir Operator SDK (Operator Framework).

Ce processus est réalisé à l’aide de deux pièces maîtresses du cadre opérateur:

Le SDK de l’opérateur
L’outil operator-sdk CLI et l’API de bibliothèque de contrôleurs
Gestionnaire du cycle de vie de l’opérateur (OLM)
Installation, mise à niveau et contrôle d’accès basé sur les rôles (RBAC) des opérateurs sur un cluster
Note

Ce tutoriel va plus en détail que commencer avec Operator SDK pour les opérateurs basés sur Helm dans la documentation OpenShift Container Platform.

5.5.1.1. Conditions préalables

  • L’opérateur SDK CLI installé
  • Installation d’OpenShift CLI (oc) 4+
  • Connexion à un service Red Hat OpenShift sur AWS cluster avec un compte doté d’autorisations d’administration dédiées
  • Afin de permettre au cluster de tirer l’image, le référentiel où vous poussez votre image doit être défini comme public, ou vous devez configurer une image pull secret

5.5.1.2. Créer un projet

Faites appel à l’opérateur SDK CLI pour créer un projet appelé nginx-operator.

Procédure

  1. Créer un répertoire pour le projet:

    $ mkdir -p $HOME/projects/nginx-operator
    Copy to Clipboard Toggle word wrap
  2. Changement dans le répertoire:

    $ cd $HOME/projects/nginx-operator
    Copy to Clipboard Toggle word wrap
  3. Exécutez la commande operator-sdk init avec le plugin de barre pour initialiser le projet:

    $ operator-sdk init \
        --plugins=helm \
        --domain=example.com \
        --group=demo \
        --version=v1 \
        --kind=Nginx
    Copy to Clipboard Toggle word wrap
    Note

    Le plugin de barre initialise par défaut un projet à l’aide d’un graphique Helm en plaque de chaudière. Il est possible d’utiliser des drapeaux supplémentaires, tels que le drapeau --helm-chart, pour initialiser un projet à l’aide d’un graphique Helm existant.

    La commande init crée le projet nginx-operator spécifiquement pour regarder une ressource avec la version API example.com/v1 et genre Nginx.

  4. Dans le cas des projets Helm, la commande init génère les règles RBAC dans le fichier config/rbac/role.yaml en fonction des ressources qui seraient déployées par le manifeste par défaut pour le graphique. Assurez-vous que les règles générées dans ce fichier répondent aux exigences d’autorisation de l’opérateur.
5.5.1.2.1. Graphiques Helm existants

Au lieu de créer votre projet avec un graphique Helm, vous pouvez utiliser un graphique existant, que ce soit à partir de votre système de fichiers local ou d’un référentiel de graphiques distants, en utilisant les drapeaux suivants:

  • --helm-chart
  • --helm-chart-repo
  • --helm-chart-version

Lorsque le drapeau --helm-chart est spécifié, les drapeaux --group, --version et --kind deviennent facultatifs. Dans le cas où unset est laissé, les valeurs par défaut suivantes sont utilisées:

Expand
DrapeauLa valeur

--domaine

à propos de My.domain

--groupe

graphiques

--version

à propos de v1

--le genre

Déduit du graphique spécifié

Lorsque l’indicateur --helm-chart spécifie une archive graphique locale, par exemple-chart-1.2.0.tgz, ou un répertoire, le graphique est validé et non emballé ou copié dans le projet. Dans le cas contraire, le SDK de l’opérateur tente de récupérer le graphique d’un référentiel distant.

Lorsqu’une URL de référentiel personnalisé n’est pas spécifiée par le drapeau --helm-chart-repo, les formats de référence de graphique suivants sont pris en charge:

Expand
FormatDescription

<repo_name>/<chart_name>

Cherchez le graphique Helm nommé <chart_name> à partir du référentiel du graphique helm nommé <repo_name>, comme spécifié dans le fichier $HELM_HOME/repositories/repositories.yaml. À l’aide de la commande helm repo add pour configurer ce fichier.

<URL>

Chercher l’archive du graphique Helm à l’URL spécifiée.

Lorsqu’une URL de référentiel personnalisé est spécifiée par --helm-chart-repo, le format de référence graphique suivant est pris en charge:

Expand
FormatDescription

<chart_name>

Cherchez le graphique Helm nommé <chart_name> dans le référentiel du graphique Helm spécifié par la valeur d’URL --helm-chart-repo.

Lorsque le drapeau --helm-chart-version n’est pas défini, le SDK de l’opérateur obtient la dernière version disponible du graphique Helm. Dans le cas contraire, il reprend la version spécifiée. L’option --helm-chart-version flag n’est pas utilisée lorsque le graphique spécifié avec le drapeau --helm-chart se réfère à une version spécifique, par exemple lorsqu’il s’agit d’un chemin local ou d’une URL.

Afin de plus de détails et d’exemples, exécutez:

$ operator-sdk init --plugins helm --help
Copy to Clipboard Toggle word wrap
5.5.1.2.2. Fichier PROJET

Il y a parmi les fichiers générés par la commande operator-sdk init un fichier Kubebuilder PROJECT. Les commandes ultérieures de l’opérateur-sdk, ainsi que la sortie d’aide, qui sont exécutées à partir de la racine du projet lisent ce fichier et sont conscientes que le type de projet est Helm. À titre d’exemple:

domain: example.com
layout:
- helm.sdk.operatorframework.io/v1
plugins:
  manifests.sdk.operatorframework.io/v2: {}
  scorecard.sdk.operatorframework.io/v2: {}
  sdk.x-openshift.io/v1: {}
projectName: nginx-operator
resources:
- api:
    crdVersion: v1
    namespaced: true
  domain: example.com
  group: demo
  kind: Nginx
  version: v1
version: "3"
Copy to Clipboard Toggle word wrap

5.5.1.3. Comprendre la logique de l’opérateur

Dans cet exemple, le projet nginx-operator exécute la logique de réconciliation suivante pour chaque ressource personnalisée Nginx (CR):

  • Créez un déploiement Nginx s’il n’existe pas.
  • Créez un service Nginx s’il n’existe pas.
  • Créez une entrée Nginx si elle est activée et n’existe pas.
  • Assurez-vous que le déploiement, le service et l’entrée optionnelle correspondent à la configuration souhaitée comme spécifié par le Nginx CR, par exemple le nombre de répliques, l’image et le type de service.

Le projet nginx-operator regarde par défaut les événements de ressource Nginx comme indiqué dans le fichier watch.yaml et exécute les versions Helm en utilisant le graphique spécifié:

# Use the 'create api' subcommand to add watches to this file.
- group: demo
  version: v1
  kind: Nginx
  chart: helm-charts/nginx
# +kubebuilder:scaffold:watch
Copy to Clipboard Toggle word wrap
5.5.1.3.1. Exemple de graphique Helm

Lorsqu’un projet Helm Operator est créé, le SDK de l’opérateur crée un graphique Helm contenant un ensemble de modèles pour une version simple de Nginx.

Dans cet exemple, des modèles sont disponibles pour le déploiement, le service et les ressources d’entrée, ainsi qu’un modèle NOTES.txt, que les développeurs de graphiques Helm utilisent pour transmettre des informations utiles sur une version.

Consultez la documentation du développeur Helm si vous n’êtes pas déjà familier avec les graphiques Helm.

Helm utilise un concept appelé valeurs pour fournir des personnalisations aux valeurs par défaut d’un graphique Helm, qui sont définis dans le fichier values.yaml.

Il est possible de remplacer ces valeurs par défaut en définissant les valeurs souhaitées dans la spécification de ressource personnalisée (CR). Comme exemple, vous pouvez utiliser le nombre de répliques.

Procédure

  1. Le fichier helm-charts/nginx/values.yaml a une valeur appelée replicaCount définie à 1 par défaut. Afin d’avoir deux instances Nginx dans votre déploiement, votre spécification CR doit contenir replicaCount : 2.

    Éditer le fichier config/samples/demo_v1_nginx.yaml pour définir replicaCount: 2:

    apiVersion: demo.example.com/v1
    kind: Nginx
    metadata:
      name: nginx-sample
    ...
    spec:
    ...
      replicaCount: 2
    Copy to Clipboard Toggle word wrap
  2. De même, le port de service par défaut est réglé sur 80. À l’aide de 8080, modifiez le fichier config/samples/demo_v1_nginx.yaml pour définir spec.port: 8080, qui ajoute le port de service de remplacement:

    apiVersion: demo.example.com/v1
    kind: Nginx
    metadata:
      name: nginx-sample
    spec:
      replicaCount: 2
      service:
        port: 8080
    Copy to Clipboard Toggle word wrap

L’opérateur Helm applique l’ensemble de la spécification comme s’il s’agissait du contenu d’un fichier de valeurs, tout comme la commande helm install -f/overrides.yaml.

5.5.1.4. Activer le support proxy

Les auteurs d’opérateurs peuvent développer des opérateurs qui prennent en charge les proxys réseau. Les administrateurs dotés du rôle d’administrateur dédié configurent la prise en charge du proxy pour les variables d’environnement qui sont gérées par Operator Lifecycle Manager (OLM). Afin de prendre en charge les clusters proxiés, votre opérateur doit inspecter l’environnement pour les variables proxy standard suivantes et transmettre les valeurs à Operands:

  • HTTP_PROXY
  • HTTPS_PROXY
  • AUCUN_PROXY
Note

Ce tutoriel utilise HTTP_PROXY comme exemple de variable d’environnement.

Conditions préalables

  • C’est un cluster doté d’un proxy de sortie à l’échelle du cluster activé.

Procédure

  1. Editez le fichier watch.yaml pour inclure des overrides en fonction d’une variable d’environnement en ajoutant le champ OverrideValues:

    ...
    - group: demo.example.com
      version: v1alpha1
      kind: Nginx
      chart: helm-charts/nginx
      overrideValues:
        proxy.http: $HTTP_PROXY
    ...
    Copy to Clipboard Toggle word wrap
  2. Ajoutez la valeur proxy.http dans le fichier helm-charts/nginx/values.yaml:

    ...
    proxy:
      http: ""
      https: ""
      no_proxy: ""
    Copy to Clipboard Toggle word wrap
  3. Afin de s’assurer que le modèle de graphique prend en charge l’utilisation des variables, modifiez le modèle de graphique dans le fichier helm-charts/nginx/templates/deployment.yaml pour contenir ce qui suit:

    containers:
      - name: {{ .Chart.Name }}
        securityContext:
          - toYaml {{ .Values.securityContext | nindent 12 }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        env:
          - name: http_proxy
            value: "{{ .Values.proxy.http }}"
    Copy to Clipboard Toggle word wrap
  4. Définissez la variable d’environnement sur le déploiement de l’opérateur en ajoutant ce qui suit au fichier config/manager/manager.yaml:

    containers:
     - args:
       - --leader-elect
       - --leader-election-id=ansible-proxy-demo
       image: controller:latest
       name: manager
       env:
         - name: "HTTP_PROXY"
           value: "http_proxy_test"
    Copy to Clipboard Toggle word wrap

5.5.1.5. Exécution de l’opérateur

Afin de construire et d’exécuter votre opérateur, utilisez l’opérateur SDK CLI pour regrouper votre opérateur, puis utilisez le gestionnaire de cycle de vie de l’opérateur (OLM) pour le déploiement sur le cluster.

Note

Lorsque vous souhaitez déployer votre opérateur sur un cluster OpenShift Container Platform au lieu d’un service Red Hat OpenShift sur AWS, deux options de déploiement supplémentaires sont disponibles:

  • Exécutez localement en dehors du cluster en tant que programme Go.
  • Exécutez comme un déploiement sur le cluster.
5.5.1.5.1.1. Groupement d’un opérateur

Le format de paquet Opérateur est la méthode d’emballage par défaut pour Operator SDK et Operator Lifecycle Manager (OLM). En utilisant le SDK de l’opérateur, vous pouvez préparer votre opérateur à une utilisation sur OLM pour construire et pousser votre projet Opérateur en tant qu’image groupée.

Conditions préalables

  • L’opérateur SDK CLI installé sur un poste de travail de développement
  • Installation d’OpenShift CLI (oc) v4+
  • Le projet d’opérateur initialisé à l’aide du SDK de l’opérateur

Procédure

  1. Exécutez les commandes suivantes dans votre répertoire de projet Opérateur pour construire et pousser l’image de votre opérateur. Modifiez l’argument IMG dans les étapes suivantes pour faire référence à un référentiel auquel vous avez accès. Il est possible d’obtenir un compte de stockage des conteneurs sur des sites de dépôt tels que Quay.io.

    1. Construire l’image:

      $ make docker-build IMG=<registry>/<user>/<operator_image_name>:<tag>
      Copy to Clipboard Toggle word wrap
      Note

      Le Dockerfile généré par le SDK pour l’opérateur renvoie explicitement GOARCH=amd64 pour la construction de go. Cela peut être modifié à GOARCH=$TARGETARCH pour les architectures non-AMD64. Docker définira automatiquement la variable d’environnement à la valeur spécifiée par -platform. Avec Buildah, le -build-arg devra être utilisé à cet effet. En savoir plus, consultez Multiple Architectures.

    2. Appuyez sur l’image vers un référentiel:

      $ make docker-push IMG=<registry>/<user>/<operator_image_name>:<tag>
      Copy to Clipboard Toggle word wrap
  2. Créez votre paquet Opérateur manifeste en exécutant la commande make bundle, qui invoque plusieurs commandes, y compris l’opérateur SDK génère des paquets et des sous-commandes validant:

    $ make bundle IMG=<registry>/<user>/<operator_image_name>:<tag>
    Copy to Clipboard Toggle word wrap

    Les manifestes de paquets pour un opérateur décrivent comment afficher, créer et gérer une application. La commande make bundle crée les fichiers et répertoires suivants dans votre projet Opérateur:

    • Le bundle manifeste un répertoire nommé bundle/manifests qui contient un objet ClusterServiceVersion
    • Annuaire de métadonnées groupé nommé bundle/metadata
    • L’ensemble des définitions de ressources personnalisées (CRD) dans un répertoire config/crd
    • Dockerfile bundle.Dockerfile

    Ces fichiers sont ensuite automatiquement validés en utilisant le bundle opérateur-sdk valide pour s’assurer que la représentation des faisceaux sur disque est correcte.

  3. Créez et poussez votre image de paquet en exécutant les commandes suivantes. L’OLM consomme des faisceaux d’opérateurs à l’aide d’une image d’index, qui référence à une ou plusieurs images groupées.

    1. Construisez l’image du bundle. Définissez BUNDLE_IMG avec les détails du registre, de l’espace de noms d’utilisateur et de la balise d’image où vous avez l’intention de pousser l’image:

      $ make bundle-build BUNDLE_IMG=<registry>/<user>/<bundle_image_name>:<tag>
      Copy to Clipboard Toggle word wrap
    2. Appuyez sur l’image du paquet:

      $ docker push <registry>/<user>/<bundle_image_name>:<tag>
      Copy to Clipboard Toggle word wrap

Le gestionnaire de cycle de vie de l’opérateur (OLM) vous aide à installer, mettre à jour et gérer le cycle de vie des Opérateurs et de leurs services associés sur un cluster Kubernetes. Le système OLM est installé par défaut sur Red Hat OpenShift Service sur AWS et s’exécute sous forme d’extension Kubernetes afin que vous puissiez utiliser la console Web et OpenShift CLI (oc) pour toutes les fonctions de gestion du cycle de vie de l’opérateur sans outils supplémentaires.

Le format de paquet opérateur est la méthode d’emballage par défaut pour l’opérateur SDK et OLM. Le SDK de l’opérateur permet d’exécuter rapidement une image groupée sur OLM afin de s’assurer qu’elle fonctionne correctement.

Conditions préalables

  • L’opérateur SDK CLI installé sur un poste de travail de développement
  • Ensemble d’image de l’opérateur construit et poussé à un registre
  • Installation OLM sur un cluster basé sur Kubernetes (v1.16.0 ou version ultérieure si vous utilisez apiextensions.k8s.io/v1 CRDs, par exemple Red Hat OpenShift Service sur AWS 4)
  • Connexion au cluster avec oc à l’aide d’un compte avec des autorisations d’administration dédiées

Procédure

  • Entrez la commande suivante pour exécuter l’opérateur sur le cluster:

    $ operator-sdk run bundle \
    1
    
        -n <namespace> \
    2
    
        <registry>/<user>/<bundle_image_name>:<tag> 
    3
    Copy to Clipboard Toggle word wrap
    1
    La commande run bundle crée un catalogue basé sur des fichiers valide et installe le paquet Opérateur sur votre cluster en utilisant OLM.
    2
    Facultatif: Par défaut, la commande installe l’opérateur dans le projet actuellement actif dans votre fichier ~/.kube/config. Il est possible d’ajouter le drapeau -n pour définir un espace de noms différent pour l’installation.
    3
    Dans le cas où vous ne spécifiez pas une image, la commande utilise quay.io/operator-framework/opm:latest comme image d’index par défaut. Lorsque vous spécifiez une image, la commande utilise l’image du faisceau lui-même comme image d’index.
    Important

    À partir de Red Hat OpenShift Service sur AWS 4.11, la commande run bundle prend en charge le format de catalogue basé sur des fichiers pour les catalogues d’opérateurs par défaut. Le format de base de données SQLite obsolète pour les catalogues d’opérateurs continue d’être pris en charge; cependant, il sera supprimé dans une version ultérieure. Il est recommandé aux auteurs de l’opérateur de migrer leurs flux de travail vers le format de catalogue basé sur les fichiers.

    Cette commande effectue les actions suivantes:

    • Créez une image d’index faisant référence à votre image de paquet. L’image de l’index est opaque et éphémère, mais reflète avec précision comment un paquet serait ajouté à un catalogue en production.
    • Créez une source de catalogue qui pointe vers votre nouvelle image d’index, ce qui permet à OperatorHub de découvrir votre opérateur.
    • Déployez votre opérateur dans votre cluster en créant un groupe d’opérateurs, un abonnement, un plan d’installation et toutes les autres ressources requises, y compris RBAC.

5.5.1.6. Créer une ressource personnalisée

Après l’installation de votre opérateur, vous pouvez le tester en créant une ressource personnalisée (CR) qui est maintenant fournie sur le cluster par l’opérateur.

Conditions préalables

  • Exemple Nginx Operator, qui fournit le Nginx CR, installé sur un cluster

Procédure

  1. Changer l’espace de noms où votre opérateur est installé. À titre d’exemple, si vous avez déployé l’opérateur à l’aide de la commande make deployment:

    $ oc project nginx-operator-system
    Copy to Clipboard Toggle word wrap
  2. Éditer l’échantillon Nginx CR manifeste à config/samples/demo_v1_nginx.yaml pour contenir les spécifications suivantes:

    apiVersion: demo.example.com/v1
    kind: Nginx
    metadata:
      name: nginx-sample
    ...
    spec:
    ...
      replicaCount: 3
    Copy to Clipboard Toggle word wrap
  3. Le compte de service Nginx nécessite un accès privilégié pour fonctionner dans Red Hat OpenShift Service sur AWS. Ajouter la contrainte de contexte de sécurité suivante (SCC) au compte de service pour l’échantillon nginx:

    $ oc adm policy add-scc-to-user \
        anyuid system:serviceaccount:nginx-operator-system:nginx-sample
    Copy to Clipboard Toggle word wrap
  4. Créer le CR:

    $ oc apply -f config/samples/demo_v1_nginx.yaml
    Copy to Clipboard Toggle word wrap
  5. Assurez-vous que l’opérateur Nginx crée le déploiement de l’échantillon CR avec la bonne taille:

    $ oc get deployments
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-operator-controller-manager       1/1     1            1           8m
    nginx-sample                            3/3     3            3           1m
    Copy to Clipboard Toggle word wrap

  6. Consultez le statut des pods et CR pour confirmer que le statut est mis à jour avec les noms de pod Nginx.

    1. Consultez les gousses:

      $ oc get pods
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      NAME                                  READY     STATUS    RESTARTS   AGE
      nginx-sample-6fd7c98d8-7dqdr          1/1       Running   0          1m
      nginx-sample-6fd7c98d8-g5k7v          1/1       Running   0          1m
      nginx-sample-6fd7c98d8-m7vn7          1/1       Running   0          1m
      Copy to Clipboard Toggle word wrap

    2. Consultez l’état CR:

      $ oc get nginx/nginx-sample -o yaml
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      apiVersion: demo.example.com/v1
      kind: Nginx
      metadata:
      ...
        name: nginx-sample
      ...
      spec:
        replicaCount: 3
      status:
        nodes:
        - nginx-sample-6fd7c98d8-7dqdr
        - nginx-sample-6fd7c98d8-g5k7v
        - nginx-sample-6fd7c98d8-m7vn7
      Copy to Clipboard Toggle word wrap

  7. Actualisez la taille du déploiement.

    1. Actualisez le fichier config/samples/demo_v1_nginx.yaml pour modifier le champ spec.size dans le CR Nginx de 3 à 5:

      $ oc patch nginx nginx-sample \
          -p '{"spec":{"replicaCount": 5}}' \
          --type=merge
      Copy to Clipboard Toggle word wrap
    2. Confirmez que l’opérateur modifie la taille du déploiement:

      $ oc get deployments
      Copy to Clipboard Toggle word wrap

      Exemple de sortie

      NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
      nginx-operator-controller-manager       1/1     1            1           10m
      nginx-sample                            5/5     5            5           3m
      Copy to Clipboard Toggle word wrap

  8. Supprimez le CR en exécutant la commande suivante:

    $ oc delete -f config/samples/demo_v1_nginx.yaml
    Copy to Clipboard Toggle word wrap
  9. Nettoyez les ressources qui ont été créées dans le cadre de ce tutoriel.

    • Lorsque vous avez utilisé la commande make deployment pour tester l’opérateur, exécutez la commande suivante:

      $ make undeploy
      Copy to Clipboard Toggle word wrap
    • Lorsque vous avez utilisé la commande operator-sdk run bundle pour tester l’opérateur, exécutez la commande suivante:

      $ operator-sdk cleanup <project_name>
      Copy to Clipboard Toggle word wrap

L’opérateur-sdk CLI peut générer, ou échafauder, un certain nombre de paquets et de fichiers pour chaque projet d’opérateur.

Important

La version prise en charge par Red Hat de l’outil Operator SDK CLI, y compris les outils d’échafaudage et de test connexes pour les projets Opérateur, est dépréciée et devrait être supprimée dans une future version de Red Hat OpenShift Service sur AWS. Le Red Hat fournira des corrections de bogues et une prise en charge de cette fonctionnalité pendant le cycle de vie de la version actuelle, mais cette fonctionnalité ne recevra plus d’améliorations et sera supprimée du futur service Red Hat OpenShift sur les versions AWS.

La version prise en charge par Red Hat du SDK de l’opérateur n’est pas recommandée pour la création de nouveaux projets d’opérateur. Les auteurs d’opérateurs avec des projets d’opérateur existants peuvent utiliser la version de l’outil Operator SDK CLI publié avec Red Hat OpenShift Service sur AWS 4 pour maintenir leurs projets et créer des versions d’opérateur ciblant de nouvelles versions de Red Hat OpenShift Service sur AWS.

Les images de base suivantes pour les projets d’opérateur ne sont pas dépréciées. Les fonctionnalités d’exécution et les API de configuration de ces images de base sont toujours prises en charge pour les corrections de bogues et pour l’adressage des CVE.

  • L’image de base pour les projets d’opérateurs basés sur Ansible
  • L’image de base pour les projets d’opérateur basé sur Helm

Afin d’obtenir de l’information sur la version non prise en charge et gérée par la communauté du SDK de l’opérateur, voir Operator SDK (Operator Framework).

5.5.2.1. Disposition de projet basée sur le helm

Les projets d’opérateur basés sur le helm générés à l’aide de la commande operator-sdk init --plugins helm contiennent les répertoires et fichiers suivants:

Expand
Fichier/dossiersBut

configuration/

Kustomize se manifeste pour le déploiement de l’opérateur sur un cluster Kubernetes.

fléchettes à barres/

Le diagramme de helm initialisé avec la commande operator-sdk crée api.

Dockerfile

Il est utilisé pour construire l’image de l’opérateur avec la commande docker-build.

les montres.yaml

Groupe/version/type (GVK) et localisation du graphique Helm.

À propos de Makefile

Cibles utilisées pour gérer le projet.

LE PROJET

Fichier YAML contenant des informations de métadonnées pour l’opérateur.

Le service OpenShift Red Hat sur AWS 4 prend en charge le SDK 1.38.0 de l’opérateur. Lorsque vous disposez déjà du 1.36.1 CLI installé sur votre poste de travail, vous pouvez mettre à jour le CLI à 1.38.0 en installant la dernière version.

Important

La version prise en charge par Red Hat de l’outil Operator SDK CLI, y compris les outils d’échafaudage et de test connexes pour les projets Opérateur, est dépréciée et devrait être supprimée dans une future version de Red Hat OpenShift Service sur AWS. Le Red Hat fournira des corrections de bogues et une prise en charge de cette fonctionnalité pendant le cycle de vie de la version actuelle, mais cette fonctionnalité ne recevra plus d’améliorations et sera supprimée du futur service Red Hat OpenShift sur les versions AWS.

La version prise en charge par Red Hat du SDK de l’opérateur n’est pas recommandée pour la création de nouveaux projets d’opérateur. Les auteurs d’opérateurs avec des projets d’opérateur existants peuvent utiliser la version de l’outil Operator SDK CLI publié avec Red Hat OpenShift Service sur AWS 4 pour maintenir leurs projets et créer des versions d’opérateur ciblant de nouvelles versions de Red Hat OpenShift Service sur AWS.

Les images de base suivantes pour les projets d’opérateur ne sont pas dépréciées. Les fonctionnalités d’exécution et les API de configuration de ces images de base sont toujours prises en charge pour les corrections de bogues et pour l’adressage des CVE.

  • L’image de base pour les projets d’opérateurs basés sur Ansible
  • L’image de base pour les projets d’opérateur basé sur Helm

Afin d’obtenir de l’information sur la version non prise en charge et gérée par la communauté du SDK de l’opérateur, voir Operator SDK (Operator Framework).

Cependant, pour s’assurer que vos projets d’opérateur existants maintiennent la compatibilité avec le SDK 1.38.0 de l’opérateur, des étapes de mise à jour sont nécessaires pour les modifications de rupture associées introduites depuis 1.36.1. Les étapes de mise à jour doivent être exécutées manuellement dans l’un de vos projets Opérateurs qui ont été précédemment créés ou maintenus avec 1.36.1.

La procédure suivante met à jour un projet existant d’opérateur basé sur Helm pour la compatibilité avec 1.38.0.

Conditions préalables

  • L’opérateur SDK 1.38.0 installé
  • Création ou maintenance d’un projet opérateur avec l’opérateur SDK 1.36.1

Procédure

  1. Éditez le Makefile de votre projet Opérateur pour mettre à jour la version SDK de l’opérateur vers 1.38.0, comme indiqué dans l’exemple suivant:

    Exemple de Makefile

    # Set the Operator SDK version to use. By default, what is installed on the system is used.
    # This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit.
    OPERATOR_SDK_VERSION ?= v1.38.0 
    1
    Copy to Clipboard Toggle word wrap

    1
    Changer la version de 1.36.1 à 1.38.0.
  2. Éditez le Makefile de votre projet Opérateur pour mettre à jour la balise image ose-helm-rhel9-operator à 4, comme indiqué dans l’exemple suivant:

    Exemple Dockerfile

    FROM registry.redhat.io/openshift4/ose-helm-rhel9-operator:v4
    Copy to Clipboard Toggle word wrap

  3. Il faut mettre à niveau les versions Kubernetes de votre projet Opérateur pour utiliser 1.30 et Kubebuilder v4.

    Astuce

    Cette mise à jour comprend des changements complexes d’échafaudage en raison de l’élimination du kube-rbac-proxy. Lorsque ces migrations deviennent difficiles à suivre, échafauder un nouveau projet d’échantillon à des fins de comparaison.

    1. Actualisez la version Kustomize dans votre Makefile en apportant les modifications suivantes:

      - curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v5.3.0/kustomize_v5.3.0_$(OS)_$(ARCH).tar.gz | \
      + curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v5.4.2/kustomize_v5.4.2_$(OS)_$(ARCH).tar.gz | \
      Copy to Clipboard Toggle word wrap
    2. Actualisez votre fichier config/default/kustomization.yaml avec les modifications suivantes:

        # [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'.
        #- ../prometheus
      + # [METRICS] Expose the controller manager metrics service.
      + - metrics_service.yaml
      
      + # Uncomment the patches line if you enable Metrics, and/or are using webhooks and cert-manager
        patches:
      - # Protect the /metrics endpoint by putting it behind auth.
      - # If you want your controller-manager to expose the /metrics
      - # endpoint w/o any authn/z, please comment the following line.
      - - path: manager_auth_proxy_patch.yaml
      + # [METRICS] The following patch will enable the metrics endpoint using HTTPS and the port :8443.
      + # More info: https://book.kubebuilder.io/reference/metrics
      + - path: manager_metrics_patch.yaml
      +   target:
      +     kind: Deployment
      Copy to Clipboard Toggle word wrap
    3. Enlevez les fichiers config/default/manager_auth_proxy_patch.yaml et config/default/manager_config_patch.yaml.
    4. Créez un fichier config/default/manager_metrics_patch.yaml avec le contenu suivant:

      # This patch adds the args to allow exposing the metrics endpoint using HTTPS
      - op: add
        path: /spec/template/spec/containers/0/args/0
        value: --metrics-bind-address=:8443
      # This patch adds the args to allow securing the metrics endpoint
      - op: add
        path: /spec/template/spec/containers/0/args/0
        value: --metrics-secure
      # This patch adds the args to allow RBAC-based authn/authz the metrics endpoint
      - op: add
        path: /spec/template/spec/containers/0/args/0
        value: --metrics-require-rbac
      Copy to Clipboard Toggle word wrap
    5. Créez un fichier config/default/metrics_service.yaml avec le contenu suivant:

      apiVersion: v1
      kind: Service
      metadata:
        labels:
          control-plane: controller-manager
          app.kubernetes.io/name: <operator-name>
          app.kubernetes.io/managed-by: kustomize
        name: controller-manager-metrics-service
        namespace: system
      spec:
        ports:
          - name: https
            port: 8443
            protocol: TCP
            targetPort: 8443
        selector:
          control-plane: controller-manager
      Copy to Clipboard Toggle word wrap
    6. Actualisez votre fichier config/manager/manager.yaml avec les modifications suivantes:

        - --leader-elect
      + - --health-probe-bind-address=:8081
      Copy to Clipboard Toggle word wrap
    7. Actualisez votre fichier config/prometheus/monitor.yaml avec les modifications suivantes:

           - path: /metrics
      -      port: https
      +      port: https # Ensure this is the name of the port that exposes HTTPS metrics
             tlsConfig:
      +        # TODO(user): The option insecureSkipVerify: true is not recommended for production since it disables
      +        # certificate verification. This poses a significant security risk by making the system vulnerable to
      +        # man-in-the-middle attacks, where an attacker could intercept and manipulate the communication between
      +        # Prometheus and the monitored services. This could lead to unauthorized access to sensitive metrics data,
      +        # compromising the integrity and confidentiality of the information.
      +        # Please use the following options for secure configurations:
      +        # caFile: /etc/metrics-certs/ca.crt
      +        # certFile: /etc/metrics-certs/tls.crt
      +        # keyFile: /etc/metrics-certs/tls.key
               insecureSkipVerify: true
      Copy to Clipboard Toggle word wrap
    8. Supprimez les fichiers suivants du répertoire config/rbac/:

      • auth_proxy_client_clusterrole.yaml
      • auth_proxy_role.yaml
      • auth_proxy_role_binding.yaml
      • auth_proxy_service.yaml
    9. Actualisez votre fichier config/rbac/kustomization.yaml avec les modifications suivantes:

        - leader_election_role_binding.yaml
      - # Comment the following 4 lines if you want to disable
      - # the auth proxy (https://github.com/brancz/kube-rbac-proxy)
      - # which protects your /metrics endpoint.
      - - auth_proxy_service.yaml
      - - auth_proxy_role.yaml
      - - auth_proxy_role_binding.yaml
      - - auth_proxy_client_clusterrole.yaml
      + # The following RBAC configurations are used to protect
      + # the metrics endpoint with authn/authz. These configurations
      + # ensure that only authorized users and service accounts
      + # can access the metrics endpoint. Comment the following
      + # permissions if you want to disable this protection.
      + # More info: https://book.kubebuilder.io/reference/metrics.html
      + - metrics_auth_role.yaml
      + - metrics_auth_role_binding.yaml
      + - metrics_reader_role.yaml
      Copy to Clipboard Toggle word wrap
    10. Créez un fichier config/rbac/metrics_auth_role_binding.yaml avec le contenu suivant:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: metrics-auth-rolebinding
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: metrics-auth-role
      subjects:
        - kind: ServiceAccount
          name: controller-manager
          namespace: system
      Copy to Clipboard Toggle word wrap
    11. Créez un fichier config/rbac/metrics_reader_role.yaml avec le contenu suivant:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: metrics-reader
      rules:
      - nonResourceURLs:
        - "/metrics"
        verbs:
        - get
      Copy to Clipboard Toggle word wrap

5.5.4. Appui à la barre dans le SDK de l’opérateur

Important

La version prise en charge par Red Hat de l’outil Operator SDK CLI, y compris les outils d’échafaudage et de test connexes pour les projets Opérateur, est dépréciée et devrait être supprimée dans une future version de Red Hat OpenShift Service sur AWS. Le Red Hat fournira des corrections de bogues et une prise en charge de cette fonctionnalité pendant le cycle de vie de la version actuelle, mais cette fonctionnalité ne recevra plus d’améliorations et sera supprimée du futur service Red Hat OpenShift sur les versions AWS.

La version prise en charge par Red Hat du SDK de l’opérateur n’est pas recommandée pour la création de nouveaux projets d’opérateur. Les auteurs d’opérateurs avec des projets d’opérateur existants peuvent utiliser la version de l’outil Operator SDK CLI publié avec Red Hat OpenShift Service sur AWS 4 pour maintenir leurs projets et créer des versions d’opérateur ciblant de nouvelles versions de Red Hat OpenShift Service sur AWS.

Les images de base suivantes pour les projets d’opérateur ne sont pas dépréciées. Les fonctionnalités d’exécution et les API de configuration de ces images de base sont toujours prises en charge pour les corrections de bogues et pour l’adressage des CVE.

  • L’image de base pour les projets d’opérateurs basés sur Ansible
  • L’image de base pour les projets d’opérateur basé sur Helm

Afin d’obtenir de l’information sur la version non prise en charge et gérée par la communauté du SDK de l’opérateur, voir Operator SDK (Operator Framework).

5.5.4.1. Cartes de barre

L’une des options SDK de l’opérateur pour générer un projet d’opérateur comprend l’exploitation d’un graphique Helm existant pour déployer les ressources Kubernetes en tant qu’application unifiée, sans avoir à écrire de code Go. Ces opérateurs basés sur Helm sont conçus pour exceller dans des applications apatrides qui nécessitent très peu de logique lorsqu’elles sont déployées, car les modifications doivent être appliquées aux objets Kubernetes générés dans le cadre du graphique. Cela peut sembler limitatif, mais peut être suffisant pour une quantité surprenante de cas d’utilisation comme le montre la prolifération des graphiques Helm construits par la communauté Kubernetes.

La fonction principale d’un opérateur est de lire à partir d’un objet personnalisé qui représente votre instance d’application et dont l’état souhaité correspond à ce qui est en cours d’exécution. Dans le cas d’un opérateur basé sur Helm, le champ spec de l’objet est une liste d’options de configuration qui sont généralement décrites dans le fichier Helm values.yaml. Au lieu de définir ces valeurs avec des drapeaux à l’aide du Helm CLI (par exemple, l’installation helm -f valeurs.yaml), vous pouvez les exprimer dans une ressource personnalisée (CR), qui, en tant qu’objet Kubernetes natif, permet les avantages de RBAC appliqué à elle et une piste d’audit.

Exemple d’un simple CR appelé Tomcat:

apiVersion: apache.org/v1alpha1
kind: Tomcat
metadata:
  name: example-app
spec:
  replicaCount: 2
Copy to Clipboard Toggle word wrap

La valeur replicaCount, 2 dans ce cas, est propagée dans le modèle du graphique où les éléments suivants sont utilisés:

{{ .Values.replicaCount }}
Copy to Clipboard Toggle word wrap

Après la construction et le déploiement d’un opérateur, vous pouvez déployer une nouvelle instance d’une application en créant une nouvelle instance d’un CR, ou répertorier les différentes instances s’exécutant dans tous les environnements en utilisant la commande oc:

$ oc get Tomcats --all-namespaces
Copy to Clipboard Toggle word wrap

Il n’y a pas besoin d’utiliser le Helm CLI ou d’installer Tiller; Les opérateurs basés sur Helm importent le code du projet Helm. Il vous suffit d’avoir une instance de l’opérateur qui exécute et enregistre le CR avec une définition de ressource personnalisée (CRD). Comme il obéit à RBAC, vous pouvez plus facilement prévenir les changements de production.

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