Πώς να χρησιμοποιήσετε το 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 στο API του Kubernetes:

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

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

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

Ας υποθέσουμε ότι θέλετε να δημιουργήσετε έναν πόρο 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 και πώς λειτουργεί. Υπάρχουν όμως και μερικά πράγματα που κάθε χρήστης του kubectl πρέπει να γνωρίζει για το API του Kubernetes. Ας ρίξουμε μια γρήγορη ματιά στις εσωτερικές λειτουργίες του Kubernetes.

Ο Εσωτερικός Κόσμος του Κουμπερνέτες

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

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

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

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

  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 εκκινείται και παρακολουθεί τα pod που έχουν αντιστοιχιστεί σε αυτόν τον κόμβο:

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

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

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

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

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

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

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

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

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

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

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

Ο ρόλος του Kubernetes API

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

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

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

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

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

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

  1. Η αποθήκευση αποθηκεύει την κατάσταση, δηλαδή τους πόρους Kubernetes.
  2. Ο διακομιστής API παρέχει μια διεπαφή για τον χώρο αποθήκευσης με τη μορφή του API Kubernetes.
  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-completion, επομένως πρέπει πρώτα να το εγκαταστήσετε:

$ sudo apt-get install bash-completion

Ή:

$ yum install bash-completion

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

$ type _init_completion

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

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

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

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

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

source <(kubectl completion bash)

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

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

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

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

Μετά την επανεκκίνηση του κελύφους, η ολοκλήρωση της εντολής 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

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

Η έκφραση στην επιλογή επιλέγει τα ονόματα των pod από το πεδίο metadata.nameΑυτό συμβαίνει επειδή το όνομα της ομάδας (pod) ορίζεται στο πεδίο ονόματος του θυγατρικού πεδίου. metadata στην περιγραφή του πόρου της ομάδας. Περισσότερες λεπτομέρειες μπορείτε να βρείτε στο Εγχειρίδιο 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 προδιαγραφή πόρου της ομάδας. Περισσότερες πληροφορίες μπορείτε να βρείτε στην έξοδο kubectl explain pod.spec.nodeName.

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

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

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

Εκφράσεις JSONPath

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

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

Το Kubectl explain υποστηρίζει έναν περιορισμένο αριθμό δυνατοτήτων 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 είναι λίστες και αυτός ο τελεστής σάς επιτρέπει να επιλέξετε στοιχεία αυτών των λιστών. Χρησιμοποιείται συχνά με ένα wildcard όπως [*] για να επιλέξετε όλα τα στοιχεία μιας λίστας.

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

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

  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. Εμφανίζει τη ζώνη διαθεσιμότητας για κάθε κόμβο.

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

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

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

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

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

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

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

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

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

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

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

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

αρχεία kubeconfig

Ας ρίξουμε μια ματιά στο τι ακριβώς περιέχει το αρχείο kubeconfig:

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

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

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

Σε οποιαδήποτε δεδομένη στιγμή, ένα από τα συμφραζόμενα είναι τρέχον:

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

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

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

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

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

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

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

Χρήση kubectx

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

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

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

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

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

Ιδρύεται το Chtoby 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 και επανεκκινήστε το κέλυφος σας.

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

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

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

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

Τα πρόσθετα λειτουργούν με βάση τα ψευδώνυμα από την προηγούμενη ενότητα.

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

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

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

5. Συντομεύστε την εισαγωγή με αυτόματα ψευδώνυμα

Τα ψευδώνυμα κελύφους είναι ένας εξαιρετικός τρόπος για να επιταχύνετε την πληκτρολόγηση. Έργο ψευδώνυμα 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 (δεν υπάρχει προς το παρόν ψευδώνυμο για τον πόρο Ρόλοι).
  3. Για να λάβετε δεδομένα για μια συγκεκριμένη ομάδα, μπορείτε να χρησιμοποιήσετε την εντολή kgpo my-pod — kubectl get pod my-pod.

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

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

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

Εγκατάσταση

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

source ~/.kubectl_aliases

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

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

$ kgpooyaml test-pod-d4b77b989

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

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

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

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

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

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

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

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

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

Καταρχάς, το πλήρες ψευδώνυμο εξαρτάται από bash-ολοκλήρωση. Поэтому перед установкой complete-alias необходимо убедиться, что 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

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

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

Επομένως, για να ενεργοποιήσετε την αυτόματη συμπλήρωση για όλα τα ψευδώνυμα kubectl, πρέπει να εκτελέσετε την παραπάνω εντολή για καθένα από αυτά. Το ακόλουθο απόσπασμα κάνει ακριβώς αυτό, υποθέτοντας ότι έχετε ορίσει το kubectl-aliases σε ~/.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 με πρόσθετα (plugins)

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

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

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

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

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

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

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

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

$ kubectl plugin list

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

Εύρεση και εγκατάσταση πρόσθετων (plugins) με το Krew

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

Έργο Krew στοχεύει στην παροχή μιας ενοποιημένης λύσης για την κοινή χρήση, την εύρεση, την εγκατάσταση και τη διαχείριση πρόσθετων (plugins) του kubectl. Το έργο αυτοαποκαλείται "διαχειριστής πακέτων για πρόσθετα (plugins) του 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>

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

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

Αναζήτηση για πρόσθετα σε άλλα μέρη

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

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

Σύνταξη των δικών σας πρόσθετων (plugins)

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

Το αρχείο μπορεί να είναι ένα bash script, ένα python script ή μια μεταγλωττισμένη εφαρμογή 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.

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

Πώς να κοινοποιήσετε τα πρόσθετα σας

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

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

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

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

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

Καλή τύχη!!!

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

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

Πηγή: www.habr.com

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster