Rechercher

2.8. CRDs

download PDF

2.8.1. Extension de l'API Kubernetes avec des définitions de ressources personnalisées

Les opérateurs utilisent le mécanisme d'extension de Kubernetes, les définitions de ressources personnalisées (CRD), afin que les objets personnalisés gérés par l'opérateur aient la même apparence et le même comportement que les objets Kubernetes intégrés et natifs. Ce guide décrit comment les administrateurs de cluster peuvent étendre leur cluster OpenShift Container Platform en créant et en gérant des CRD.

2.8.1.1. Définitions de ressources personnalisées

Dans l'API Kubernetes, un resource est un point d'extrémité qui stocke une collection d'objets API d'un certain type. Par exemple, la ressource intégrée Pods contient une collection d'objets Pod.

Un objet custom resource definition (CRD) définit un nouveau type d'objet unique, appelé kind, dans le cluster et laisse le serveur API Kubernetes gérer l'ensemble de son cycle de vie.

Custom resource (CR) sont créés à partir des CRD qui ont été ajoutés au cluster par un administrateur du cluster, ce qui permet à tous les utilisateurs du cluster d'ajouter le nouveau type de ressource dans les projets.

Lorsqu'un administrateur de cluster ajoute un nouveau CRD au cluster, le serveur API Kubernetes réagit en créant un nouveau chemin de ressources RESTful accessible à l'ensemble du cluster ou à un seul projet (espace de noms) et commence à servir le CR spécifié.

Les administrateurs de clusters qui souhaitent accorder l'accès au CRD à d'autres utilisateurs peuvent utiliser l'agrégation des rôles de clusters pour accorder l'accès aux utilisateurs ayant les rôles de clusters par défaut admin, edit, ou view. L'agrégation de rôles permet d'insérer des règles personnalisées dans ces rôles. Ce comportement intègre la nouvelle ressource dans la politique RBAC du cluster comme s'il s'agissait d'une ressource intégrée.

Les opérateurs, en particulier, utilisent les CRD en les intégrant à toute politique RBAC requise et à toute autre logique propre au logiciel. Les administrateurs de cluster peuvent également ajouter manuellement des CRD au cluster en dehors du cycle de vie d'un opérateur, les mettant ainsi à la disposition de tous les utilisateurs.

Note

Alors que seuls les administrateurs de clusters peuvent créer des CRD, les développeurs peuvent créer un CR à partir d'un CRD existant s'ils ont les droits de lecture et d'écriture sur celui-ci.

2.8.1.2. Création d'une définition de ressource personnalisée

Pour créer des objets de ressources personnalisées (CR), les administrateurs de clusters doivent d'abord créer une définition de ressources personnalisées (CRD).

Conditions préalables

  • Accès à un cluster OpenShift Container Platform avec des privilèges d'utilisateur cluster-admin.

Procédure

Pour créer un CRD :

  1. Créez un fichier YAML contenant les types de champs suivants :

    Exemple de fichier YAML pour un CRD

    apiVersion: apiextensions.k8s.io/v1 1
    kind: CustomResourceDefinition
    metadata:
      name: crontabs.stable.example.com 2
    spec:
      group: stable.example.com 3
      versions:
        name: v1 4
      scope: Namespaced 5
      names:
        plural: crontabs 6
        singular: crontab 7
        kind: CronTab 8
        shortNames:
        - ct 9

    1
    Utilisez l'API apiextensions.k8s.io/v1.
    2
    Indiquez un nom pour la définition. Ce nom doit être au format <plural-name>.<group> en utilisant les valeurs des champs group et plural.
    3
    Spécifiez un nom de groupe pour l'API. Un groupe API est une collection d'objets logiquement liés. Par exemple, tous les objets de lot tels que Job ou ScheduledJob pourraient se trouver dans le groupe API de lot (tel que batch.api.example.com). Une bonne pratique consiste à utiliser le nom de domaine entièrement qualifié (FQDN) de votre organisation.
    4
    Spécifiez un nom de version à utiliser dans l'URL. Chaque groupe d'API peut exister dans plusieurs versions, par exemple v1alpha, v1beta, v1.
    5
    Indiquez si les objets personnalisés sont disponibles pour un projet (Namespaced) ou pour tous les projets du cluster (Cluster).
    6
    Spécifiez le nom pluriel à utiliser dans l'URL. Le champ plural est identique à celui d'une ressource dans une URL d'API.
    7
    Spécifiez un nom singulier à utiliser comme alias dans le CLI et pour l'affichage.
    8
    Spécifie le type d'objets qui peuvent être créés. Le type peut être en CamelCase.
    9
    Spécifiez une chaîne plus courte pour faire correspondre votre ressource à la CLI.
    Note

    Par défaut, un CRD est géré en grappe et accessible à tous les projets.

  2. Créer l'objet CRD :

    oc create -f <nom_du_fichier>.yaml

    Un nouveau point d'accès à l'API RESTful est créé à l'adresse :

    /apis/<spec:group>/<spec:version>/<scope>/*/<names-plural>/...

    Par exemple, en utilisant le fichier d'exemple, le point final suivant est créé :

    /apis/stable.example.com/v1/namespaces/*/crontabs/...

    Vous pouvez maintenant utiliser cette URL pour créer et gérer des CR. Le type d'objet est basé sur le champ spec.kind de l'objet CRD que vous avez créé.

2.8.1.3. Création de rôles de cluster pour les définitions de ressources personnalisées

Les administrateurs de clusters peuvent accorder des autorisations à des définitions de ressources personnalisées (CRD) existantes et adaptées aux clusters. Si vous utilisez les rôles de cluster par défaut admin, edit, et view, vous pouvez tirer parti de l'agrégation des rôles de cluster pour leurs règles.

Important

Vous devez attribuer explicitement des autorisations à chacun de ces rôles. Les rôles disposant de plus d'autorisations n'héritent pas des règles des rôles disposant de moins d'autorisations. Si vous attribuez une règle à un rôle, vous devez également attribuer ce verbe aux rôles disposant de plus d'autorisations. Par exemple, si vous accordez l'autorisation get crontabs au rôle view, vous devez également l'accorder aux rôles edit et admin. Le rôle admin ou edit est généralement attribué à l'utilisateur qui a créé un projet à l'aide du modèle de projet.

Conditions préalables

  • Créer un CRD.

Procédure

  1. Créer un fichier de définition des rôles de cluster pour le CRD. La définition du rôle de cluster est un fichier YAML qui contient les règles qui s'appliquent à chaque rôle de cluster. Un contrôleur OpenShift Container Platform ajoute les règles que vous spécifiez aux rôles de cluster par défaut.

    Exemple de fichier YAML pour la définition d'un rôle de cluster

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1 1
    metadata:
      name: aggregate-cron-tabs-admin-edit 2
      labels:
        rbac.authorization.k8s.io/aggregate-to-admin: "true" 3
        rbac.authorization.k8s.io/aggregate-to-edit: "true" 4
    rules:
    - apiGroups: ["stable.example.com"] 5
      resources: ["crontabs"] 6
      verbs: ["get", "list", "watch", "create", "update", "patch", "delete", "deletecollection"] 7
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: aggregate-cron-tabs-view 8
      labels:
        # Add these permissions to the "view" default role.
        rbac.authorization.k8s.io/aggregate-to-view: "true" 9
        rbac.authorization.k8s.io/aggregate-to-cluster-reader: "true" 10
    rules:
    - apiGroups: ["stable.example.com"] 11
      resources: ["crontabs"] 12
      verbs: ["get", "list", "watch"] 13

    1
    Utilisez l'API rbac.authorization.k8s.io/v1.
    2 8
    Spécifiez un nom pour la définition.
    3
    Spécifiez cette étiquette pour accorder des autorisations au rôle par défaut d'administrateur.
    4
    Spécifiez cette étiquette pour accorder des autorisations au rôle d'édition par défaut.
    5 11
    Indiquez le nom du groupe du CRD.
    6 12
    Indiquez le nom pluriel du CRD auquel ces règles s'appliquent.
    7 13
    Spécifiez les verbes qui représentent les autorisations accordées au rôle. Par exemple, appliquer les autorisations de lecture et d'écriture aux rôles admin et edit et uniquement l'autorisation de lecture au rôle view.
    9
    Spécifiez cette étiquette pour accorder des autorisations au rôle par défaut view.
    10
    Spécifiez cette étiquette pour accorder des autorisations au rôle par défaut cluster-reader.
  2. Créer le rôle de cluster :

    oc create -f <nom_du_fichier>.yaml

2.8.1.4. Création de ressources personnalisées à partir d'un fichier

Une fois qu'une définition de ressource personnalisée (CRD) a été ajoutée au cluster, des ressources personnalisées (CR) peuvent être créées à l'aide de l'interface CLI à partir d'un fichier utilisant la spécification CR.

Conditions préalables

  • CRD ajouté au cluster par un administrateur de cluster.

Procédure

  1. Créez un fichier YAML pour le CR. Dans l'exemple de définition suivant, les champs personnalisés cronSpec et image sont définis dans un CR de Kind: CronTab. Le Kind provient du champ spec.kind de l'objet CRD :

    Exemple de fichier YAML pour un CR

    apiVersion: "stable.example.com/v1" 1
    kind: CronTab 2
    metadata:
      name: my-new-cron-object 3
      finalizers: 4
      - finalizer.stable.example.com
    spec: 5
      cronSpec: "* * * * /5"
      image: my-awesome-cron-image

    1
    Spécifiez le nom du groupe et la version de l'API (nom/version) à partir du CRD.
    2
    Spécifier le type dans le CRD.
    3
    Spécifiez un nom pour l'objet.
    4
    Spécifier les finaliseurs de l'objet, s'il y en a. Les finaliseurs permettent aux contrôleurs de mettre en œuvre des conditions qui doivent être remplies avant que l'objet puisse être supprimé.
    5
    Spécifier les conditions spécifiques au type d'objet.
  2. Après avoir créé le fichier, créez l'objet :

    oc create -f <nom_du_fichier>.yaml

2.8.1.5. Inspection des ressources personnalisées

Vous pouvez inspecter les objets de ressources personnalisées (CR) qui existent dans votre cluster à l'aide de la CLI.

Conditions préalables

  • Un objet CR existe dans un espace de noms auquel vous avez accès.

Procédure

  1. Pour obtenir des informations sur un type spécifique de CR, exécutez :

    oc get <kind> $ oc get <kind>

    Par exemple :

    $ oc get crontab

    Exemple de sortie

    NAME                 KIND
    my-new-cron-object   CronTab.v1.stable.example.com

    Les noms de ressources ne sont pas sensibles à la casse et vous pouvez utiliser les formes singulières ou plurielles définies dans le CRD, ainsi que n'importe quel nom court. Par exemple :

    $ oc get crontabs
    $ oc get crontab
    $ oc get ct
  2. Vous pouvez également consulter les données YAML brutes d'un CR :

    oc get <kind> -o yaml

    Par exemple :

    $ oc get ct -o yaml

    Exemple de sortie

    apiVersion: v1
    items:
    - apiVersion: stable.example.com/v1
      kind: CronTab
      metadata:
        clusterName: ""
        creationTimestamp: 2017-05-31T12:56:35Z
        deletionGracePeriodSeconds: null
        deletionTimestamp: null
        name: my-new-cron-object
        namespace: default
        resourceVersion: "285"
        selfLink: /apis/stable.example.com/v1/namespaces/default/crontabs/my-new-cron-object
        uid: 9423255b-4600-11e7-af6a-28d2447dc82b
      spec:
        cronSpec: '* * * * /5' 1
        image: my-awesome-cron-image 2

    1 2
    Les données personnalisées du fichier YAML que vous avez utilisé pour créer l'objet s'affichent.

2.8.2. Gestion des ressources à partir de définitions de ressources personnalisées

Ce guide décrit comment les développeurs peuvent gérer les ressources personnalisées (CR) issues des définitions de ressources personnalisées (CRD).

2.8.2.1. Définitions de ressources personnalisées

Dans l'API Kubernetes, un resource est un point d'extrémité qui stocke une collection d'objets API d'un certain type. Par exemple, la ressource intégrée Pods contient une collection d'objets Pod.

Un objet custom resource definition (CRD) définit un nouveau type d'objet unique, appelé kind, dans le cluster et laisse le serveur API Kubernetes gérer l'ensemble de son cycle de vie.

Custom resource (CR) sont créés à partir des CRD qui ont été ajoutés au cluster par un administrateur du cluster, ce qui permet à tous les utilisateurs du cluster d'ajouter le nouveau type de ressource dans les projets.

Les opérateurs, en particulier, utilisent les CRD en les intégrant à toute politique RBAC requise et à toute autre logique propre au logiciel. Les administrateurs de cluster peuvent également ajouter manuellement des CRD au cluster en dehors du cycle de vie d'un opérateur, les mettant ainsi à la disposition de tous les utilisateurs.

Note

Alors que seuls les administrateurs de clusters peuvent créer des CRD, les développeurs peuvent créer un CR à partir d'un CRD existant s'ils ont les droits de lecture et d'écriture sur celui-ci.

2.8.2.2. Création de ressources personnalisées à partir d'un fichier

Une fois qu'une définition de ressource personnalisée (CRD) a été ajoutée au cluster, des ressources personnalisées (CR) peuvent être créées à l'aide de l'interface CLI à partir d'un fichier utilisant la spécification CR.

Conditions préalables

  • CRD ajouté au cluster par un administrateur de cluster.

Procédure

  1. Créez un fichier YAML pour le CR. Dans l'exemple de définition suivant, les champs personnalisés cronSpec et image sont définis dans un CR de Kind: CronTab. Le Kind provient du champ spec.kind de l'objet CRD :

    Exemple de fichier YAML pour un CR

    apiVersion: "stable.example.com/v1" 1
    kind: CronTab 2
    metadata:
      name: my-new-cron-object 3
      finalizers: 4
      - finalizer.stable.example.com
    spec: 5
      cronSpec: "* * * * /5"
      image: my-awesome-cron-image

    1
    Spécifiez le nom du groupe et la version de l'API (nom/version) à partir du CRD.
    2
    Spécifier le type dans le CRD.
    3
    Spécifiez un nom pour l'objet.
    4
    Spécifier les finaliseurs de l'objet, s'il y en a. Les finaliseurs permettent aux contrôleurs de mettre en œuvre des conditions qui doivent être remplies avant que l'objet puisse être supprimé.
    5
    Spécifier les conditions spécifiques au type d'objet.
  2. Après avoir créé le fichier, créez l'objet :

    oc create -f <nom_du_fichier>.yaml

2.8.2.3. Inspection des ressources personnalisées

Vous pouvez inspecter les objets de ressources personnalisées (CR) qui existent dans votre cluster à l'aide de la CLI.

Conditions préalables

  • Un objet CR existe dans un espace de noms auquel vous avez accès.

Procédure

  1. Pour obtenir des informations sur un type spécifique de CR, exécutez :

    oc get <kind> $ oc get <kind>

    Par exemple :

    $ oc get crontab

    Exemple de sortie

    NAME                 KIND
    my-new-cron-object   CronTab.v1.stable.example.com

    Les noms de ressources ne sont pas sensibles à la casse et vous pouvez utiliser les formes singulières ou plurielles définies dans le CRD, ainsi que n'importe quel nom court. Par exemple :

    $ oc get crontabs
    $ oc get crontab
    $ oc get ct
  2. Vous pouvez également consulter les données YAML brutes d'un CR :

    oc get <kind> -o yaml

    Par exemple :

    $ oc get ct -o yaml

    Exemple de sortie

    apiVersion: v1
    items:
    - apiVersion: stable.example.com/v1
      kind: CronTab
      metadata:
        clusterName: ""
        creationTimestamp: 2017-05-31T12:56:35Z
        deletionGracePeriodSeconds: null
        deletionTimestamp: null
        name: my-new-cron-object
        namespace: default
        resourceVersion: "285"
        selfLink: /apis/stable.example.com/v1/namespaces/default/crontabs/my-new-cron-object
        uid: 9423255b-4600-11e7-af6a-28d2447dc82b
      spec:
        cronSpec: '* * * * /5' 1
        image: my-awesome-cron-image 2

    1 2
    Les données personnalisées du fichier YAML que vous avez utilisé pour créer l'objet s'affichent.
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.

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 leBlog 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.

© 2024 Red Hat, Inc.