
CRD (Custom Resource Definition) ist eine spezielle Ressource in Kubernetes, mit der Sie beliebige Daten eingeben können. Das Kubernetes aaS- Team von Mail.ru hat einen Artikel darüber übersetzt, was es ist, wie es erstellt und verwendet wird.
Was ist CRD?
CRD ist nur eine Tabelle in der Datenbank. Nehmen wir an, wir haben eine Tabelle "Früchte" erstellt, in der sich viele Datensätze befinden: "Apfel", "Banane", "Orange". Jeder Datensatz enthält Spalten mit Fruchtmerkmalen wie Süße, Geschmack und Gewicht.
CRD ähnelt also der Obsttabelle.
CR (Benutzerdefinierte Ressource) - Ein separater Datensatz in der Tabelle, z. B. "Apfel" oder "Banane". Nach dem Erstellen einer CRD (Tabelle) können Sie CR (Datensätze) hinzufügen oder entfernen.
CRD wird benötigt, da immer mehr Benutzer Daten zu Kubernetes beitragen möchten. Das Datenformat kann unterschiedlich sein, und CRDs sind in Kubernetes nicht sofort definiert. Daher müssen Sie Ihre eigenen Tabellen erstellen und die Namen und Spaltentypen wie in einer Datenbank festlegen.
Ein IT-Manager möchte beispielsweise eine CRD verwenden, um eine Liste von Benutzern, eine Liste von Abteilungen, einen Arbeitsplan oder etwas anderes zu organisieren.
So erstellen Sie eine CRD
Wie bereits erwähnt, ist CRD eine Tabelle. Wenn wir eine Tabelle erstellen, müssen wir ihr Format festlegen: Spaltennamen und -typen. In CRD werden diese Elemente im YAML- oder JSON-Format beschrieben. CR beschreibt auch jeden Wert, der im YAML- oder JSON-Format geschrieben werden soll.
Mal sehen, wie die CRD von innen aussieht: Die
CRD ist in drei Teile unterteilt: Allgemeiner Teil, Informationen auf Tabellenebene und Informationen auf Spaltenebene:
- Ein gemeinsamer Teil. Wie bei anderen Kubernetes-Ressourcen enthalten Metadaten den Namen CRD (
name: "fruit-crd")apiVersionundkind. - Informationen auf Tabellenebene. Tabellenname (
kind: "fruit"), Befehlszeile einfacher Kleinbuchstabe (simpler: "fruits"), Plural (plural: "fruits") - Informationen auf Spaltenebene. Spaltenname (
"sweetness"), Spaltentyp ("boolean", "string", "integer", "object"), verschachtelte Objekte (: < >). Sie entsprechen dem OpenAPISpecification Version 3-Format.
Weitere Informationen zu CRD finden Sie im offiziellen Handbuch .
CRD-Prüfung
Ist CRD wirklich nur ein Tisch? Lass uns das Prüfen.
Ich möchte mich nicht an das CRD-Format erinnern und brauche einen einfacheren Weg, um es zu erstellen. Ich schreibe also nur eine Tabellendefinition und habe eine Anweisung - ein automatisches CRD-Generierungswerkzeug.
Die Beschreibung ist sehr einfach: Sie müssen die Paare von Spaltennamen und -typen auflisten.
Nach dem Anwenden dieser YML generiert mein Operator in Kubernetes automatisch die entsprechende CRD. Sie können Ihren eigenen Operator erstellen, aber wenn Sie meinen ausprobieren möchten, führen Sie den folgenden Befehl aus:
kubectl apply -f
https://raw.githubusercontent.com/onelittlenightmusic/k8sasdb/master/install.yaml
Überprüfen Sie nach erfolgreicher Installation des Operators, ob der Pod gestartet wurde:
kubectl get pod -n k8sasdb-system
NAME READY STATUS RESTARTS AGE
k8sasdb-controller-manager-9dbf54b4f-hzrt9 2/2 Running 0 8s
Sie können Beispieltabellen und CR Aufzeichnungen Download von hier .
So sieht die generierte CRD aus. Links: allgemeine Informationen und Tabellenebene, rechts: Informationen auf Spaltenebene.
Dann habe ich die folgende CR hinzugefügt (YAML für eine Frucht).
Beispiel CR "Fruit"
Lassen Sie uns nun die Ergebnisse in der Tabelle und die Operationen in den Datensätzen überprüfen.
Eine Tabelle erstellen
kubectl create -f fruit.yaml
Erfolg: CRD installiert = Tabelle erstellt.
Dies entspricht einem SQL-Befehl
CREATE TABLE fruits;.
Erstellen Sie einen Datensatz
kubectl create -f apple.yaml
Erfolg: CR set = Datensatz erstellt. Dies entspricht einem SQL-Befehl
INSERT INTO fruits values('apple', ...);.
Eine Liste der Datensätze abrufen
kubectl get fruits
Erfolg: Zeigt zwei CRs und alle Spalten für sie an. Entspricht dem SQL-Befehl
SELECT * FROM fruits;.
Eine Aufzeichnung erhalten
kubectl get fruit apple
Erfolgreich. Natürlich können auch andere Namen verwendet werden, beispielsweise "Banane". Der Befehl entspricht einer SQL-Abfrage
SELECT * FROM fruits WHERE name = 'apple';.
Eintrag löschen
kubectl delete fruit apple
Nach dem Löschen zeigt der Befehl zum Überprüfen der gesamten Liste der Früchte nicht das Ergebnis "Apfel" an.
Erfolgreich. Analog in der SQL :
DELETE FROM fruits WHERE name = 'banana';.
Fazit
CRD ist nur eine Tabelle in Kubernetes. Sie können mit CRD neue Tabellen erstellen und mit CR Datensätze hinzufügen. Auch in CRD können Sie das Tabellenschema definieren, indem Sie Spaltennamen und -typen definieren. Sobald Sie die Befehle CRD, CR und kubectl beherrschen, können Sie alle Daten auf Kubernetes hochladen.
Sie brauchen keine Angst zu haben: Auch wenn Sie sich nicht an das CRD-Format erinnern, hilft Ihnen der Bediener. Meine Open Source-Version des Betreibers ist hier veröffentlicht .
Was noch zu lesen: