Κορυφαία 10 κόλπα και συμβουλές Kubernetes

Κορυφαία 10 κόλπα και συμβουλές Kubernetes

Υπάρχει πολλή βιβλιογραφία αναφοράς στο Διαδίκτυο, αλλά μερικές φορές η πιο απλή συμβουλή είναι η πιο πολύτιμη. Ομάδα Kubernetes aaS από το Mail.ru μεταφρασμένο μια επιλογή από δέκα κόλπα και συμβουλές, το οποίο συνέλεξε ο συγγραφέας του άρθρου μετά από ένα χρόνο συνεργασίας με την Kubernetes. Οι συμβουλές δεν ταξινομούνται κατά σημασία, αλλά πιστεύουμε ότι ο καθένας θα βρει κάτι χρήσιμο για τον εαυτό του.

Η απλούστερη εντολή για εργασία με Kubernetes

Αρχικά, ίσως η πιο απλή και χρήσιμη ενέργεια στην εργασία με την Kubernetes. Η ακόλουθη εντολή ενεργοποιεί την ολοκλήρωση εντολών kubectl στο bash shell:

echo "source <(kubectl completion bash)" >> ~/.bashrc

Αυτόματη συμπλήρωση kubectl θα γραφτεί στο αρχείο .bashrc και θα ενεργοποιείται αυτόματα κάθε φορά που ξεκινά το κέλυφος. Αυτό επιταχύνει την πληκτρολόγηση μεγάλων εντολών και παραμέτρων όπως π.χ all-namespaces. Διαβάστε περισσότερα στο Kubernetes bash βοήθεια.

Προεπιλεγμένα όρια μνήμης και CPU σε έναν χώρο ονομάτων

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

Για να αποφευχθεί αυτό, το Kubernetes σάς επιτρέπει να ορίσετε προεπιλεγμένους περιορισμούς ανά χώρο ονομάτων. Είναι γραμμένα στο αρχείο yaml για ένα συγκεκριμένο χώρο ονομάτων. Ακολουθεί ένα παράδειγμα τέτοιου αρχείου:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Δημιουργήστε ένα τέτοιο yaml και εφαρμόστε σε οποιοδήποτε χώρο ονομάτων. Για παράδειγμα, στον χώρο ονομάτων limit-example. Πλέον, κάθε κοντέινερ που αναπτύσσεται σε αυτόν τον χώρο ονομάτων θα έχει όριο 512 Mi, εκτός εάν έχει οριστεί επιπλέον άλλο μεμονωμένο όριο για αυτό το κοντέινερ.

Συλλογή σκουπιδιών σε παλαιότερες εκδόσεις του Kubernetes

Το Kubelet ξεκινά από προεπιλογή τη συλλογή σκουπιδιών όταν var/lib/docker καταλαμβάνει το 90% του διαθέσιμου χώρου στο δίσκο. Αυτό είναι υπέροχο, ωστόσο, μέχρι το Kubernetes 1.7 δεν υπήρχε προεπιλεγμένο όριο στον αριθμό των χρησιμοποιούμενων inode, που αντιστοιχούν στον αριθμό των αρχείων στο σύστημα αρχείων.

Δυνητικά το δοχείο σας var/lib/docker μπορεί να χρησιμοποιεί μόνο το 50% του χώρου στο δίσκο, αλλά μπορεί να εξαντληθεί από inodes, γεγονός που θα προκαλέσει προβλήματα στους εργαζόμενους.

Σε παλαιότερες εκδόσεις του kubelet από 1.4 έως 1.6 θα πρέπει να προσθέσετε αυτήν τη σημαία:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

Σε 1.7 και νεότερες εκδόσεις αυτή η σημαία έχει οριστεί από προεπιλογή. Ωστόσο, οι προηγούμενες εκδόσεις δεν παρακολουθούν το όριο inode.

Minikube... μικρό αλλά ισχυρό ντόπιο Kubernetes

Το Minikube είναι ο ευκολότερος τρόπος για να εκτελέσετε ένα τοπικό σύμπλεγμα Kubernetes. Εκκινείται με μια απλή εντολή:

minikube start

Η εκτέλεση αυτής της εντολής έχει ως αποτέλεσμα ένα πραγματικό σύμπλεγμα Kubernetes που εκτελείται στον υπολογιστή σας.

Κορυφαία 10 κόλπα και συμβουλές Kubernetes
Πηγή εικονογράφησης

Το κόλπο είναι πώς να δημιουργήσετε την εφαρμογή και να την εκτελέσετε τοπικά σε αυτό το σύμπλεγμα. Εκτός εάν δίνονται συγκεκριμένες οδηγίες, η εικόνα Docker θα δημιουργηθεί στον υπολογιστή σας και όχι στο σύμπλεγμα.

Για να αναγκάσει το Docker να προωθήσει την εικόνα στο τοπικό σύμπλεγμα Kubernetes, δίνεται η ακόλουθη εντολή στο μηχάνημα docker:

eval $(minikube docker-env)

Τώρα μπορούμε να δημιουργήσουμε εφαρμογές σε ένα τοπικό σύμπλεγμα Kubernetes.

Μην δίνετε στο kubectl πρόσβαση σε όλους

Αυτό φαίνεται προφανές, αλλά αν πολλές ομάδες χρησιμοποιούν το ίδιο σύμπλεγμα για τις εφαρμογές τους (για αυτό δημιουργήθηκε το Kubernetes), δεν θα πρέπει απλώς να δώσετε σε όλους kubectl. Είναι καλύτερο να διαχωρίσετε τις εντολές, εκχωρώντας σε καθεμία από αυτές το δικό της χώρο ονομάτων και περιορίζοντας την πρόσβαση χρησιμοποιώντας πολιτικές RBAC.

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

Διαχείριση προϋπολογισμών pod

Πώς να εξασφαλίσετε ότι δεν υπάρχει χρόνος διακοπής λειτουργίας για μια εφαρμογή σε ένα σύμπλεγμα Kubernetes; PodDisruptionBudget και ξανά PodDisruptionBudget.

Τα συμπλέγματα ενημερώνονται περιοδικά και οι κόμβοι αδειάζονται. Τίποτα δεν μένει στάσιμο, αυτή είναι η πραγματικότητα. Κάθε ανάπτυξη με περισσότερες από μία παρουσίες θα πρέπει να περιλαμβάνει ένα PDB (PodDisruptionBudget). Δημιουργείται σε ένα απλό αρχείο yaml που εφαρμόζεται στο σύμπλεγμα. Η περιοχή κάλυψης ενός συγκεκριμένου ΠΣΠ καθορίζεται από επιλογείς ετικετών.

Σημείωση: Ο προϋπολογισμός του ΠΣΠ λαμβάνεται υπόψη μόνο όταν η παράβαση του προϋπολογισμού είναι αναστρέψιμη (εκούσια διακοπή). Σε περιπτώσεις όπως αστοχίες υλικού, το PDB δεν θα λειτουργήσει.

Παράδειγμα ΠΣΠ:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

Οι δύο βασικές παράμετροι είναι matchLabels и minAvailable. Η πρώτη παράμετρος καθορίζει σε ποιες εφαρμογές ισχύει ο προϋπολογισμός. Για παράδειγμα, αν έχω αναπτύξεις με ετικέτες app: app-a и app: app-b, τότε αυτό το ΠΣΠ θα ισχύει μόνο για το πρώτο.

Παράμετρος minAvailable λαμβάνονται υπόψη κατά το άδειασμα (καθαρισμός) του κόμβου. Για παράδειγμα, στο παράδειγμά μας, κατά τη διάρκεια της εκκένωσης, όλες οι περιπτώσεις αποβάλλονται app: app-a, εκτός από δύο.

Αυτό σας επιτρέπει να ελέγχετε πόσες παρουσίες της εφαρμογής θα πρέπει να εκτελούνται ανά πάσα στιγμή.

Παρακολούθηση υγείας εφαρμογών

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

Ο πρώτος ανιχνευτής (readiness) καθορίζει την ετοιμότητα του κοντέινερ να δέχεται κίνηση.

Το δεύτερο (ζωντάνια) δείχνει αν το δοχείο είναι υγιές ή χρειάζεται επανεκκίνηση.

Οι σχετικές διαμορφώσεις απλώς προστίθενται στο yaml για ανάπτυξη. Εκεί μπορείτε να καθορίσετε τα χρονικά όρια, τους χρόνους καθυστέρησης και τον αριθμό των επαναληπτικών δοκιμών. Δείτε περισσότερες λεπτομέρειες για αυτούς Τεκμηρίωση Kubernetes.

Οι ετικέτες είναι παντού

Οι ετικέτες είναι μια από τις θεμελιώδεις έννοιες στο Kubernetes. Επιτρέπουν στα αντικείμενα να επικοινωνούν ελεύθερα μεταξύ τους, καθώς και να δημιουργούν ερωτήματα βασισμένα σε ετικέτες. Στο Kubernetes, μπορείτε ακόμη και να μεταβείτε στον πελάτη και να παρακολουθήσετε εκδηλώσεις για συγκεκριμένες ετικέτες.

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

Ας υποθέσουμε ότι χρησιμοποιείτε το ίδιο σύμπλεγμα για dev и qa. Αυτό σημαίνει ότι μπορείτε να έχετε μια εφαρμογή app-a, δουλεύοντας ταυτόχρονα και στα δύο περιβάλλοντα qa и dev. Σε αυτήν την περίπτωση, μπορούμε να έχουμε ξεχωριστή πρόσβαση στην παρουσία της εφαρμογής σε ένα συγκεκριμένο περιβάλλον, καθορίζοντας την κατάλληλη παράμετρο environment. Για παράδειγμα app: app-a и environment: dev για ένα περιβάλλον, και app: app-a и environment: qa για το δεύτερο.

Αυτό σας επιτρέπει να έχετε πρόσβαση και στις δύο περιπτώσεις της εφαρμογής, για παράδειγμα, να διεξάγετε δοκιμές ταυτόχρονα.

Οργανώσου

Το Kubernetes είναι ένα πολύ ισχυρό σύστημα, αλλά οποιοδήποτε σύστημα μπορεί τελικά να βαλτώσει με πάρα πολλές διαδικασίες. Το Kubelet εκτελεί όλες τις διαδικασίες και τους ελέγχους που καθορίζετε, καθώς και τις δικές του.

Φυσικά, μια ορφανή υπηρεσία δεν θα επιβραδύνει το σύστημα και το Kubernetes έχει σχεδιαστεί για να κλιμακώνεται από την αρχή. Αλλά αν αντί για μία υπηρεσία εμφανιστεί ένα εκατομμύριο, το kubelet αρχίζει να πνίγεται.

Εάν για κάποιο λόγο διαγράψετε μια ανάπτυξη (κοντέινερ, εικόνα, οτιδήποτε άλλο), φροντίστε απλώς να κάνετε μια πλήρη εκκαθάριση.

Γνωρίστε το Go

Κρατήσαμε την κύρια συμβουλή για το τέλος. Μάθετε τη γλώσσα προγραμματισμού Go.

Το Kubernetes αναπτύχθηκε στο Go, όλες οι επεκτάσεις είναι γραμμένες στο Go και η βιβλιοθήκη πελάτη-πελάτη υποστηρίζεται επίσης επίσημα.

Μπορεί να χρησιμοποιηθεί για διαφορετικά και ενδιαφέροντα πράγματα. Για παράδειγμα, για να επεκτείνετε το σύστημα Kubernetes σύμφωνα με το γούστο σας. Έτσι, μπορείτε να χρησιμοποιήσετε τα δικά σας προγράμματα για τη συλλογή δεδομένων, την ανάπτυξη εφαρμογών ή απλώς τον καθαρισμό κοντέινερ.

Η εκμάθηση της γλώσσας προγραμματισμού Go και η εκμάθηση του client-go είναι ίσως η πιο σημαντική συμβουλή που μπορείτε να δώσετε στους νέους χρήστες του Kubernetes.

Μεταφράστηκε με την υποστήριξη του Mail.ru Cloud Solutions

Τι άλλο να διαβάσετε:

  1. Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes και πώς να τα χρησιμοποιήσετε αποτελεσματικά.
  2. Κόμβοι εργασίας Kubernetes: πολλοί μικροί ή λίγοι μεγάλοι?
  3. 25 Χρήσιμα εργαλεία για την ανάπτυξη και τη διαχείριση του Kubernetes.

Πηγή: www.habr.com

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