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:
- Une partie commune. Comme pour les autres ressources Kubernetes, les métadonnées incluent le nom CRD (
name: "fruit-crd"
)apiVersion
etkind
. - 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"
) - 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: