Μια σύντομη εισαγωγή στο Kustomize

Σημείωση. μετάφρ.: Το άρθρο γράφτηκε από τον Scott Lowe, έναν μηχανικό με μεγάλη εμπειρία στην πληροφορική, ο οποίος είναι συγγραφέας/συν-συγγραφέας επτά έντυπων βιβλίων (κυρίως στο VMware vSphere). Τώρα εργάζεται για τη θυγατρική της VMware, Heptio (που αποκτήθηκε το 2016), με εξειδίκευση στο cloud computing και στην Kubernetes. Το ίδιο το κείμενο χρησιμεύει ως μια συνοπτική και κατανοητή εισαγωγή στη διαχείριση ρυθμίσεων για Kubernetes χρησιμοποιώντας τεχνολογία Προσαρμογή, που πρόσφατα έγινε μέρος των K8s.

Μια σύντομη εισαγωγή στο Kustomize

Το Kustomize είναι ένα εργαλείο που επιτρέπει στους χρήστες να "προσαρμόζουν απλά αρχεία YAML χωρίς πρότυπα για διαφορετικούς σκοπούς, αφήνοντας το αρχικό YAML ανέπαφο και χρησιμοποιήσιμο" (η περιγραφή δανείστηκε απευθείας από Kustomize αποθετήριο στο GitHub). Το Kustomize μπορεί να εκτελεστεί απευθείας ή, όπως στο Kubernetes 1.14, να χρησιμοποιηθεί kubectl -k για πρόσβαση στη λειτουργικότητά του (αν και από το Kubernetes 1.15, το ξεχωριστό δυαδικό αρχείο είναι νεότερο από τις δυνατότητες που είναι ενσωματωμένες στο kubectl). (Σημείωση. μετάφρ.: Και με την πρόσφατη κυκλοφορία Κουμπερνέτες 1.16 προσαρμόστε υποστηριζόμενο από επίσης στο βοηθητικό πρόγραμμα kubeadm.) Σε αυτήν την ανάρτηση, θέλω να εισαγάγω τους αναγνώστες στα βασικά του kustomize.

Στην απλούστερη μορφή/εφαρμογή του, το kustomize είναι απλώς μια συλλογή πόρων (αρχεία YAML που ορίζουν αντικείμενα Kubernetes: Deployments, Services, κ.λπ.) συν μια λίστα οδηγιών για αλλαγές που πρέπει να γίνουν σε αυτούς τους πόρους. Ακριβώς όπως το make χρησιμοποιεί το σύνολο εντολών που περιέχεται σε Makefile, και ο Docker κατασκευάζει το κοντέινερ με βάση τις οδηγίες από Dockerfile, προσαρμόστε τις χρήσεις kustomization.yaml για να αποθηκεύσετε οδηγίες σχετικά με τις αλλαγές που θέλει να κάνει ο χρήστης σε ένα σύνολο πόρων.

Εδώ είναι ένα παράδειγμα αρχείου kustomization.yaml:

resources:
- deployment.yaml
- service.yaml
namePrefix: dev-
namespace: development
commonLabels:
  environment: development

Δεν θα προσπαθήσω να μιλήσω για όλα τα πιθανά πεδία του αρχείου. kustomization.yaml (για αυτό είναι καλά γραμμένο εδώ), αλλά θα δώσω μια σύντομη εξήγηση ενός συγκεκριμένου παραδείγματος:

  • Πεδίο resources υποδεικνύει τι (ποιοι πόροι) θα αλλάξει. Σε αυτήν την περίπτωση, θα αναζητήσει πόρους σε αρχεία deployment.yaml и service.yaml στον κατάλογό σας (μπορείτε να καθορίσετε πλήρεις ή σχετικές διαδρομές εάν χρειάζεται).
  • Πεδίο namePrefix δίνει εντολή στο kustomize να προσθέσει ένα συγκεκριμένο πρόθεμα (σε αυτήν την περίπτωση - dev-) να αποδώσει name όλους τους πόρους που ορίζονται στο πεδίο resources. Έτσι, εάν το Deployment έχει name με το νόημα nginx-deployment, η προσαρμογή θα το κάνει dev-nginx-deployment.
  • Πεδίο namespace δίνει εντολή στο kustomize να προσθέσει τον δεδομένο χώρο ονομάτων σε όλους τους πόρους. Σε αυτήν την περίπτωση, το Deployment and Service θα εμπίπτει στον χώρο ονομάτων development.
  • Τέλος, το χωράφι commonLabels περιέχει ένα σύνολο ετικετών που θα προστεθούν σε όλους τους πόρους. Στο παράδειγμά μας, το kustomize θα αντιστοιχίσει μια ετικέτα στους πόρους με το όνομα environment και νόημα development.

Εάν ο χρήστης το κάνει kustomize build . στον κατάλογο με το αρχείο kustomization.yaml και τους απαραίτητους πόρους (π.χ. αρχεία deployment.yaml и service.yaml), τότε στην έξοδο θα λάβει ένα κείμενο με τις αλλαγές που καθορίζονται στο kustomization.yaml.

Μια σύντομη εισαγωγή στο Kustomize
Σημείωση. μετάφρ.: Απεικόνιση από την τεκμηρίωση του έργου σχετικά με την «απλή» χρήση του kustomize

Η έξοδος μπορεί να ανακατευθυνθεί εάν χρειάζεται να γίνουν αλλαγές:

kustomize build . > custom-config.yaml

Τα δεδομένα εξόδου είναι ντετερμινιστικά (τα ίδια δεδομένα εισόδου θα παράγουν τα ίδια αποτελέσματα εξόδου), επομένως δεν χρειάζεται να αποθηκεύσετε το αποτέλεσμα σε αρχείο. Αντίθετα, μπορεί να περάσει απευθείας σε άλλη εντολή:

kustomize build . | kubectl apply -f -

Οι δυνατότητες προσαρμογής μπορούν επίσης να προσπελαστούν μέσω kubectl -k (από την έκδοση 1.14 του Kubernetes). Ωστόσο, έχετε υπόψη σας ότι το αυτόνομο πακέτο kustomize ενημερώνεται πιο γρήγορα από το ενσωματωμένο πακέτο kubectl (τουλάχιστον αυτό συμβαίνει με την έκδοση Kubernetes 1.15).

Οι αναγνώστες μπορεί να ρωτήσουν: "Γιατί όλη αυτή η πολυπλοκότητα εάν μπορείτε να επεξεργαστείτε τα αρχεία απευθείας;" Μεγάλη ερώτηση. Στο παράδειγμά μας, όντως μπορεί κανείς να τροποποιήσετε αρχεία deployment.yaml и service.yaml άμεσα, αλλά τι γίνεται αν είναι μια διχάλα του έργου κάποιου άλλου; Η απευθείας αλλαγή αρχείων καθιστά δύσκολη (αν όχι αδύνατη) την επαναφορά ενός πιρουνιού όταν γίνονται αλλαγές στην προέλευση/πηγή. Η χρήση του kustomize σάς επιτρέπει να συγκεντρώνετε αυτές τις αλλαγές σε ένα αρχείο kustomization.yaml, αφήνοντας ανέπαφα τα αρχικά αρχεία και έτσι διευκολύνεται η επαναφορά των αρχικών αρχείων εάν είναι απαραίτητο.

Τα οφέλη του kustomize γίνονται εμφανή σε πιο περίπλοκες περιπτώσεις χρήσης. Στο παραπάνω παράδειγμα kustomization.yaml και οι πόροι βρίσκονται στον ίδιο κατάλογο. Ωστόσο, το kustomize υποστηρίζει περιπτώσεις χρήσης όπου υπάρχει μια βασική διαμόρφωση και πολλές παραλλαγές της, γνωστές και ως επικαλύψεις. Για παράδειγμα, ένας χρήστης ήθελε να πάρει το Deployment and Service για το nginx, το οποίο χρησιμοποίησα ως παράδειγμα, και να δημιουργήσει εκδόσεις (ή παραλλαγές) ανάπτυξης, σταδιακής και παραγωγής αυτών των αρχείων. Για να το κάνει αυτό, θα χρειαστεί τις προαναφερθείσες επικαλύψεις και, στην πραγματικότητα, τους ίδιους τους βασικούς πόρους.

Για να επεξηγηθεί η ιδέα των επικαλύψεων και των υποκείμενων πόρων (βασικοί πόροι), ας υποθέσουμε ότι οι κατάλογοι έχουν την ακόλουθη δομή:

- base
  - deployment.yaml
  - service.yaml
  - kustomization.yaml
- overlays
  - dev
    - kustomization.yaml
  - staging
    - kustomization.yaml
  - prod
    - kustomization.yaml

Στο αρχείο base/kustomization.yaml χρήστες που χρησιμοποιούν το πεδίο resources Απλώς δηλώστε τους πόρους που πρέπει να περιλαμβάνει το kustomize.

Σε κάθε ένα από τα αρχεία overlays/{dev,staging,prod}/kustomization.yaml Οι χρήστες αναφέρονται στη διαμόρφωση βάσης στο πεδίο resourcesκαι, στη συνέχεια, υποδείξτε συγκεκριμένες αλλαγές για δεδομένο περιβάλλον. Για παράδειγμα, αρχείο overlays/dev/kustomization.yaml μπορεί να μοιάζει με το παράδειγμα που δόθηκε προηγουμένως:

resources:
- ../../base
namePrefix: dev-
namespace: development
commonLabels:
  environment: development

Σε αυτή την περίπτωση το αρχείο overlays/prod/kustomization.yaml θα μπορούσε να είναι εντελώς διαφορετικό:

resources:
- ../../base
namePrefix: prod-
namespace: production
commonLabels:
  environment: production
  sre-team: blue

Όταν ο χρήστης τρέχει kustomize build . στον κατάλογο overlays/dev, το kustomize θα δημιουργήσει την επιλογή ανάπτυξης. Αν τρέχεις kustomize build . στον κατάλογο overlays/prod - έχετε την επιλογή παραγωγής. Και όλα αυτά - χωρίς να γίνουν αλλαγές στο πρωτότυπο (βάση) αρχεία, όλα με δηλωτικό και ντετερμινιστικό τρόπο. Μπορείτε να δεσμεύσετε τη βασική διαμόρφωση και τους καταλόγους επικάλυψης απευθείας στον έλεγχο έκδοσης, γνωρίζοντας ότι με βάση αυτά τα αρχεία μπορείτε να αναπαράγετε την επιθυμητή διαμόρφωση ανά πάσα στιγμή.

Μια σύντομη εισαγωγή στο Kustomize
Σημείωση. μετάφρ.: Απεικόνιση από την τεκμηρίωση του έργου σχετικά με τη χρήση επικαλύψεων στο kustomize

Προσαρμογή μπορεί πολύ περισσότερα από όσα καλύπτονται σε αυτό το άρθρο. Ωστόσο, ελπίζω να χρησιμεύσει ως μια καλή εισαγωγή.

Επιπρόσθετοι πόροι

Υπάρχουν πολλά καλά άρθρα και δημοσιεύσεις σχετικά με το kustomize. Εδώ είναι μερικά που βρήκα ιδιαίτερα χρήσιμα:

Σημείωση. μετάφρ.: Μπορείτε επίσης να προτείνετε ένα μπλοκ συνδέσμων που δημοσιεύονται ως Υποστηρικτικό υλικό στον ιστότοπο του βοηθητικού προγράμματος, ακολουθούμενη από μια συλλογή βίντεο με τις πιο πρόσφατες αναφορές σχετικά με το kustomize.

Εάν έχετε ερωτήσεις ή προτάσεις για τη βελτίωση αυτού του υλικού, είμαι πάντα ανοιχτός σε σχόλια. Μπορείτε να επικοινωνήσετε μαζί μου στο Twitter ή Κανάλι Kubernetes Slack. Διασκεδάστε τροποποιώντας τα μανιφέστα σας με το kustomize!

ΥΓ από τον μεταφραστή

Διαβάστε επίσης στο blog μας:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο