Kubernetes 1.14: Τα κυριότερα σημεία των νέων

Kubernetes 1.14: Τα κυριότερα σημεία των νέων

Αυτή τη νύχτα θα λάβει χώρα επόμενη κυκλοφορία του Kubernetes - 1.14. Σύμφωνα με την παράδοση που έχει αναπτυχθεί για το blog μας, μιλάμε για τις βασικές αλλαγές στη νέα έκδοση αυτού του υπέροχου προϊόντος Ανοικτού Κώδικα.

Οι πληροφορίες που χρησιμοποιούνται για την προετοιμασία αυτού του υλικού προέρχονται από Πίνακες παρακολούθησης βελτιώσεων Kubernetes, ΑΛΛΑΓΗ-1.14 και συναφή ζητήματα, αιτήματα έλξης, προτάσεις βελτίωσης Kubernetes (ΚΕΠ).

Ας ξεκινήσουμε με μια σημαντική εισαγωγή από τον κύκλο ζωής του συμπλέγματος SIG: δυναμικά συμπλέγματα ανακατεύθυνσης Το Kubernetes (ή για να είμαστε πιο ακριβείς, οι αυτο-φιλοξενούμενες αναπτύξεις HA) είναι τώρα μπορείτε να δημιουργήσετε χρησιμοποιώντας οικείες (στο πλαίσιο συστάδων ενός κόμβου) εντολές kubeadm (init и join). Εν ολίγοις, για αυτό:

  • τα πιστοποιητικά που χρησιμοποιούνται από το σύμπλεγμα μεταφέρονται σε μυστικά.
  • για τη δυνατότητα χρήσης του συμπλέγματος etcd εντός του συμπλέγματος K8s (δηλαδή απαλλαγή από την προηγούμενη υπάρχουσα εξωτερική εξάρτηση) etcd-operator;
  • Τεκμηριώνει τις συνιστώμενες ρυθμίσεις για έναν εξωτερικό εξισορροπητή φορτίου που παρέχει μια διαμόρφωση ανεκτική σε σφάλματα (στο μέλλον σχεδιάζεται να εξαλειφθεί αυτή η εξάρτηση, αλλά όχι σε αυτό το στάδιο).

Kubernetes 1.14: Τα κυριότερα σημεία των νέων
Αρχιτεκτονική ενός συμπλέγματος Kubernetes HA που δημιουργήθηκε με το kubeadm

Λεπτομέρειες για την υλοποίηση μπορείτε να βρείτε στο πρόταση σχεδιασμού. Αυτή η δυνατότητα ήταν πραγματικά πολυαναμενόμενη: η alpha έκδοση αναμενόταν πίσω στο K8s 1.9, αλλά εμφανίστηκε μόλις τώρα.

API

Ομάδα apply και γενικά διαχείριση δηλωτικών αντικειμένων πέρασε του kubectl στον apiserver. Οι ίδιοι οι προγραμματιστές εξηγούν εν συντομία την απόφασή τους λέγοντας αυτό kubectl apply - ένα θεμελιώδες μέρος της εργασίας με διαμορφώσεις στο Kubernetes, ωστόσο, "είναι γεμάτο σφάλματα και δύσκολο να διορθωθεί", και επομένως αυτή η λειτουργικότητα πρέπει να επανέλθει στο κανονικό και να μεταφερθεί στο επίπεδο ελέγχου. Απλά και ξεκάθαρα παραδείγματα προβλημάτων που υπάρχουν σήμερα:

Kubernetes 1.14: Τα κυριότερα σημεία των νέων

Λεπτομέρειες για την υλοποίηση υπάρχουν ΚΕΠ. Η τρέχουσα ετοιμότητα είναι alpha (προβολή σε beta σχεδιάζεται για την επόμενη κυκλοφορία του Kubernetes).

Διατίθεται σε έκδοση alpha ευκαιρία χρησιμοποιώντας το σχήμα OpenAPI v3 για δημιουργία και δημοσίευση τεκμηρίωσης OpenAPI για CustomResources (CR) που χρησιμοποιείται για την επικύρωση πόρων που καθορίζονται από τον χρήστη (από την πλευρά του διακομιστή) του K8 (CustomResourceDefinition, CRD). Η δημοσίευση του OpenAPI για CRD επιτρέπει στους πελάτες (π.χ. kubectl) πραγματοποιήστε επικύρωση από την πλευρά σας (εντός kubectl create и kubectl apply) και εκδίδει τεκμηρίωση σύμφωνα με το σχέδιο (kubectl explain). Λεπτομέρειες - μέσα ΚΕΠ.

Προϋπάρχοντα αρχεία καταγραφής ανοίγουν τώρα με σημαία O_APPEND (αλλά όχι O_TRUNC) για την αποφυγή απώλειας κορμών σε ορισμένες περιπτώσεις και για την ευκολία περικοπής κορμών με εξωτερικά βοηθητικά προγράμματα για περιστροφή.

Επίσης, στο πλαίσιο του Kubernetes API, μπορεί να σημειωθεί ότι στο PodSandbox и PodSandboxStatus προστέθηκε πεδίο runtime_handler για να καταγράψετε πληροφορίες σχετικά με RuntimeClass στο pod (διαβάστε περισσότερα σχετικά στο κείμενο σχετικά Κυκλοφορία Kubernetes 1.12, όπου αυτή η κλάση εμφανίστηκε ως έκδοση άλφα) και στο Admission Webhooks εφαρμόστηκε δυνατότητα προσδιορισμού ποιων εκδόσεων AdmissionReview υποστηρίζουν. Τέλος, οι κανόνες Admission Webhooks είναι τώρα μπορεί να περιοριστεί την έκταση της χρήσης τους από χώρους ονομάτων και πλαίσια συμπλέγματος.

Αποθήκευση

PersistentLocalVolumes, το οποίο είχε κατάσταση beta από την κυκλοφορία K8s 1.10, ανακοινώθηκε σταθερό (GA): αυτή η πύλη λειτουργιών δεν είναι πλέον απενεργοποιημένη και θα καταργηθεί στο Kubernetes 1.17.

Ευκαιρία χρησιμοποιώντας μεταβλητές περιβάλλοντος που ονομάζονται API προς τα κάτω (για παράδειγμα, το όνομα pod) για τα ονόματα των καταλόγων που έχουν προσαρτηθεί ως subPath, αναπτύχθηκε - με τη μορφή ενός νέου πεδίου subPathExpr, το οποίο χρησιμοποιείται τώρα για τον προσδιορισμό του επιθυμητού ονόματος καταλόγου. Το χαρακτηριστικό εμφανίστηκε αρχικά στο Kubernetes 1.11, αλλά για το 1.14 παρέμεινε σε κατάσταση έκδοσης alpha.

Όπως και με την προηγούμενη έκδοση του Kubernetes, εισάγονται πολλές σημαντικές αλλαγές για το ενεργά αναπτυσσόμενο CSI (Container Storage Interface):

CSI

Έγινε διαθέσιμο (ως μέρος της έκδοσης alpha) υποστήριξη αλλαγή μεγέθους για τόμους CSI. Για να το χρησιμοποιήσετε θα χρειαστεί να ενεργοποιήσετε την πύλη χαρακτηριστικών που καλείται ExpandCSIVolumes, καθώς και τη διαθεσιμότητα υποστήριξης για αυτήν τη λειτουργία σε ένα συγκεκριμένο πρόγραμμα οδήγησης CSI.

Ένα άλλο χαρακτηριστικό για το CSI στην έκδοση alpha - ευκαιρία ανατρέξτε απευθείας (δηλαδή χωρίς χρήση PV/PVC) στους τόμους CSI εντός της προδιαγραφής pod. Αυτό καταργεί τον περιορισμό στη χρήση του CSI ως αποκλειστικά απομακρυσμένης αποθήκευσης δεδομένων, ανοίγοντας πόρτες στον κόσμο για αυτούς τοπικούς εφήμερους όγκους. Για χρήση (παράδειγμα από τεκμηρίωση) πρέπει να είναι ενεργοποιημένη CSIInlineVolume πύλη χαρακτηριστικών.

Σημειώθηκε επίσης πρόοδος στα «εσωτερικά» του Kubernetes που σχετίζονται με το CSI, τα οποία δεν είναι τόσο ορατά στους τελικούς χρήστες (διαχειριστές συστήματος)... Επί του παρόντος, οι προγραμματιστές αναγκάζονται να υποστηρίζουν δύο εκδόσεις κάθε προσθήκης αποθήκευσης: μία - «στο παλιός τρόπος», μέσα στη βάση κώδικα του K8 (σε -δέντρο) και το δεύτερο - ως μέρος του νέου CSI (διαβάστε περισσότερα για αυτό, για παράδειγμα, στο εδώ). Αυτό προκαλεί κατανοητές ενοχλήσεις που πρέπει να αντιμετωπιστούν καθώς το ίδιο το CSI σταθεροποιείται. Δεν είναι δυνατή η απλή κατάργηση του API των εσωτερικών (in-tree) προσθηκών λόγω σχετική πολιτική Kubernetes.

Όλα αυτά οδήγησαν στο γεγονός ότι έφτασε η άλφα έκδοση διαδικασία μετανάστευσης εσωτερικός κώδικας προσθήκης, υλοποιείται ως in-tree, σε προσθήκες CSI, χάρη στις οποίες οι ανησυχίες των προγραμματιστών θα περιοριστούν στην υποστήριξη μιας έκδοσης των προσθηκών τους και η συμβατότητα με παλιά API θα παραμείνει και μπορούν να κηρυχθούν ξεπερασμένα στο συνηθισμένο σενάριο. Αναμένεται ότι μέχρι την επόμενη έκδοση του Kubernetes (1.15) θα γίνει μετεγκατάσταση όλων των πρόσθετων παρόχων cloud, η υλοποίηση θα λάβει κατάσταση beta και θα ενεργοποιηθεί στις εγκαταστάσεις του K8 από προεπιλογή. Για λεπτομέρειες, βλ πρόταση σχεδιασμού. Αυτή η μετανάστευση είχε επίσης ως αποτέλεσμα αποτυχία από τα όρια όγκου που ορίζονται από συγκεκριμένους παρόχους cloud (AWS, Azure, GCE, Cinder).

Επιπλέον, υποστήριξη για μπλοκ συσκευές με CSI (CSIBlockVolume) μεταφέρθηκε σε έκδοση beta.

Κόμβοι/Kubelet

Παρουσιάστηκε η έκδοση Alpha νέο τελικό σημείο στο Kubelet, σχεδιασμένο για μετρήσεις απόδοσης σε βασικούς πόρους. Γενικά, αν προηγουμένως η Kubelet λάμβανε στατιστικά στοιχεία για τη χρήση κοντέινερ από το cAdvisor, τώρα αυτά τα δεδομένα προέρχονται από το περιβάλλον χρόνου εκτέλεσης κοντέινερ μέσω CRI (Container Runtime Interface), αλλά διατηρείται επίσης η συμβατότητα για εργασία με παλαιότερες εκδόσεις του Docker. Προηγουμένως, τα στατιστικά που συλλέχθηκαν στο Kubelet αποστέλλονταν μέσω του REST API, αλλά τώρα ένα τελικό σημείο βρίσκεται στο /metrics/resource/v1alpha1. Μακροπρόθεσμη στρατηγική προγραμματιστών είναι είναι η ελαχιστοποίηση του συνόλου των μετρήσεων που παρέχονται από το Kubelet. Παρεμπιπτόντως, αυτές οι ίδιες οι μετρήσεις τώρα καλούν όχι «βασικές μετρήσεις», αλλά «μετρήσεις πόρων» και περιγράφονται ως «πόροι πρώτης κατηγορίας, όπως η CPU και η μνήμη».

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

«Το gRPC δεν είναι συμβατό με μεγάλους αγωγούς παρακολούθησης. Το τελικό σημείο θα είναι χρήσιμο μόνο για την παράδοση μετρήσεων στον διακομιστή Metrics ή την παρακολούθηση στοιχείων που ενσωματώνονται απευθείας σε αυτόν. Απόδοση μορφής κειμένου Prometheus κατά τη χρήση προσωρινής αποθήκευσης στον διακομιστή Metrics αρκετά καλό για να προτιμήσουμε τον Προμηθέα έναντι του gRPC δεδομένης της ευρείας υιοθέτησης του Προμηθέα στην κοινότητα. Μόλις η μορφή OpenMetrics γίνει πιο σταθερή, θα είμαστε σε θέση να προσεγγίσουμε την απόδοση του gRPC με μια μορφή που βασίζεται σε πρωτόκολλα."

Kubernetes 1.14: Τα κυριότερα σημεία των νέων
Ένα από τα συγκριτικά τεστ απόδοσης της χρήσης μορφών gRPC και Prometheus στο νέο τελικό σημείο Kubelet για μετρήσεις. Περισσότερα γραφήματα και άλλες λεπτομέρειες μπορείτε να βρείτε στο ΚΕΠ.

Μεταξύ άλλων αλλαγών:

  • Kubelet τώρα (μία φορά) προσπαθώντας να σταματήσει κοντέινερ σε άγνωστη κατάσταση πριν από τις λειτουργίες επανεκκίνησης και διαγραφής.
  • Όταν χρησιμοποιείτε το PodPresets τώρα στο δοχείο έναρξης προστίθεται τις ίδιες πληροφορίες όπως για ένα κανονικό δοχείο.
  • Κούμπελετ άρχισε να χρησιμοποιεί usageNanoCores από τον πάροχο στατιστικών CRI και για κόμβους και κοντέινερ στα Windows προστέθηκε στατιστικά δικτύου.
  • Οι πληροφορίες λειτουργικού συστήματος και αρχιτεκτονικής καταγράφονται πλέον σε ετικέτες kubernetes.io/os и kubernetes.io/arch Αντικείμενα κόμβου (μεταφέρονται από beta στο GA).
  • Δυνατότητα καθορισμού μιας συγκεκριμένης ομάδας χρηστών συστήματος για κοντέινερ σε μια ομάδα (RunAsGroup, εμφανίστηκε σε K8s 1.11) προχωρημένος πριν από την έκδοση beta (ενεργοποιημένη από προεπιλογή).
  • du και βρείτε που χρησιμοποιείται στο cAdvisor, αντικαταστάθηκε εφαρμογή on Go.

CLI

Σε cli-runtime και kubectl προστέθηκε -k σημαία για ενσωμάτωση με προσαρμόστε (παρεμπιπτόντως, η ανάπτυξή του πραγματοποιείται πλέον σε ξεχωριστό αποθετήριο), δηλ. για την επεξεργασία πρόσθετων αρχείων YAML από ειδικούς καταλόγους προσαρμογής (για λεπτομέρειες σχετικά με τη χρήση τους, βλ ΚΕΠ):

Kubernetes 1.14: Τα κυριότερα σημεία των νέων
Παράδειγμα απλής χρήσης αρχείων προσαρμογή (μια πιο περίπλοκη εφαρμογή του kustomize είναι δυνατή εντός επικαλύψεις)

Επιπλέον:

  • Προστέθηκε νέα ομάδα kubectl create cronjob, το όνομα του οποίου μιλάει από μόνο του.
  • В kubectl logs τώρα μπορείς συνδυασμός σημαίες -f (--follow για αρχεία καταγραφής ροής) και -l (--selector για ερώτημα ετικέτας).
  • kubectl διδακτός αντιγράψτε αρχεία που επιλέχθηκαν με μπαλαντέρ.
  • Στην ομάδα kubectl wait προστέθηκε σημαία --all για να επιλέξετε όλους τους πόρους στον χώρο ονομάτων του καθορισμένου τύπου πόρων.

Άλλα

Οι ακόλουθες δυνατότητες έχουν λάβει κατάσταση σταθερής (GA):

  • ReadinessGate, χρησιμοποιείται στην προδιαγραφή λοβού για τον καθορισμό πρόσθετων συνθηκών που λαμβάνονται υπόψη στην ετοιμότητα του λοβού.
  • Υποστήριξη για μεγάλες σελίδες (καλείται πύλη δυνατοτήτων HugePages);
  • CustomPodDNS;
  • PriorityClass API Pod Priority & Preemption.

Άλλες αλλαγές που εισάγονται στο Kubernetes 1.14:

  • Η προεπιλεγμένη πολιτική RBAC δεν επιτρέπει πλέον την πρόσβαση στο API discovery и access-review χρήστες χωρίς έλεγχο ταυτότητας (χωρίς εξουσιοδότηση).
  • Επίσημη υποστήριξη CoreDNS υπό την προϋπόθεση Μόνο Linux, επομένως όταν χρησιμοποιείτε το kubeadm για να το αναπτύξετε (CoreDNS) σε ένα σύμπλεγμα, οι κόμβοι πρέπει να εκτελούνται μόνο σε Linux (οι nodeSelectors χρησιμοποιούνται για αυτόν τον περιορισμό).
  • Η προεπιλεγμένη διαμόρφωση CoreDNS είναι τώρα χρήσεις πρόσθετο προώθησης αντί για πληρεξούσιο. Επίσης, στο CoreDNS προστέθηκε ReadinessProbe, το οποίο αποτρέπει την εξισορρόπηση φορτίου σε κατάλληλους (μη έτοιμους για σέρβις) λοβούς.
  • Στο kubeadm, στις φάσεις init ή upload-certs, έγινε δυνατή φορτώστε τα πιστοποιητικά που απαιτούνται για τη σύνδεση του νέου επιπέδου ελέγχου στο μυστικό kubeadm-certs (χρησιμοποιήστε τη σημαία --experimental-upload-certs).
  • Έχει εμφανιστεί μια έκδοση alpha για εγκαταστάσεις Windows Υποστήριξη gMSA (Group Managed Service Account) - ειδικοί λογαριασμοί στην υπηρεσία καταλόγου Active Directory που μπορούν επίσης να χρησιμοποιηθούν από κοντέινερ.
  • Για G.C.E. ενεργοποιήθηκε Κρυπτογράφηση mTLS μεταξύ etcd και kube-apiserver.
  • Ενημερώσεις σε χρησιμοποιημένο/εξαρτώμενο λογισμικό: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, υποστήριξη Docker 18.09 στο kubeadm και η ελάχιστη υποστηριζόμενη έκδοση Docker API είναι τώρα 1.26.

PS

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

Πηγή: www.habr.com

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