Skip to main content
Version: 3.19.0

Custom Resource Definitions

Αυτός ο τομέας του οδηγού καλύπτει τη δημιουργία και χρήση αντικειμένων Custom Resource Definition.

Όταν εργάζεστε με Custom Resource Definitions (CRDs), είναι σημαντικό να διακρίνετε δύο διαφορετικά στοιχεία:

  • Υπάρχει η δήλωση ενός CRD. Αυτό είναι το αρχείο YAML που έχει kind CustomResourceDefinition
  • Στη συνέχεια υπάρχουν πόροι που χρησιμοποιούν το CRD. Ας πούμε ότι ένα CRD ορίζει foo.example.com/v1. Οποιοσδήποτε πόρος έχει apiVersion: example.com/v1 και kind Foo είναι ένας πόρος που χρησιμοποιεί το CRD.

Εγκαταστήστε μια Δήλωση CRD Πριν Χρησιμοποιήσετε τον Πόρο

Το Helm είναι βελτιστοποιημένο για να φορτώνει όσο το δυνατόν περισσότερους πόρους στο Kubernetes το συντομότερο δυνατό. Από σχεδιασμό, το Kubernetes μπορεί να λάβει ένα ολόκληρο σύνολο manifests και να τα φέρει όλα online (αυτό ονομάζεται reconciliation loop).

Αλλά υπάρχει μια διαφορά με τα CRDs.

Για ένα CRD, η δήλωση πρέπει να καταχωρηθεί πριν μπορέσουν να χρησιμοποιηθούν οποιοιδήποτε πόροι του τύπου (ή των τύπων) αυτού του CRD. Και η διαδικασία καταχώρησης μερικές φορές διαρκεί μερικά δευτερόλεπτα.

Μέθοδος 1: Αφήστε το helm να το Κάνει

Με την άφιξη του Helm 3, αφαιρέσαμε τα παλιά crd-install hooks για μια πιο απλή μεθοδολογία. Υπάρχει τώρα ένας ειδικός φάκελος με το όνομα crds που μπορείτε να δημιουργήσετε στο chart σας για να περιέχει τα CRDs σας. Αυτά τα CRDs δεν υποστηρίζουν templating, αλλά θα εγκατασταθούν από προεπιλογή όταν εκτελείτε helm install για το chart. Αν το CRD υπάρχει ήδη, θα παραλειφθεί με μια προειδοποίηση. Αν θέλετε να παραλείψετε το βήμα εγκατάστασης CRD, μπορείτε να περάσετε τη σημαία --skip-crds.

Μερικές επιφυλάξεις (και εξηγήσεις)

Δεν υπάρχει υποστήριξη αυτή τη στιγμή για αναβάθμιση ή διαγραφή CRDs χρησιμοποιώντας το Helm. Αυτή ήταν μια ρητή απόφαση μετά από πολλή συζήτηση στην κοινότητα λόγω του κινδύνου για ακούσια απώλεια δεδομένων. Επιπλέον, αυτή τη στιγμή δεν υπάρχει συναίνεση στην κοινότητα σχετικά με τον τρόπο χειρισμού των CRDs και του κύκλου ζωής τους. Καθώς αυτό εξελίσσεται, το Helm θα προσθέσει υποστήριξη για αυτές τις περιπτώσεις χρήσης.

Η σημαία --dry-run των helm install και helm upgrade δεν υποστηρίζεται αυτή τη στιγμή για CRDs. Ο σκοπός του "Dry Run" είναι να επικυρώσει ότι η έξοδος του chart θα λειτουργήσει πραγματικά αν σταλεί στον server. Αλλά τα CRDs αποτελούν τροποποίηση της συμπεριφοράς του server. Το Helm δεν μπορεί να εγκαταστήσει το CRD σε dry run, επομένως ο discovery client δεν θα γνωρίζει για αυτό το Custom Resource (CR), και η επικύρωση θα αποτύχει. Εναλλακτικά μπορείτε να μεταφέρετε τα CRDs στο δικό τους chart ή να χρησιμοποιήσετε το helm template αντί αυτού.

Ένα άλλο σημαντικό σημείο που πρέπει να ληφθεί υπόψη στη συζήτηση γύρω από την υποστήριξη CRD είναι ο τρόπος με τον οποίο γίνεται το rendering των templates. Ένα από τα ξεχωριστά μειονεκτήματα της μεθόδου crd-install που χρησιμοποιούνταν στο Helm 2 ήταν η αδυναμία σωστής επικύρωσης charts λόγω της μεταβαλλόμενης διαθεσιμότητας API (ένα CRD στην πραγματικότητα προσθέτει ένα ακόμη διαθέσιμο API στο Kubernetes cluster σας). Αν ένα chart εγκαθιστούσε ένα CRD, το helm δεν είχε πλέον ένα έγκυρο σύνολο εκδόσεων API με το οποίο να εργαστεί. Αυτός είναι επίσης ο λόγος πίσω από την αφαίρεση της υποστήριξης templating από τα CRDs. Με τη νέα μέθοδο crds για την εγκατάσταση CRD, διασφαλίζουμε τώρα ότι το helm έχει πλήρως έγκυρες πληροφορίες για την τρέχουσα κατάσταση του cluster.

Μέθοδος 2: Ξεχωριστά Charts

Ένας άλλος τρόπος για να το κάνετε αυτό είναι να βάλετε τον ορισμό του CRD σε ένα chart, και στη συνέχεια να βάλετε οποιουσδήποτε πόρους που χρησιμοποιούν αυτό το CRD σε ένα άλλο chart.

Με αυτή τη μέθοδο, κάθε chart πρέπει να εγκατασταθεί ξεχωριστά. Ωστόσο, αυτή η ροή εργασίας μπορεί να είναι πιο χρήσιμη για διαχειριστές cluster που διαθέτουν δικαιώματα διαχειριστή σε ένα cluster.