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

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

Ομάδα Kubernetes aaS από το Mail.ru μετέφρασε ένα άρθρο του Daniel Weibel στο οποίο θα βρείτε συμβουλές και κόλπα για αποτελεσματική εργασία με το kubectl. Θα σας βοηθήσει επίσης να αποκτήσετε μια βαθύτερη κατανόηση του Kubernetes.

Σύμφωνα με τον συγγραφέα, στόχος του άρθρου είναι να κάνει την καθημερινή σας εργασία με την Kubernetes όχι μόνο πιο αποτελεσματική, αλλά και πιο ευχάριστη!

Εισαγωγή: Τι είναι το kubectl

Για να μάθετε να χρησιμοποιείτε το kubectl πιο αποτελεσματικά, πρέπει να αποκτήσετε μια βασική κατανόηση του τι είναι και πώς λειτουργεί.

Από την πλευρά του χρήστη, το kubectl είναι ένας πίνακας ελέγχου που σας επιτρέπει να εκτελείτε λειτουργίες Kubernetes.

Από τεχνική άποψη, το kubectl είναι ένας πελάτης API Kubernetes.

Το Kubernetes API είναι ένα HTTP REST API. Αυτό το API είναι η πραγματική διεπαφή χρήστη Kubernetes, μέσω της οποίας ελέγχεται πλήρως. Αυτό σημαίνει ότι κάθε λειτουργία Kubernetes εκτίθεται ως τελικό σημείο API και μπορεί να γίνει με αίτημα HTTP σε αυτό το τελικό σημείο.

Επομένως, η κύρια δουλειά του kubectl είναι να κάνει αιτήματα HTTP στο Kubernetes API:

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Το Kubernetes είναι ένα πλήρως προσανατολισμένο στους πόρους σύστημα. Αυτό σημαίνει ότι διατηρεί την εσωτερική κατάσταση των πόρων και όλες οι λειτουργίες του Kubernetes είναι λειτουργίες CRUD.

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

Ας δούμε ένα παράδειγμα.

Ας υποθέσουμε ότι θέλετε να δημιουργήσετε έναν πόρο ReplicaSet. Για να το κάνετε αυτό, περιγράφετε το ReplicaSet σε ένα αρχείο με το όνομα replicaset.yaml, μετά εκτελέστε την εντολή:

$ kubectl create -f replicaset.yaml

Αυτό θα δημιουργήσει έναν πόρο ReplicaSet. Τι συμβαίνει όμως στα παρασκήνια;

Το Kubernetes έχει μια λειτουργία δημιουργίας ReplicaSet. Όπως κάθε άλλη λειτουργία, εκτίθεται ως τελικό σημείο API. Το συγκεκριμένο τελικό σημείο API για αυτήν τη λειτουργία μοιάζει με αυτό:

POST /apis/apps/v1/namespaces/{namespace}/replicasets

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

Ως εκ τούτου, όταν εκτελείτε την παραπάνω εντολή, το kubectl στέλνει ένα αίτημα HTTP POST στο παραπάνω τελικό σημείο API. Ο ορισμός ReplicaSet που παρείχατε στο αρχείο replicaset.yaml, αποστέλλεται στο σώμα του αιτήματος.

Έτσι λειτουργεί το kubectl για όλες τις εντολές που αλληλεπιδρούν με το σύμπλεγμα Kubernetes. Σε όλες αυτές τις περιπτώσεις, το kubectl κάνει απλώς αιτήματα HTTP στα κατάλληλα τελικά σημεία του Kubernetes API.

Λάβετε υπόψη ότι μπορείτε να διαχειριστείτε πλήρως το Kubernetes χρησιμοποιώντας ένα βοηθητικό πρόγραμμα όπως curlμε μη αυτόματη αποστολή αιτημάτων HTTP στο Kubernetes API. Το Kubectl απλώς διευκολύνει τη χρήση του Kubernetes API.

Αυτά είναι τα βασικά του τι είναι το kubectl και πώς λειτουργεί. Αλλά υπάρχει κάτι άλλο σχετικά με το Kubernetes API που κάθε χρήστης του kubectl πρέπει να γνωρίζει. Ας ρίξουμε μια γρήγορη ματιά στον εσωτερικό κόσμο του Kubernetes.

Ο εσωτερικός κόσμος του Kubernetes

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

Εδώ είναι τα πιο σημαντικά στοιχεία στους κύριους κόμβους:

  1. αποθήκη - αποθηκεύει ορισμούς πόρων (συνήθως είναι κ.λπ).
  2. Διακομιστής API — παρέχει ένα API και διαχειρίζεται τον χώρο αποθήκευσης.
  3. Υπεύθυνος Ελεγκτή — Διασφαλίζει ότι οι καταστάσεις πόρων συμμορφώνονται με τις προδιαγραφές.
  4. Προγραμματιστής — προγραμματίζει τα pod σε κόμβους εργαζομένων.

Και εδώ είναι ένα πιο σημαντικό στοιχείο στους κόμβους εργαζομένων:

  1. Κούμπελετ — διαχειρίζεται την εκκίνηση κοντέινερ στον κόμβο εργασίας.

Για να κατανοήσουμε πώς συνεργάζονται αυτά τα στοιχεία, ας δούμε ένα παράδειγμα.

Ας υποθέσουμε ότι μόλις ολοκληρώσατε kubectl create -f replicaset.yaml, μετά την οποία η kubectl έκανε ένα αίτημα HTTP POST σε Τελικό σημείο API ReplicaSet (περνώντας τον ορισμό πόρων ReplicaSet).

Τι συμβαίνει στο σύμπλεγμα;

  1. Αφού κάνει kubectl create -f replicaset.yaml Ο διακομιστής API αποθηκεύει τον ορισμό του πόρου ReplicaSet στον αποθηκευτικό χώρο:

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

  2. Στη συνέχεια, εκκινείται ο ελεγκτής ReplicaSet στον διαχειριστή ελεγκτών, ο οποίος χειρίζεται τη δημιουργία, την τροποποίηση και τη διαγραφή των πόρων του ReplicaSet:

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

  3. Ο ελεγκτής ReplicaSet δημιουργεί έναν ορισμό pod για κάθε αντίγραφο του ReplicaSet (σύμφωνα με το πρότυπο pod στον ορισμό του ReplicaSet) και τα αποθηκεύει στον αποθηκευτικό χώρο:

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

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

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

  5. Ο προγραμματιστής επιλέγει έναν κατάλληλο κόμβο εργασίας για κάθε ομάδα και προσθέτει αυτές τις πληροφορίες στον ορισμό της ομάδας αποθήκευσης:

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

  6. Στον κόμβο εργάτη στον οποίο έχει εκχωρηθεί το pod, εκκινείται το Kubelet, παρακολουθεί τα pods που έχουν εκχωρηθεί σε αυτόν τον κόμβο:

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

  7. Το Kubelet διαβάζει τον ορισμό του pod από την αποθήκευση και δίνει εντολή σε έναν χρόνο εκτέλεσης κοντέινερ, όπως το Docker, να εκκινήσει κοντέινερ στον κόμβο:

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

Παρακάτω είναι μια έκδοση κειμένου αυτής της περιγραφής.

Το αίτημα API προς το τελικό σημείο δημιουργίας ReplicaSet υποβάλλεται σε επεξεργασία από τον διακομιστή API. Ο διακομιστής API ελέγχει την ταυτότητα του αιτήματος και αποθηκεύει τον ορισμό πόρων ReplicaSet στον χώρο αποθήκευσης.

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

Η δουλειά του ελεγκτή ReplicaSet είναι να διασφαλίσει ότι υπάρχει ο απαιτούμενος αριθμός λοβών ReplicaSet. Στο παράδειγμά μας, δεν υπάρχουν ακόμα pods, επομένως ο ελεγκτής ReplicaSet δημιουργεί αυτούς τους ορισμούς pod (σύμφωνα με το πρότυπο pod στον ορισμό του ReplicaSet) και τους αποθηκεύει στο χώρο αποθήκευσης.

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

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

Το τελευταίο συμβάν ενεργοποιεί τα Kubelets, τα οποία παρακολουθούν τα pods που έχουν προγραμματιστεί για τους κόμβους εργασίας τους. Το Kubelet του κόμβου εργαζομένου στον οποίο είναι εγκατεστημένα τα pod ReplicaSet πρέπει να δίνει εντολή στον χρόνο εκτέλεσης του κοντέινερ, όπως το Docker, να κατεβάσει τις απαιτούμενες εικόνες κοντέινερ και να τις εκτελέσει.

Σε αυτό το σημείο, η εφαρμογή ReplicaSet τρέχει επιτέλους!

Ο ρόλος του Kubernetes API

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

Φυσικά, αυτά τα στοιχεία δεν αλληλεπιδρούν απευθείας με το χώρο αποθήκευσης, αλλά μόνο μέσω του Kubernetes API.

Εξετάστε τα ακόλουθα παραδείγματα:

  1. Ο ελεγκτής ReplicaSet χρησιμοποιεί το τελικό σημείο API λίστα ReplicaSets με παράμετρο watch για την παρακολούθηση αλλαγών στους πόρους του ReplicaSet.
  2. Ο ελεγκτής ReplicaSet χρησιμοποιεί το τελικό σημείο API δημιουργία Pod (δημιουργία λοβού) για δημιουργία λοβών.
  3. Το Scheduler χρησιμοποιεί τελικό σημείο API patch pod (επεξεργασία pod) για να ενημερώσετε τα pods με πληροφορίες σχετικά με τον επιλεγμένο κόμβο εργασίας.

Όπως μπορείτε να δείτε, αυτό είναι το ίδιο API στο οποίο έχει πρόσβαση το kubectl. Η χρήση του ίδιου API για εσωτερικά στοιχεία και εξωτερικούς χρήστες είναι μια θεμελιώδης ιδέα στον σχεδιασμό του Kubernetes.

Τώρα μπορούμε να συνοψίσουμε πώς λειτουργεί το Kubernetes:

  1. Τα καταστήματα αποθήκευσης αναφέρουν, δηλαδή, πόρους Kubernetes.
  2. Ο διακομιστής API παρέχει μια διεπαφή στο χώρο αποθήκευσης με τη μορφή του Kubernetes API.
  3. Όλα τα άλλα στοιχεία και οι χρήστες του Kubernetes διαβάζουν, παρατηρούν και χειρίζονται την κατάσταση (πόρους) του Kubernetes μέσω του API.

Η γνώση αυτών των εννοιών θα σας βοηθήσει να κατανοήσετε καλύτερα το kubectl και να αξιοποιήσετε στο έπακρο.

Τώρα ας δούμε μερικές συγκεκριμένες συμβουλές και κόλπα που θα σας βοηθήσουν να βελτιώσετε την παραγωγικότητά σας με το kubectl.

1. Επιταχύνετε την εισαγωγή χρησιμοποιώντας την ολοκλήρωση εντολών

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

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

Δείτε πώς λειτουργεί η ολοκλήρωση εντολών kubectl:

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Η ολοκλήρωση εντολών λειτουργεί για κελύφη Bash και Zsh.

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

Πώς λειτουργεί η ολοκλήρωση εντολών

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

Το Kubectl δημιουργεί αυτόματα και εξάγει σενάρια επέκτασης για Bash και Zsh χρησιμοποιώντας τις ακόλουθες εντολές:

$ kubectl completion bash

Ή:

$ kubectl completion zsh

Θεωρητικά, αρκεί να συνδέσετε την έξοδο αυτών των εντολών στο κατάλληλο κέλυφος εντολών, ώστε το kubectl να μπορεί να συμπληρώσει τις εντολές.

Στην πράξη, η μέθοδος σύνδεσης είναι διαφορετική για το Bash (συμπεριλαμβανομένων των διαφορών μεταξύ Linux και MacOS) και Zsh. Παρακάτω θα δούμε όλες αυτές τις επιλογές.

Bash στο Linux

Το σενάριο ολοκλήρωσης του Bash εξαρτάται από το πακέτο ολοκλήρωσης του bash, επομένως πρέπει να το εγκαταστήσετε πρώτα:

$ sudo apt-get install bash-completion

Ή:

$ yum install bash-completion

Μπορείτε να ελέγξετε ότι το πακέτο έχει εγκατασταθεί με επιτυχία χρησιμοποιώντας την ακόλουθη εντολή:

$ type _init_completion

Εάν αυτό εξάγει τον κωδικό λειτουργίας του κελύφους, τότε το bash-completion έχει εγκατασταθεί σωστά. Εάν η εντολή δίνει ένα σφάλμα "Δεν βρέθηκε", πρέπει να προσθέσετε την ακόλουθη γραμμή στο αρχείο σας ~ / .bashrc:

$ source /usr/share/bash-completion/bash_completion

Είναι απαραίτητο να προσθέσετε αυτή τη γραμμή στο αρχείο ~ / .bashrc ή όχι εξαρτάται από τον διαχειριστή πακέτων που χρησιμοποιήσατε για την εγκατάσταση του bash-completion. Αυτό είναι απαραίτητο για το APT, αλλά όχι για το YUM.

Μετά την εγκατάσταση του bash-completion, πρέπει να ρυθμίσετε τα πάντα έτσι ώστε το σενάριο ολοκλήρωσης του kubectl να είναι ενεργοποιημένο σε όλες τις περιόδους λειτουργίας του φλοιού.

Ένας τρόπος για να γίνει αυτό είναι να προσθέσετε την ακόλουθη γραμμή στο αρχείο ~ / .bashrc:

source <(kubectl completion bash)

Ένας άλλος τρόπος είναι να προσθέσετε το σενάριο επέκτασης kubectl στον κατάλογο /etc/bash_completion.d (δημιουργήστε το αν δεν υπάρχει):

$ kubectl completion bash >/etc/bash_completion.d/kubectl

Όλα τα πρόσθετα σενάρια στον κατάλογο /etc/bash_completion.d περιλαμβάνονται αυτόματα στο bash-completion.

Και οι δύο επιλογές ισχύουν εξίσου.

Μετά την επανεκκίνηση του κελύφους, η ολοκλήρωση της εντολής kubectl θα λειτουργήσει.

Bash στο MacOS

Στο MacOS η ρύθμιση είναι λίγο πιο περίπλοκη. Το γεγονός είναι ότι από προεπιλογή, το MacOS χρησιμοποιεί την έκδοση Bash 3.2 και το σενάριο αυτόματης συμπλήρωσης kubectl απαιτεί έκδοση Bash τουλάχιστον 4.1 και δεν λειτουργεί στο Bash 3.2.

Υπάρχουν ζητήματα αδειοδότησης που σχετίζονται με τη χρήση μιας παλιάς έκδοσης του Bash στο MacOS. Η έκδοση 4 του Bash έχει άδεια χρήσης σύμφωνα με το GPLv3, το οποίο δεν υποστηρίζεται από την Apple.

Για να διαμορφώσετε την αυτόματη συμπλήρωση kubectl στο MacOS, πρέπει να εγκαταστήσετε μια πιο πρόσφατη έκδοση του Bash. Μπορείτε επίσης να ορίσετε το ενημερωμένο Bash ως προεπιλεγμένο κέλυφος, το οποίο θα σας εξοικονομήσει πολλά προβλήματα στο μέλλον. Δεν είναι δύσκολο, λεπτομέρειες δίνονται στο άρθρο "Ενημέρωση του Bash σε MacOS».

Πριν συνεχίσετε, βεβαιωθείτε ότι χρησιμοποιείτε μια πρόσφατη έκδοση του Bash (ελέγξτε την έξοδο bash --version).

Το σενάριο ολοκλήρωσης Bash διαφέρει ανάλογα με το έργο bash-ολοκλήρωση, επομένως πρέπει πρώτα να το εγκαταστήσετε.

Μπορείτε να εγκαταστήσετε το bash-completion χρησιμοποιώντας Homebrew:

$ brew install bash-completion@2

Εδώ @2 σημαίνει bash-completion έκδοση 2. Η αυτόματη συμπλήρωση kubectl απαιτεί bash-completion v2 και η bash-completion v2 απαιτεί ελάχιστη έκδοση Bash 4.1.

Έξοδος εντολών brew-install περιέχει μια ενότητα Προειδοποιήσεις, η οποία καθορίζει τι πρέπει να προστεθεί στο αρχείο ~/.bash_profile:

export BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . 
"/usr/local/etc/profile.d/bash_completion.sh"

Ωστόσο, συνιστώ να μην προσθέσετε αυτές τις γραμμές σε ~/.bash_profile, ενώ στο ~/.bashrc. Σε αυτήν την περίπτωση, η αυτόματη συμπλήρωση θα είναι διαθέσιμη όχι μόνο στα κύρια, αλλά και στα θυγατρικά κελύφη εντολών.

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

$ type _init_completion

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

Τώρα πρέπει να διασφαλίσουμε ότι η αυτόματη συμπλήρωση kubectl είναι ενεργοποιημένη σε όλες τις περιόδους λειτουργίας.

Ένας τρόπος είναι να προσθέσετε την ακόλουθη γραμμή στη δική σας ~/.bashrc:

source <(kubectl completion bash)

Ο δεύτερος τρόπος είναι να προσθέσετε ένα σενάριο αυτόματης συμπλήρωσης στο φάκελο /usr/local/etc/bash_completion.d:

$ kubectl completion bash
>/usr/local/etc/bash_completion.d/kubectl

Αυτή η μέθοδος θα λειτουργήσει μόνο εάν εγκαταστήσατε το bash-completion χρησιμοποιώντας το Homebrew. Σε αυτήν την περίπτωση, το bash-completion φορτώνει όλα τα σενάρια από αυτόν τον κατάλογο.

Εάν έχετε εγκαταστήσει kubectl χρησιμοποιώντας το Homebrew, τότε δεν χρειάζεται να εκτελέσετε το προηγούμενο βήμα, καθώς το σενάριο αυτόματης συμπλήρωσης θα τοποθετηθεί αυτόματα στον φάκελο /usr/local/etc/bash_completion.d κατά την εγκατάσταση. Σε αυτήν την περίπτωση, η αυτόματη συμπλήρωση kubectl θα αρχίσει να λειτουργεί αμέσως μόλις εγκαταστήσετε το bash-completion.

Ως αποτέλεσμα, όλες αυτές οι επιλογές είναι ισοδύναμες.

Zsh

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

Μπορείτε να το κάνετε αυτό προσθέτοντας μια γραμμή στο δικό σας ~/.zshrc αρχείο:

source <(kubectl completion zsh)

Εάν λάβετε ένα σφάλμα not found: compdef μετά την επανεκκίνηση του κελύφους σας, πρέπει να ενεργοποιήσετε την ενσωματωμένη λειτουργία compdef. Μπορείτε να το ενεργοποιήσετε προσθέτοντάς το στην αρχή του αρχείου σας ~/.zshrc τα ακόλουθα:

autoload -Uz compinit
compinit

2. Γρήγορη προβολή προδιαγραφών πόρων

Όταν δημιουργείτε ορισμούς πόρων YAML, πρέπει να γνωρίζετε τα πεδία και τη σημασία τους για αυτούς τους πόρους. Ένα μέρος για να αναζητήσετε αυτές τις πληροφορίες είναι η αναφορά API, η οποία περιέχει πλήρεις προδιαγραφές για όλους τους πόρους.

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

Η μορφή της εντολής είναι η εξής:

$ kubectl explain resource[.field]...

Η εντολή θα δώσει την προδιαγραφή του ζητούμενου πόρου ή πεδίου. Οι πληροφορίες που εμφανίζονται είναι πανομοιότυπες με αυτές που περιέχονται στο εγχειρίδιο API.

Από προεπιλογή kubectl explain δείχνει μόνο το πρώτο επίπεδο ένθεσης πεδίων.

Δείτε πώς φαίνεται Στη συνέχεια, μπορείτε.

Μπορείτε να εμφανίσετε ολόκληρο το δέντρο εάν προσθέσετε την επιλογή --recursive:

$ kubectl explain deployment.spec --recursive

Εάν δεν γνωρίζετε ακριβώς ποιοι πόροι χρειάζονται, μπορείτε να τους εμφανίσετε όλους με την ακόλουθη εντολή:

$ kubectl api-resources

Αυτή η εντολή εμφανίζει ονόματα πόρων σε πληθυντική μορφή, π.χ. deployments αντί για deployment. Εμφανίζει επίσης το σύντομο όνομα, για παράδειγμα deploy, για τους πόρους που το έχουν. Μην ανησυχείτε για αυτές τις διαφορές. Όλες αυτές οι επιλογές ονομασίας είναι ισοδύναμες για το kubectl. Δηλαδή, μπορείτε να χρησιμοποιήσετε οποιοδήποτε από αυτά για kubectl explain.

Όλες οι παρακάτω εντολές είναι ισοδύναμες:

$ kubectl explain deployments.spec
# или
$ kubectl explain deployment.spec
# или        
$ kubectl explain deploy.spec

3. Χρησιμοποιήστε μια προσαρμοσμένη μορφή εξόδου στήλης

Προεπιλεγμένη μορφή εξόδου εντολής kubectl get:

$ kubectl get pods
NAME                     READY    STATUS    RESTARTS  AGE
engine-544b6b6467-22qr6   1/1     Running     0       78d
engine-544b6b6467-lw5t8   1/1     Running     0       78d
engine-544b6b6467-tvgmg   1/1     Running     0       78d
web-ui-6db964458-8pdw4    1/1     Running     0       78d

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

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

Η χρήση μιας προσαρμοσμένης μορφής καθορίζεται χρησιμοποιώντας τις επιλογές:

-o custom-columns=<header>:<jsonpath>[,<header>:<jsonpath>]...

Μπορείτε να ορίσετε κάθε στήλη εξόδου ως ζεύγος <header>:<jsonpath>Όπου <header> είναι το όνομα της στήλης και <jsonpath> — μια έκφραση που ορίζει ένα πεδίο πόρου.

Ας δούμε ένα απλό παράδειγμα:

$ kubectl get pods -o custom-columns='NAME:metadata.name'

NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4

Η έξοδος περιέχει μία στήλη με τα ονόματα των λοβών.

Η έκφραση επιλογής επιλέγει τα ονόματα λοβών από το πεδίο metadata.name. Αυτό συμβαίνει επειδή το όνομα του λοβού ορίζεται στο πεδίο ονόματος παιδιού metadata στην περιγραφή του πόρου του pod. Περισσότερες λεπτομέρειες μπορείτε να βρείτε στο Οδηγός API ή πληκτρολογήστε την εντολή kubectl explain pod.metadata.name.

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

$ kubectl get pods 
  -o custom-columns='NAME:metadata.name,NODE:spec.nodeName'

NAME                       NODE
engine-544b6b6467-22qr6    ip-10-0-80-67.ec2.internal
engine-544b6b6467-lw5t8    ip-10-0-36-80.ec2.internal
engine-544b6b6467-tvgmg    ip-10-0-118-34.ec2.internal
web-ui-6db964458-8pdw4     ip-10-0-118-34.ec2.internal

Η έκφραση επιλέγει το όνομα του κόμβου από spec.nodeName — όταν ένα pod εκχωρείται σε έναν κόμβο, το όνομά του γράφεται στο πεδίο spec.nodeName προδιαγραφή πόρων pod. Περισσότερες λεπτομερείς πληροφορίες μπορείτε να βρείτε στην έξοδο kubectl explain pod.spec.nodeName.

Λάβετε υπόψη ότι τα πεδία πόρων Kubernetes κάνουν διάκριση πεζών-κεφαλαίων.

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

Αλλά πρώτα, ας ρίξουμε μια πιο προσεκτική ματιά στις εκφράσεις επιλογής πεδίων.

Εκφράσεις JSONPath

Οι εκφράσεις για την επιλογή πεδίων πόρων βασίζονται σε JSONPath.

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

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

# Выбрать все элементы списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[*].image'
# Выбрать специфический элемент списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[0].image'
# Выбрать элементы списка, попадающие под фильтр
$ kubectl get pods -o custom-columns='DATA:spec.containers[?(@.image!="nginx")].image'
# Выбрать все поля по указанному пути, независимо от их имени
$ kubectl get pods -o custom-columns='DATA:metadata.*'
# Выбрать все поля с указанным именем, вне зависимости от их расположения
$ kubectl get pods -o custom-columns='DATA:..image'

Ο χειριστής [] είναι ιδιαίτερα σημαντικός. Πολλά πεδία πόρων Kubernetes είναι λίστες και αυτός ο τελεστής σάς επιτρέπει να επιλέξετε μέλη αυτών των λιστών. Συχνά χρησιμοποιείται με χαρακτήρες μπαλαντέρ όπως [*] για την επιλογή όλων των στοιχείων μιας λίστας.

Παραδείγματα εφαρμογής

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

  1. Εμφάνιση εικόνων κοντέινερ για pods:
    $ kubectl get pods 
      -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
    
    NAME                        IMAGES
    engine-544b6b6467-22qr6     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-lw5t8     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-tvgmg     rabbitmq:3.7.8-management,nginx
    web-ui-6db964458-8pdw4      wordpress

    Αυτή η εντολή εμφανίζει τα ονόματα εικόνων κοντέινερ για κάθε ομάδα.

    Θυμηθείτε ότι ένα pod μπορεί να περιέχει πολλά κοντέινερ, τότε τα ονόματα των εικόνων θα εμφανίζονται σε μία γραμμή, χωρισμένα με κόμματα.

  2. Εμφάνιση ζωνών διαθεσιμότητας κόμβων:
    $ kubectl get nodes 
      -o 
    custom-columns='NAME:metadata.name,ZONE:metadata.labels.failure-domain.beta.kubernetes.io/zone'
    
    NAME                          ZONE
    ip-10-0-118-34.ec2.internal   us-east-1b
    ip-10-0-36-80.ec2.internal    us-east-1a
    ip-10-0-80-67.ec2.internal    us-east-1b

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

    Η ζώνη διαθεσιμότητας είναι μια έννοια cloud που περιορίζει τη ζώνη αναπαραγωγής σε μια γεωγραφική περιοχή.

    Οι ζώνες διαθεσιμότητας για κάθε κόμβο λαμβάνονται μέσω ειδικής ετικέτας - failure-domain.beta.kubernetes.io/zone. Εάν το σύμπλεγμα εκτελείται σε δημόσιο σύννεφο, αυτή η ετικέτα δημιουργείται αυτόματα και συμπληρώνεται με τα ονόματα των ζωνών διαθεσιμότητας για κάθε κόμβο.

    Οι ετικέτες δεν αποτελούν μέρος της προδιαγραφής πόρων Kubernetes, επομένως δεν θα βρείτε πληροφορίες σχετικά με αυτές Οδηγός API. Ωστόσο, μπορούν να φανούν (όπως και οποιεσδήποτε άλλες ετικέτες) εάν ζητήσετε πληροφορίες σχετικά με τους κόμβους σε μορφή YAML ή JSON:

    $ kubectl get nodes -o yaml
    # или
    $ kubectl get nodes -o json

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

4. Κάντε εύκολη εναλλαγή μεταξύ συμπλεγμάτων και χώρων ονομάτων

Όταν το kubectl κάνει ένα αίτημα στο Kubernetes API, διαβάζει πρώτα το αρχείο kubeconfig για να λάβει όλες τις απαραίτητες παραμέτρους για τη σύνδεση.

Από προεπιλογή το αρχείο kubeconfig είναι ~/.kube/config. Συνήθως αυτό το αρχείο δημιουργείται ή ενημερώνεται με μια ειδική εντολή.

Όταν εργάζεστε με πολλά συμπλέγματα, το αρχείο kubeconfig περιέχει ρυθμίσεις για τη σύνδεση σε όλα αυτά τα συμπλέγματα. Χρειάζεστε έναν τρόπο για να πείτε στην εντολή kubectl με ποιο σύμπλεγμα εργάζεστε.

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

Σε αυτό το κεφάλαιο θα εξηγήσουμε πώς λειτουργεί και πώς να το κάνουμε να λειτουργεί αποτελεσματικά.

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

αρχεία kubeconfig

Ας δούμε τι ακριβώς περιέχει το αρχείο kubeconfig:

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Όπως μπορείτε να δείτε, το αρχείο kubeconfig περιέχει ένα σύνολο πλαισίων. Το πλαίσιο αποτελείται από τρία στοιχεία:

  • Cluster — URL API του διακομιστή συμπλέγματος.
  • Διαπιστευτήρια ελέγχου ταυτότητας χρήστη - χρήστη στο σύμπλεγμα.
  • Χώρος ονομάτων - ο χώρος ονομάτων που χρησιμοποιείται κατά την ένταξη στο σύμπλεγμα.

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

Σε κάθε δεδομένη στιγμή, ένα από τα πλαίσια είναι επίκαιρο:

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Όταν το kubectl διαβάζει ένα αρχείο διαμόρφωσης, παίρνει πάντα πληροφορίες από το τρέχον περιβάλλον. Στο παραπάνω παράδειγμα, το kubectl θα συνδεθεί με το σύμπλεγμα Hare.

Αντίστοιχα, για να μεταβείτε σε άλλο σύμπλεγμα, πρέπει να αλλάξετε το τρέχον περιβάλλον στο αρχείο kubeconfig:

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

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

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Στο παραπάνω παράδειγμα, το kubectl θα χρησιμοποιήσει τον χώρο ονομάτων Prod του συμπλέγματος Fox (προηγουμένως είχε οριστεί ο χώρος ονομάτων δοκιμής).

Σημειώστε ότι το kubectl παρέχει επίσης επιλογές --cluster, --user, --namespace и --context, που σας επιτρέπουν να αντικαταστήσετε μεμονωμένα στοιχεία και το ίδιο το τρέχον περιβάλλον, ανεξάρτητα από το τι έχει οριστεί στο kubeconfig. Κοίτα kubectl options.

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

Χρησιμοποιήστε kubectx

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

Το βοηθητικό πρόγραμμα παρέχει εντολές kubectx и kubens για να αλλάξετε το τρέχον περιβάλλον και τον χώρο ονομάτων αντίστοιχα.

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

Ακολουθεί ένα παράδειγμα εκτέλεσης αυτών των εντολών:

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Ουσιαστικά, αυτές οι εντολές απλώς επεξεργάζονται το αρχείο kubeconfig όπως περιγράφεται παραπάνω.

για εγκατάσταση kubectx, ακολουθήστε τις οδηγίες στο Github.

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

Ένα άλλο χρήσιμο χαρακτηριστικό kubectx είναι διαδραστική λειτουργία. Λειτουργεί σε συνδυασμό με το βοηθητικό πρόγραμμα fzf, το οποίο πρέπει να εγκατασταθεί ξεχωριστά. Η εγκατάσταση του fzf καθιστά αυτόματα διαθέσιμη τη διαδραστική λειτουργία kubectx. Διαδραστικά, μπορείτε να επιλέξετε περιβάλλον και χώρο ονομάτων μέσω της διαδραστικής δωρεάν διεπαφής αναζήτησης που παρέχεται από το fzf.

Χρησιμοποιώντας ψευδώνυμα φλοιού

Δεν χρειάζεστε ξεχωριστά εργαλεία για να αλλάξετε το τρέχον περιβάλλον και τον χώρο ονομάτων επειδή το kubectl παρέχει επίσης εντολές για αυτό. Ναι, ομάδα kubectl config παρέχει υποεντολές για την επεξεργασία αρχείων kubeconfig.

Εδώ είναι μερικά από αυτά:

  • kubectl config get-contexts: εμφάνιση όλων των πλαισίων.
  • kubectl config current-context: λήψη του τρέχοντος πλαισίου.
  • kubectl config use-context: αλλαγή του τρέχοντος πλαισίου.
  • kubectl config set-context: Αλλάξτε το στοιχείο περιβάλλοντος.

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

Δημιούργησα ένα σύνολο ψευδωνύμων με βάση αυτές τις εντολές που παρέχουν λειτουργικότητα παρόμοια με το kubectx. Εδώ μπορείτε να τα δείτε σε δράση:

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Σημειώστε ότι τα ψευδώνυμα χρησιμοποιούν το fzf για να παρέχουν μια διαδραστική δωρεάν διεπαφή αναζήτησης (όπως η διαδραστική λειτουργία του kubectx). Αυτό σημαίνει ότι χρειάζεστε εγκαταστήστε το fzfγια να χρησιμοποιήσετε αυτά τα ψευδώνυμα.

Ακολουθούν οι ορισμοί των ίδιων των ψευδωνύμων:

# Получить текущий контекст
alias krc='kubectl config current-context'
# Список всех контекстов
alias klc='kubectl config get-contexts -o name | sed "s/^/  /;|^  $(krc)$|s/ /*/"'
# Изменить текущий контекст
alias kcc='kubectl config use-context "$(klc | fzf -e | sed "s/^..//")"'

# Получить текущее пространство имен
alias krn='kubectl config get-contexts --no-headers "$(krc)" | awk "{print $5}" | sed "s/^$/default/"'
# Список всех пространств имен
alias kln='kubectl get -o name ns | sed "s|^.*/|  |;|^  $(krn)$|s/ /*/"'
# Изменить текущее пространство имен
alias kcn='kubectl config set-context --current --namespace "$(kln | fzf -e | sed "s/^..//")"'

Για να ορίσετε αυτά τα ψευδώνυμα, πρέπει να προσθέσετε τους παραπάνω ορισμούς στο αρχείο σας ~/.bashrc ή ~/.zshrc και επανεκκινήστε το κέλυφός σας.

Χρήση πρόσθετων

Το Kubectl σάς επιτρέπει να φορτώνετε πρόσθετα που εκτελούνται με τον ίδιο τρόπο όπως οι βασικές εντολές. Μπορείτε, για παράδειγμα, να εγκαταστήσετε το πρόσθετο kubectl-foo και να το εκτελέσετε εκτελώντας την εντολή kubectl foo.

Θα ήταν βολικό να αλλάξετε το περιβάλλον και τον χώρο ονομάτων με αυτόν τον τρόπο, για παράδειγμα εκτελώντας kubectl ctx να αλλάξει το πλαίσιο και kubectl ns για να αλλάξετε τον χώρο ονομάτων.

Έχω γράψει δύο πρόσθετα που κάνουν αυτό:

Η εργασία των προσθηκών βασίζεται σε ψευδώνυμα από την προηγούμενη ενότητα.

Δείτε πώς λειτουργούν:

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Σημειώστε ότι τα πρόσθετα χρησιμοποιούν το fzf για να παρέχουν μια διαδραστική δωρεάν διεπαφή αναζήτησης (όπως η διαδραστική λειτουργία του kubectx). Αυτό σημαίνει ότι χρειάζεστε εγκαταστήστε το fzfγια να χρησιμοποιήσετε αυτά τα ψευδώνυμα.

Για να εγκαταστήσετε πρόσθετα, πρέπει να κατεβάσετε σενάρια φλοιού με όνομα kubectl-ctx и kubectl-ns σε οποιονδήποτε κατάλογο στη μεταβλητή PATH σας και κάντε τον εκτελέσιμο με π.χ. chmod +x. Αμέσως μετά από αυτό θα μπορείτε να χρησιμοποιήσετε kubectl ctx и kubectl ns.

5. Μειώστε την είσοδο με αυτόματες ονομασίες

Τα ψευδώνυμα Shell είναι ένας καλός τρόπος για να επιταχύνετε την εισαγωγή. Εργο kubectl-ψευδώνυμα περιέχει περίπου 800 συντομεύσεις για βασικές εντολές kubectl.

Ίσως αναρωτιέστε - πώς θυμάστε 800 ψευδώνυμα; Αλλά δεν χρειάζεται να τα θυμάστε όλα, γιατί είναι κατασκευασμένα σύμφωνα με ένα απλό σχήμα, το οποίο δίνεται παρακάτω:

Πώς να χρησιμοποιήσετε το kubectl πιο αποτελεσματικά: ένας λεπτομερής οδηγός
Για παράδειγμα:

  1. kgpooyaml - kubectl πάρτε λοβό oyaml
  2. ksysgsvcw — kubectl -n kube-σύστημα λήψη svc w
  3. ksysrmcm -kubectl -n kube-σύστημα rm cm
  4. kgdepallsl - kubectl λάβετε την ανάπτυξη όλων των sl

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

Το τρέχον αναλυτικό διάγραμμα βρίσκεται στο GitHub. Εκεί μπορείτε επίσης να βρείτε πλήρης λίστα με ψευδώνυμα.

Για παράδειγμα, το ψευδώνυμο kgpooyamlall είναι ισοδύναμο με την εντολή kubectl get pods -o yaml --all-namespaces.

Η σχετική σειρά των επιλογών δεν είναι σημαντική: εντολή kgpooyamlall ισοδυναμεί με την εντολή kgpoalloyaml.

Δεν χρειάζεται να χρησιμοποιείτε όλα τα στοιχεία ως ψευδώνυμα. Για παράδειγμα k, kg, klo, ksys, kgpo μπορεί επίσης να χρησιμοποιηθεί. Επιπλέον, μπορείτε να συνδυάσετε ψευδώνυμα και κανονικές εντολές ή επιλογές στη γραμμή εντολών:

Για παράδειγμα:

  1. Αντί για kubectl proxy μπορείς να γράψεις k proxy.
  2. Αντί για kubectl get roles μπορείς να γράψεις kg roles (προς το παρόν δεν υπάρχει ψευδώνυμο για τον πόρο Roles).
  3. Για να λάβετε δεδομένα για ένα συγκεκριμένο pod, μπορείτε να χρησιμοποιήσετε την εντολή kgpo my-pod — kubectl get pod my-pod.

Λάβετε υπόψη ότι ορισμένα ψευδώνυμα απαιτούν όρισμα γραμμής εντολών. Για παράδειγμα, ψευδώνυμο kgpol μέσα kubectl get pods -l. Επιλογή -l απαιτεί ένα όρισμα - μια προδιαγραφή ετικέτας. Εάν χρησιμοποιείτε ψευδώνυμο, θα μοιάζει kgpol app=ui.

Επειδή ορισμένα ψευδώνυμα απαιτούν ορίσματα, τα ψευδώνυμα a, f και l πρέπει να χρησιμοποιούνται τελευταία.

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

Εγκατάσταση

Για να εγκαταστήσετε το kubectl-aliases, πρέπει να κάνετε λήψη του αρχείου .kubectl_aliases από το GitHub και συμπεριλάβετέ το στο αρχείο ~/.bashrc ή ~/.zshrc:

source ~/.kubectl_aliases

Αυτόματη συμπλήρωση

Όπως είπαμε προηγουμένως, συχνά προσθέτετε πρόσθετες λέξεις σε ένα ψευδώνυμο στη γραμμή εντολών. Για παράδειγμα:

$ kgpooyaml test-pod-d4b77b989

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

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

Η απάντηση εξαρτάται από το κέλυφος που χρησιμοποιείτε:

  1. Για το Zsh, η ολοκλήρωση του ψευδωνύμου λειτουργεί εκτός πλαισίου.
  2. Για το Bash, δυστυχώς, απαιτείται κάποια εργασία για να λειτουργήσει η αυτόματη συμπλήρωση.

Ενεργοποίηση αυτόματης συμπλήρωσης για ψευδώνυμα στο Bash

Το πρόβλημα με το Bash είναι ότι προσπαθεί να ολοκληρώσει (κάθε φορά που πατάτε Tab) το ψευδώνυμο, όχι την εντολή στην οποία αναφέρεται το ψευδώνυμο (όπως κάνει για παράδειγμα το Zsh). Εφόσον δεν έχετε σενάρια ολοκλήρωσης και για τα 800 ψευδώνυμα, η αυτόματη συμπλήρωση δεν λειτουργεί.

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

Στη συνέχεια, θα εξηγήσω πρώτα πώς να εγκαταστήσετε το πλήρες ψευδώνυμο και στη συνέχεια πώς να το ρυθμίσετε ώστε να ενεργοποιείται η ολοκλήρωση για όλα τα ψευδώνυμα kubectl.

Εγκατάσταση πλήρους ψευδωνύμου

Πρώτα απ 'όλα, το πλήρες ψευδώνυμο εξαρτάται από bash-ολοκλήρωση. Επομένως, πριν εγκαταστήσετε το πλήρες ψευδώνυμο, πρέπει να βεβαιωθείτε ότι έχει εγκατασταθεί το bash-completion. Οδηγίες εγκατάστασης έχουν δοθεί προηγουμένως για Linux και MacOS.

Σημαντική σημείωση για χρήστες MacOS: Όπως το σενάριο αυτόματης συμπλήρωσης kubectl, το πλήρες ψευδώνυμο δεν λειτουργεί με το Bash 3.2, το οποίο είναι η προεπιλογή στο MacOS. Συγκεκριμένα, το πλήρες ψευδώνυμο εξαρτάται από το bash-completion v2 (brew install bash-completion@2), το οποίο απαιτεί τουλάχιστον Bash 4.1. Αυτό σημαίνει ότι για να χρησιμοποιήσετε πλήρες ψευδώνυμο στο MacOS πρέπει να εγκαταστήσετε μια νεότερη έκδοση του Bash.

Πρέπει να κατεβάσετε το σενάριο bash_completion.sh του Αποθετήριο GitHub και συμπεριλάβετέ το στο αρχείο σας ~/.bashrc:

source ~/bash_completion.sh

Μετά την επανεκκίνηση του κελύφους, το πλήρες ψευδώνυμο θα εγκατασταθεί πλήρως.

Ενεργοποίηση αυτόματης συμπλήρωσης για ψευδώνυμα kubectl

Το τεχνικά πλήρες ψευδώνυμο παρέχει λειτουργία περιτυλίγματος _complete_alias. Αυτή η συνάρτηση ελέγχει το ψευδώνυμο και επιστρέφει υποδείξεις ολοκλήρωσης για την εντολή ψευδώνυμο.

Για να συσχετίσετε μια συνάρτηση με ένα συγκεκριμένο ψευδώνυμο, πρέπει να χρησιμοποιήσετε τον ενσωματωμένο μηχανισμό Bash πλήρης, για εγκατάσταση _complete_alias ως συνάρτηση ολοκλήρωσης ψευδωνύμου.

Ως παράδειγμα, ας πάρουμε το ψευδώνυμο k, που σημαίνει την εντολή kubectl. για εγκατάσταση _complete_alias Ως συμπληρωματική συνάρτηση για αυτό το ψευδώνυμο, θα πρέπει να εκτελέσετε την ακόλουθη εντολή:

$ complete -F _complete_alias k

Το αποτέλεσμα αυτού είναι ότι κάθε φορά που συμπληρώνετε αυτόματα ένα ψευδώνυμο k, καλείται η συνάρτηση _complete_alias, το οποίο ελέγχει το ψευδώνυμο και επιστρέφει υποδείξεις ολοκλήρωσης για την εντολή kubectl.

Ως δεύτερο παράδειγμα, ας πάρουμε το ψευδώνυμο kg, που δηλώνει kubectl get:

$ complete -F _complete_alias kg

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

Σημειώστε ότι μπορείτε να χρησιμοποιήσετε πλήρες ψευδώνυμο για οποιοδήποτε ψευδώνυμο στο σύστημά σας.

Επομένως, για να ενεργοποιήσετε την αυτόματη συμπλήρωση για όλα τα ψευδώνυμα kubectl, πρέπει να εκτελέσετε την παραπάνω εντολή για καθένα από αυτά. Το παρακάτω απόσπασμα κάνει ακριβώς αυτό, με την προϋπόθεση ότι έχετε ορίσει τα ψευδώνυμα kubectl ~/.kubectl-aliases:

for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases); 
do
  complete -F _complete_alias "$_a"
done

Αυτό το κομμάτι κώδικα πρέπει να τοποθετηθεί στο δικό σας ~/.bashrc, επανεκκινήστε το κέλυφος εντολών και η αυτόματη συμπλήρωση θα γίνει διαθέσιμη και για τα 800 ψευδώνυμα kubectl.

6. Επέκταση του kubectl με πρόσθετα

Ξεκινώντας από έκδοση 1.12, υποστηρίζει kubectl μηχανισμός plugin, που σας επιτρέπουν να επεκτείνετε τις λειτουργίες του με πρόσθετες εντολές.

Αν είστε εξοικειωμένοι με Μηχανισμοί πρόσθετων Git, τότε τα πρόσθετα kubectl είναι χτισμένα με την ίδια αρχή.

Σε αυτό το κεφάλαιο, θα καλύψουμε πώς να εγκαταστήσετε πρόσθετα, πού να τα βρείτε και πώς να δημιουργήσετε τα δικά σας πρόσθετα.

Εγκατάσταση πρόσθετων

Τα πρόσθετα Kubectl διανέμονται ως απλά εκτελέσιμα αρχεία με το όνομα like kubectl-x. Πρόθεμα kubectl- απαιτείται, ακολουθούμενη από μια νέα υποεντολή kubectl που σας επιτρέπει να καλέσετε το πρόσθετο.

Για παράδειγμα, η προσθήκη hello θα διανεμηθεί ως αρχείο που ονομάζεται kubectl-hello.

Για να εγκαταστήσετε το πρόσθετο, πρέπει να αντιγράψετε το αρχείο kubectl-x σε οποιονδήποτε κατάλογο στο PATH σας και κάντε τον εκτελέσιμο, για παράδειγμα με chmod +x. Αμέσως μετά από αυτό μπορείτε να καλέσετε το πρόσθετο με kubectl x.

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

$ kubectl plugin list

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

Εύρεση και εγκατάσταση προσθηκών χρησιμοποιώντας το Krew

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

Project Krew στοχεύει να παρέχει μια ενοποιημένη λύση για κοινή χρήση, αναζήτηση, εγκατάσταση και διαχείριση προσθηκών kubectl. Το έργο αυτοαποκαλείται "διαχειριστής πακέτων για προσθήκες kubectl" (το Krew είναι παρόμοιο με Ετοιμάζω).

Το Krew είναι μια λίστα προσθηκών kubectl που μπορείτε να επιλέξετε και να εγκαταστήσετε. Ταυτόχρονα, το Krew είναι επίσης ένα πρόσθετο για το kubectl.

Αυτό σημαίνει ότι η εγκατάσταση του Krew λειτουργεί ουσιαστικά όπως η εγκατάσταση οποιουδήποτε άλλου πρόσθετου kubectl. Μπορείτε να βρείτε αναλυτικές οδηγίες στο Σελίδα GitHub.

Οι πιο σημαντικές εντολές του Krew είναι:

# Поиск в списке плагинов
$ kubectl krew search [<query>]
# Посмотреть информацию о плагине
$ kubectl krew info <plugin>
# Установить плагин
$ kubectl krew install <plugin>
# Обновить все плагины до последней версии
$ kubectl krew upgrade
# Посмотреть все плагины, установленные через Krew
$ kubectl krew list
# Деинсталлировать плагин
$ kubectl krew remove <plugin>

Λάβετε υπόψη ότι η εγκατάσταση προσθηκών χρησιμοποιώντας το Krew δεν παρεμβαίνει στην εγκατάσταση προσθηκών χρησιμοποιώντας την τυπική μέθοδο που περιγράφεται παραπάνω.

Σημειώστε ότι η εντολή kubectl krew list εμφανίζει μόνο πρόσθετα που εγκαταστάθηκαν χρησιμοποιώντας το Krew, ενώ η εντολή kubectl plugin list παραθέτει όλα τα πρόσθετα, δηλαδή αυτά που έχουν εγκατασταθεί χρησιμοποιώντας το Krew και αυτά που έχουν εγκατασταθεί με άλλες μεθόδους.

Εύρεση πρόσθετων αλλού

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

Σας προτείνω να δείτε την ενότητα του GitHub kubectl-plugins. Εκεί θα βρείτε δεκάδες διαθέσιμα πρόσθετα που αξίζει να τσεκάρετε.

Γράψτε τα δικά σας πρόσθετα

μπορείς μόνος σου δημιουργήστε πρόσθετα - Δεν είναι δύσκολο. Πρέπει να δημιουργήσετε ένα εκτελέσιμο αρχείο που κάνει ό,τι χρειάζεστε, ονομάστε το όπως kubectl-x και εγκαταστήστε όπως περιγράφεται παραπάνω.

Το αρχείο θα μπορούσε να είναι ένα σενάριο bash, ένα σενάριο python ή μια μεταγλωττισμένη εφαρμογή GO - δεν έχει σημασία. Η μόνη προϋπόθεση είναι να μπορεί να εκτελεστεί απευθείας στο λειτουργικό σύστημα.

Ας δημιουργήσουμε ένα παράδειγμα προσθήκης τώρα. Στην προηγούμενη ενότητα, χρησιμοποιήσατε την εντολή kubectl για να παραθέσετε τα κοντέινερ για κάθε ομάδα. Είναι εύκολο να μετατρέψετε αυτήν την εντολή σε πρόσθετο που μπορείτε να καλέσετε π.χ. kubectl img.

Δημιουργήστε ένα αρχείο kubectl-img το ακόλουθο περιεχόμενο:

#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'

Τώρα κάντε το αρχείο εκτελέσιμο με chmod +x kubectl-img και μετακινήστε το σε οποιονδήποτε κατάλογο στο PATH σας. Αμέσως μετά μπορείτε να χρησιμοποιήσετε το πρόσθετο kubectl img.

Όπως αναφέρθηκε, τα πρόσθετα kubectl μπορούν να γραφτούν σε οποιαδήποτε γλώσσα προγραμματισμού ή σεναρίου. Εάν χρησιμοποιείτε σενάρια κελύφους, το πλεονέκτημα ότι μπορείτε να καλέσετε εύκολα το kubectl μέσα από το πρόσθετο. Ωστόσο, μπορείτε να γράψετε πιο σύνθετα πρόσθετα σε πραγματικές γλώσσες προγραμματισμού χρησιμοποιώντας Βιβλιοθήκη πελατών Kubernetes. Εάν χρησιμοποιείτε το Go, μπορείτε επίσης να χρησιμοποιήσετε βιβλιοθήκη cli-runtime, το οποίο υπάρχει ειδικά για τη σύνταξη προσθηκών kubectl.

Πώς να μοιράζεστε τις προσθήκες σας

Εάν πιστεύετε ότι οι προσθήκες σας θα μπορούσαν να είναι χρήσιμες σε άλλους, μη διστάσετε να τις μοιραστείτε στο GitHub. Φροντίστε να τα προσθέσετε στο θέμα kubectl-plugins.

Μπορείτε επίσης να ζητήσετε να προστεθεί η προσθήκη σας Λίστα Krew. Οδηγίες για το πώς να το κάνετε αυτό υπάρχουν Αποθετήρια GitHub.

Ολοκλήρωση εντολών

Τα πρόσθετα δεν υποστηρίζουν αυτήν τη στιγμή την αυτόματη συμπλήρωση. Δηλαδή, πρέπει να εισαγάγετε το πλήρες όνομα του πρόσθετου και τα πλήρη ονόματα των ορισμάτων.

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

Καλή τύχη!!!

Τι άλλο να διαβάσετε για το θέμα:

  1. Τρία επίπεδα αυτόματης κλιμάκωσης στο Kubernetes και πώς να τα χρησιμοποιήσετε αποτελεσματικά.
  2. Kubernetes στο πνεύμα της πειρατείας με ένα πρότυπο για υλοποίηση.
  3. Το κανάλι μας Around Kubernetes στο Telegram.

Πηγή: www.habr.com

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