Une explication simple de CRD dans Kubernetes et comment l'utiliser

Space by maryanion



CRD (Custom Resource Definition) est une ressource spéciale dans Kubernetes qui vous permet de saisir n'importe quelle donnée. L'équipe Kubernetes aaS de Mail.ru a traduit un article sur ce que c'est, comment le créer et l'utiliser.



Qu'est-ce que CRD



CRD est juste une table dans la base de données. Disons que nous avons créé un tableau "Fruits", il contient de nombreux enregistrements: "pomme", "banane", "orange". Chaque enregistrement a des colonnes avec des caractéristiques de fruits telles que la douceur, la saveur et le poids.



Ainsi, CRD est similaire à la table «Fruit».







CR (ressource personnalisée) - un enregistrement séparé dans le tableau, par exemple, "pomme" ou "banane". Après avoir créé un CRD (table), vous pouvez ajouter ou supprimer des CR (enregistrements).







CRD est nécessaire car de plus en plus d'utilisateurs souhaitent apporter des données à Kubernetes. Le format des données peut être différent et les CRD ne sont pas définis dans Kubernetes par défaut. En conséquence, vous devez créer vos propres tables, en définissant les noms et les types de colonnes, comme dans une base de données.



Par exemple, un responsable informatique souhaite utiliser un CRD pour organiser une liste d'utilisateurs, une liste de services, un horaire de travail ou autre chose.



Comment créer un CRD



Comme mentionné, CRD est une table. Lorsque nous créons une table, nous devons définir son format: noms et types de colonnes. Dans CRD, ces éléments sont décrits au format YAML ou JSON. CR décrit également chaque valeur à écrire au format YAML ou JSON.







Voyons à quoi ressemble le CRD de l'intérieur: Le







CRD est divisé en trois parties: partie générale, informations au niveau de la table et informations au niveau de la colonne:



  1. Une partie commune. Comme pour les autres ressources Kubernetes, les métadonnées incluent le nom CRD ( name: "fruit-crd") apiVersionet kind.
  2. Informations au niveau de la table. Nom de la table ( kind: "fruit"), nom simple en minuscules en ligne de commande ( simpler: "fruits"), pluriel ( plural: "fruits")
  3. Informations au niveau de la colonne. Nom de colonne ( "sweetness"), type de colonne ( "boolean", "string", "integer", "object"), objets imbriqués ( : < >). Ils sont conformes au format OpenAPISpecification version 3.


Plus d'informations sur CRD sont dans le manuel officiel .



Contrôle CRD



CRD est-il vraiment juste une table? Allons vérifier.



Je ne veux pas me souvenir du format CRD et j'ai besoin d'un moyen plus simple de le créer. Je n'écris donc qu'une définition de table et j'ai une déclaration - un outil de génération automatique de CRD.



La description est très simple: vous devez lister les paires de noms et types de colonnes.







Après avoir appliqué ce YML, mon opérateur dans Kubernetes génère automatiquement le CRD correspondant. Vous pouvez créer votre propre opérateur, mais si vous voulez essayer le mien, exécutez la commande suivante:



kubectl apply -f
https://raw.githubusercontent.com/onelittlenightmusic/k8sasdb/master/install.yaml


Après avoir installé l'opérateur avec succès, vérifiez que le pod a démarré:



kubectl get pod -n k8sasdb-system
NAME                                         READY   STATUS    RESTARTS   AGE
k8sasdb-controller-manager-9dbf54b4f-hzrt9   2/2     Running   0          8s


Vous pouvez télécharger des exemples de tableaux et d'enregistrements CR à partir d'ici .



Voici à quoi ressemble le CRD généré. Gauche: informations générales et niveau table, droite: informations au niveau colonne.







Ensuite, j'ai ajouté le CR suivant (YAML pour un fruit).





Exemple CR "Fruit" Vérifions



maintenant les résultats dans le tableau et les opérations sur les enregistrements.



Créer une table



kubectl create -f fruit.yaml






Succès: CRD installé = table créée.







C'est l'équivalent d'une commande SQL CREATE TABLE fruits;.



Créer un enregistrement



kubectl create -f apple.yaml






Succès: CR set = enregistrement créé. C'est l'équivalent d'une commande SQL INSERT INTO fruits values('apple', ...);.



Obtenir une liste d'enregistrements



kubectl get fruits






Réussite: affiche deux CR et toutes les colonnes correspondantes. Équivalent à la commande SQL SELECT * FROM fruits;.



Recevoir un enregistrement



kubectl get fruit apple






Avec succès. Bien sûr, vous pouvez utiliser d'autres noms, par exemple "banane". La commande équivaut à une requête SQL SELECT * FROM fruits WHERE name = 'apple';.



Supprimer l'entrée



kubectl delete fruit apple






Après la suppression, la commande pour vérifier la liste entière des fruits n'affiche pas le résultat "pomme".







Avec succès. Analogique dans le SQL: DELETE FROM fruits WHERE name = 'banana';.



Conclusion



CRD n'est qu'une table dans Kubernetes. Vous pouvez créer de nouvelles tables avec CRD et ajouter des enregistrements avec CR. Toujours dans CRD, vous pouvez définir le schéma de table en définissant les noms et les types de colonne. Une fois que vous avez maîtrisé les commandes CRD, CR et kubectl, vous pouvez télécharger toutes les données sur Kubernetes.



Il n'y a pas lieu d'avoir peur: même si vous ne vous souvenez pas du format CRD, l'opérateur vous aidera. Ma version open source de l'opérateur est publiée ici .



Quoi d'autre à lire:



  1. Comment utiliser kubectl plus efficacement: un guide complet .
  2. Kubernetes: .
  3. Kubernetes .



All Articles