Custom Resource Definitions
Αυτός ο τομέας του οδηγού καλύπτει τη δημιουργία και χρήση αντικειμένων Custom Resource Definition.
Όταν εργάζεστε με Custom Resource Definitions (CRDs), είναι σημαντικό να διακρίνετε δύο διαφορετικά στοιχεία:
- Υπάρχει η δήλωση ενός CRD. Αυτό είναι το αρχείο YAML που έχει kind
CustomResourceDefinition - Στη συνέχεια υπάρχουν πόροι που χρησιμοποιούν το CRD. Ας πούμε ότι ένα CRD ορίζει
foo.example.com/v1. Οποιοσδήποτε πόρος έχειapiVersion: example.com/v1και kindFooείναι ένας πόρος που χρησιμοποιεί το 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.