Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Wenn Sie mit Kubernetes arbeiten, ist kubectl wahrscheinlich eines der am häufigsten verwendeten Werkzeuge. Jedes Mal, wenn Sie viel Zeit mit einem bestimmten Tool verbringen, lohnt es sich, es gut zu verstehen und effektiv zu nutzen.

Der Befehl Kubernetes aaS von Mail.ru Dieser Artikel von Daniel Weibel bietet Ihnen Tipps und Tricks für eine effektive Arbeit mit kubectl. Außerdem wird er Ihnen helfen, ein tieferes Verständnis für die Funktionsweise von Kubernetes zu entwickeln.

Laut dem Autor zielt der Artikel darauf ab, Ihre tägliche Arbeit mit Kubernetes nicht nur effizienter, sondern auch angenehmer zu gestalten!

Einführung: Was ist kubectl?

Bevor Sie lernen, kubectl effektiver zu nutzen, sollten Sie ein grundlegendes Verständnis davon haben, was es ist und wie es funktioniert.

Aus der Sicht des Benutzers ist kubectl ein Dashboard, das die Ausführung von Kubernetes-Operationen ermöglicht.

Technisch gesehen ist kubectl der Client für die Kubernetes-API.

Die Kubernetes API ist eine HTTP REST API. Diese API fungiert als echtes Benutzerinterface für Kubernetes, über das es vollständig gesteuert wird. Das bedeutet, dass jede Kubernetes-Operation als API-Endpunkt dargestellt wird und durch eine HTTP-Anfrage an diesen Endpunkt ausgeführt werden kann.

Daher besteht die Hauptaufgabe von kubectl darin, HTTP-Anfragen an die Kubernetes API zu stellen:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Kubernetes ist ein vollständig ressourcenorientiertes System. Das bedeutet, dass es den aktuellen Status der Ressourcen verwaltet und alle Kubernetes-Operationen CRUD-Operationen sind.

Sie haben die vollständige Kontrolle über Kubernetes, indem Sie diese Ressourcen verwalten, und Kubernetes bestimmt, was zu tun ist, basierend auf dem aktuellen Zustand der Ressourcen. Aus diesem Grund ist die Verlinkung zur Kubernetes API als Liste von Ressourcentypen mit zugehörigen Operationen organisiert.

Lassen Sie uns ein Beispiel betrachten..

Angenommen, Sie möchten eine Ressource ReplicaSet erstellen. Dazu beschreiben Sie das ReplicaSet in einer Datei mit dem Namen replicaset.yaml, und führen dann den Befehl aus:

$ kubectl create -f replicaset.yaml

In der Folge wird die Ressource ReplicaSet erstellt. Aber was passiert im Hintergrund?

In Kubernetes gibt es die Operation zur Erstellung eines ReplicaSet. Wie jede andere Operation wird sie als API-Endpunkt bereitgestellt. Die spezifische API-Endpunkt für diese Operation sieht folgendermaßen aus:

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

Die API-Endpunkte aller Kubernetes-Operationen finden Sie im API-Handbuch (einschließlich des oben genannten Endpunkts). Um tatsächlich eine Anfrage an den Endpunkt zu stellen, müssen Sie zuerst die URL des API-Servers zu den in dem API-Handbuch aufgeführten Endpunkten hinzufügen.

Wenn Sie also den oben genannten Befehl ausführen, sendet kubectl eine HTTP-POST-Anfrage an den oben genannten API-Endpunkt. Die Definition des ReplicaSet, die Sie in der Datei replicaset.yaml, angegeben haben, wird im Anfragekörper übermittelt.

So funktioniert kubectl für alle Befehle, die mit dem Kubernetes-Cluster interagieren. In all diesen Fällen sendet kubectl einfach HTTP-Anfragen an die entsprechenden Kubernetes-API-Endpunkte.

Beachten Sie, dass Sie Kubernetes vollständig mit einem Tool wie curlverwalten können, indem Sie manuell HTTP-Anfragen an die Kubernetes-API senden. Kubectl vereinfacht lediglich die Nutzung der Kubernetes-API.

Das ist die Grundlage von kubectl und seiner Funktionsweise. Aber es gibt noch etwas über die Kubernetes-API, das jeder kubectl-Nutzer wissen sollte. Lassen Sie uns kurz in die interne Welt von Kubernetes eintauchen.

Die interne Welt von Kubernetes

Kubernetes besteht aus einer Reihe von unabhängigen Komponenten, die als separate Prozesse auf den Knoten des Clusters ausgeführt werden. Einige Komponenten laufen auf den Master-Knoten, andere auf den Worker-Knoten, und jede Komponente hat ihre spezifische Aufgabe.

Hier sind die wichtigsten Komponenten auf den Master-Knoten:

  1. Speicherung — speichert die Ressourcendefinitionen (in der Regel etcd).
  2. API-Server — stellt die API bereit und verwaltet den Speicher.
  3. Controller-Manager — sorgt dafür, dass die Status der Ressourcen den Spezifikationen entsprechen.
  4. Scheduler — plant Pods auf den Worker-Knoten.

Und hier ist eine der wichtigsten Komponenten auf den Worker-Knoten:

  1. Kubelet — verwaltet den Start von Containern auf dem Worker-Knoten.

Um zu verstehen, wie diese Komponenten zusammenarbeiten, betrachten wir ein Beispiel.

Angenommen, Sie haben gerade ausgeführt kubectl create -f replicaset.yaml, woraufhin kubectl einen HTTP-POST-Request an die API-Endpunkt des ReplicaSets gesendet hat und die Ressourcendefinition des ReplicaSets übermittelt.

Was passiert im Cluster?

  1. Nach der Ausführung kubectl create -f replicaset.yaml Der API-Server speichert die Definition Ihrer ReplicaSet-Ressource im Speicher:

    Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung

  2. Daraufhin wird der ReplicaSet-Controller im Controller-Manager gestartet, der für die Erstellung, Änderung und Löschung der ReplicaSet-Ressourcen zuständig ist:

    Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung

  3. Der ReplicaSet-Controller erstellt eine Pod-Definition für jede Replica des ReplicaSets (basierend auf der Pod-Vorlage in der ReplicaSet-Definition) und speichert diese im Speicher:

    Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung

  4. Ein Scheduler wird gestartet, der die Pods überwacht, die noch keinem Worker-Knoten zugewiesen wurden:

    Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung

  5. Der Scheduler wählt einen geeigneten Worker-Knoten für jeden Pod aus und fügt diese Informationen in die Pod-Definition im Speicher ein:

    Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung

  6. Auf dem Worker-Knoten, dem der Pod zugewiesen ist, wird Kubelet gestartet, das die Pods überwacht, die diesem Knoten zugewiesen sind:

    Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung

  7. Kubelet liest die Pod-Definition aus dem Speicher und gibt Befehle an die Container-Laufzeitumgebung, wie Docker, um Container auf dem Knoten zu starten:

    Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung

Nachfolgend finden Sie eine Textversion dieser Beschreibung.

Die API-Anfrage an den Endpunkt zur Erstellung von ReplicaSets wird vom API-Server verarbeitet. Der API-Server authentifiziert die Anfrage und speichert die Definition der ReplicaSet-Ressource im Speicher.

Dieses Ereignis startet den ReplicaSet-Controller, der ein Unterprozess des Controller-Managers ist. Der ReplicaSet-Controller überwacht die Erstellung, Aktualisierung und Löschung von ReplicaSet-Ressourcen im Speicher und erhält Benachrichtigungen über Ereignisse, wenn diese stattfinden.

Die Aufgabe des ReplicaSet-Controllers besteht darin, sicherzustellen, dass die gewünschte Anzahl an ReplicaSet-Pods vorhanden ist. In unserem Beispiel existieren bisher keine Pods, daher erstellt der ReplicaSet-Controller diese Pod-Definitionen (gemäß dem Pod-Template in der ReplicaSet-Definition) und speichert sie im Speicher.

Die Erstellung neuer Pods löst den Scheduler aus, der die Pod-Definitionen überwacht, die noch nicht für die Arbeitsknoten geplant sind. Der Scheduler wählt einen geeigneten Arbeitsknoten für jeden Pod aus und aktualisiert die Pod-Definitionen im Speicher.

Beachten Sie, dass bis zu diesem Zeitpunkt in keinem Teil des Clusters der Arbeitslastcode ausgeführt wurde. Alles, was bisher gemacht wurde, ist die Erstellung und Aktualisierung von Ressourcen im Speicher auf dem Master-Knoten.

Das letzte Ereignis startet Kubelet, das die Pods überwacht, die für ihre Arbeitsknoten geplant sind. Der Kubelet der Arbeitsknoten, auf denen Ihre ReplicaSet-Pods installiert sind, muss der Container-Laufzeitumgebung, wie Docker, anweisen, die erforderlichen Container-Images herunterzuladen und sie zu starten.

An diesem Punkt ist Ihr ReplicaSet-Anwendung endlich gestartet!

Die Rolle der Kubernetes API

Wie Sie im vorherigen Beispiel gesehen haben, überwachen die Kubernetes-Komponenten (außer dem API-Server und dem Speicher) die Änderungen der Ressourcen im Speicher und ändern die Informationen über diese Ressourcen im Speicher.

Natürlich interagieren diese Komponenten nicht direkt mit dem Speicher, sondern nur über die Kubernetes API.

Betrachten wir die folgenden Beispiele:

  1. Der ReplicaSet-Controller verwendet den API-Endpunkt list ReplicaSets mit dem Parameter watch um Änderungen bei den ReplicaSet-Ressourcen zu überwachen.
  2. Der ReplicaSet-Controller verwendet den API-Endpunkt create Pod (Pod erstellen) zum Erstellen von Pods.
  3. Der Scheduler verwendet den API-Endpunkt patch Pod (Pod ändern) zum Aktualisieren von Pods mit Informationen über den ausgewählten Arbeitsknoten.

Wie Sie sehen, ist dies dasselbe API, auf das kubectl zugreift. Die Verwendung desselben APIs für die Interaktion zwischen internen Komponenten und externen Nutzern ist ein grundlegendes Designprinzip von Kubernetes.

Jetzt können wir zusammenfassen, wie Kubernetes funktioniert:

  1. Der Speicher bewahrt den Zustand, das heißt die Ressourcen von Kubernetes.
  2. Der API-Server bietet eine Schnittstelle zum Speicher in Form des Kubernetes APIs.
  3. Alle anderen Komponenten und Benutzer von Kubernetes lesen, beobachten und manipulieren den Zustand (Ressourcen) von Kubernetes über das API.

Das Verständnis dieser Konzepte wird Ihnen helfen, kubectl besser zu nutzen und das Beste daraus zu machen.

Schauen wir uns nun einige spezifische Tipps und Tricks an, die Ihnen helfen, die Effizienz bei der Verwendung von kubectl zu steigern.

1. Beschleunigung der Eingabe durch Befehlsergänzung

Eine der nützlichsten, aber oft übersehenen Methoden zur Steigerung der Effizienz mit kubectl ist die Befehlsergänzung.

Die Befehlsergänzung ermöglicht es, bestimmte Teile von kubectl-Befehlen automatisch mit der Tabulatortaste auszufüllen. Das funktioniert für Subcommands, Optionen und Argumente, einschließlich komplexer Namen von Ressourcen.

Sehen Sie, wie das kubectl-Completion-Plugin funktioniert:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Das Completion-Plugin funktioniert für die Shells Bash und Zsh.

Die offizielle Anleitung enthält detaillierte Anweisungen zur Einrichtung des Auto-Completion, aber im Folgenden geben wir einen kurzen Überblick.

Wie das Completion-Plugin funktioniert

Das Completion-Plugin ist eine Shell-Funktion, die mit einem Completion-Skript arbeitet. Das Completion-Skript ist ein Shell-Skript, das das Verhalten des Completions für einen bestimmten Befehl definiert.

Kubectl generiert automatisch und gibt Completion-Skripte für Bash und Zsh mit den folgenden Befehlen aus:

$ kubectl completion bash

Oder:

$ kubectl completion zsh

Theoretisch reicht es aus, die Ausgabe dieser Befehle mit der entsprechenden Shell zu verbinden, damit kubectl die Befehle vervollständigen kann.

In der Praxis variiert die Verbindungsmethode für Bash (einschließlich der Unterschiede zwischen Linux und MacOS) und Zsh. Im Folgenden betrachten wir alle diese Optionen.

Bash unter Linux

Das Completion-Skript für Bash benötigt das Paket bash-completion, daher muss es zuerst installiert werden:

$ sudo apt-get install bash-completion

Oder:

$ yum install bash-completion

Sie können testen, ob das Paket erfolgreich installiert wurde, mit dem folgenden Befehl:

$ type _init_completion

Wenn dabei der Code der Shell-Funktion ausgegeben wird, ist bash-completion korrekt installiert. Wenn der Befehl den Fehler "Nicht gefunden" ausgibt, müssen Sie die folgende Zeile in Ihre Datei hinzufügen. ~ / .bashrc:

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

Ob diese Zeile in die Datei hinzugefügt werden muss oder nicht, hängt vom Paketmanager ab, den Sie zur Installation von bash-completion verwendet haben. Für APT ist dies notwendig, für YUM nicht. ~ / .bashrc oder nicht, hängt vom Paketmanager ab, den Sie für die Installation von bash-completion verwendet haben. Für APT ist das erforderlich, für YUM nicht.

Nach der Installation von bash-completion müssen Sie alles so einrichten, dass das kubectl-Autocompletionskript in allen Shell-Sitzungen aktiviert ist.

Eine Möglichkeit, dies zu erreichen, besteht darin, die folgende Zeile in die Datei einzufügen: ~ / .bashrc:

source <(kubectl completion bash)

Eine andere Möglichkeit besteht darin, das kubectl-Autocompletionskript in das Verzeichnis hinzuzufügen /etc/bash_completion.d (erstellt es, wenn es nicht existiert):

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

Alle Autocompletionskripte im Verzeichnis /etc/bash_completion.d werden automatisch in bash-completion aktiviert.

Beide Optionen sind gleichermaßen anwendbar.

Nach dem Neustart der Eingabeaufforderung funktioniert die Autovervollständigung der kubectl-Befehle.

Bash in MacOS

In MacOS ist die Einrichtung etwas komplizierter. Der Grund ist, dass in MacOS standardmäßig Bash Version 3.2 verwendet wird, während das kubectl-Autocompletionskript eine Bash-Version von mindestens 4.1 erfordert und nicht in Bash 3.2 funktioniert.

Die Verwendung einer veralteten Bash-Version in MacOS ist mit Lizenzfragen verbunden. Bash Version 4 wird unter der GPLv3-Lizenz verteilt, die von Apple nicht unterstützt wird.

Um die Autovervollständigung von kubectl in MacOS einzurichten, müssen Sie eine neuere Bash-Version installieren. Sie können auch die aktualisierte Bash als Standard-Shell festlegen, was Sie in Zukunft vor vielen Problemen schützt. Das ist nicht schwierig, die Details finden Sie im Artikel „Bash in MacOS aktualisieren».

Bevor Sie fortfahren, stellen Sie sicher, dass Sie eine aktuelle Bash-Version verwenden (prüfen Sie die Ausgabe von bash --version).

Das Autovervollständigungs-Skript in Bash hängt vom Projekt bash-completion, deshalb müssen Sie es zuerst installieren.

Sie können bash-completion mithilfe von Homebrew:

$ brew install bash-completion@2

Hier @2 bezeichnet bash-completion Version 2. Die Autovervollständigung von kubectl benötigt bash-completion v2, und bash-completion v2 setzt mindestens Bash Version 4.1 voraus.

Die Ausgabe des Befehls brew-install enthält einen Abschnitt Caveats, in dem steht, dass Sie Folgendes zur Datei hinzufügen müssen ~/.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"

Ich empfehle jedoch, diese Zeilen nicht in ~/.bash_profile, sondern in ~/.bashrc. In diesem Fall ist die automatisierte Vervollständigung nicht nur in der Hauptshell, sondern auch in untergeordneten Kommandozeilen verfügbar.

Nach dem Neustart der Kommandozeile können Sie die Installation mit folgendem Befehl überprüfen:

$ type _init_completion

Wenn Sie im Output die Shell-Funktion sehen, ist alles korrekt eingerichtet.

Jetzt müssen wir sicherstellen, dass die kubectl-Autovervollständigung in allen Sitzungen aktiviert ist.

Eine Möglichkeit besteht darin, die folgende Zeile in Ihre ~/.bashrc:

source <(kubectl completion bash)

Ein zweiter Weg ist, das Autovervollständigungs-Skript in den Ordner /usr/local/etc/bash_completion.d:

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

Diese Methode funktioniert nur, wenn Sie bash-completion über Homebrew installiert haben. In diesem Fall lädt bash-completion alle Skripte aus diesem Verzeichnis.

Wenn Sie kubectl über Homebrew installiert haben,müssen Sie den vorherigen Schritt nicht ausführen, da das Autovervollständigungs-Skript automatisch im Ordner /usr/local/etc/bash_completion.d während der Installation platziert wird. In diesem Fall wird die kubectl-Autovervollständigung sofort aktiviert, sobald Sie bash-completion installieren.

Somit sind all diese Optionen gleichwertig.

Zsh

Die Autovervollständigungs-Skripte für Zsh benötigen keine weiteren Abhängigkeiten. Alles, was nötig ist, ist, sie beim Laden der Kommandozeile zu aktivieren.

Sie können dies tun, indem Sie eine Zeile in Ihre ~/.zshrc Datei hinzufügen:

source <(kubectl completion zsh)

Wenn Sie den Fehler erhalten haben not found: compdef nachdem Sie Ihre Shell neu gestartet haben, müssen Sie die integrierte Funktion compdefaktivieren. Diese kann aktiviert werden, indem Sie zu Beginn Ihrer Datei hinzufügen: ~/.zshrc das Folgende hinzu:

autoload -Uz compinit
compinit

2. Schnelle Übersicht über Ressourcenspezifikationen

Wenn Sie YAML-Ressourcendefinitionen erstellen, sollten Sie die Felder und deren Bedeutung für diese Ressourcen kennen. Ein Ort, um diese Informationen zu finden, ist das API-Handbuch, das vollständige Spezifikationen aller Ressourcen enthält.

Allerdings ist es unpraktisch, jedes Mal in den Webbrowser zu wechseln, wenn Sie etwas suchen müssen. Daher bietet kubectl den Befehl kubectl explain, der die Spezifikationen aller Ressourcen direkt in Ihrem Terminal anzeigt.

Das Format des Befehls ist wie folgt:

$ kubectl explain resource[.field]...

Der Befehl gibt die Spezifikation der angeforderten Ressource oder des Feldes aus. Die ausgegebene Information ist identisch mit dem, was im API-Handbuch enthalten ist.

Standardmäßig kubectl explain zeigt nur die erste Ebene der Feldverknüpfungen an.

Sehen Sie, wie es aussieht hier.

Sie können den gesamten Baum anzeigen, indem Sie die Option hinzufügen --recursive:

$ kubectl explain deployment.spec --recursive

Wenn Sie genau nicht wissen, welche Ressourcen Sie benötigen, können Sie diese alle mit dem folgenden Befehl anzeigen:

$ kubectl api-resources

Dieser Befehl zeigt die Namen der Ressourcen in der Mehrzahlform an, beispielsweise deployments statt deployment. Er zeigt auch den Kurzname an, beispielsweise deploy, für diejenigen Ressourcen, die einen solchen haben. Machen Sie sich keine Sorgen über diese Unterschiede. All diese Namensvarianten sind für kubectl äquivalent. Das bedeutet, Sie können jede davon verwenden für kubectl explain.

Alle folgenden Befehle sind gleichwertig:

$ kubectl explain deployments.spec
# oder
$ kubectl explain deployment.spec
# oder
$ kubectl explain deploy.spec

3. Verwenden Sie ein benutzerdefiniertes Ausgabeformat für Spalten

Standardmäßig gibt der Befehl 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

Dieses Format ist praktisch, enthält jedoch eine begrenzte Menge an Informationen. Im Vergleich zum vollständigen Format der Ressourcenbeschreibung werden hier nur einige Felder angezeigt.

In diesem Fall können Sie ein benutzerdefiniertes Format für die Spaltenausgabe verwenden. Es ermöglicht Ihnen die Festlegung, welche Daten angezeigt werden sollen. Sie können jedes Feld der Ressource als separate Spalte ausgeben.

Die Verwendung des benutzerdefinierten Formats wird über die Optionen festgelegt:

-o custom-columns=
:[,
:]...

Sie können jede Ausgabespalte mit einem Paar definieren

:, wobei
— der Name der Spalte, und <jsonpath> — der Ausdruck, der das Feld der Ressource definiert.

Schauen wir uns ein einfaches Beispiel an:

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

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

Die Ausgabe enthält eine Spalte mit den Namen der Pods.

Der Ausdruck in der Option wählt die Namen der Pods aus dem Feld metadata.name. Das liegt daran, dass der Name des Pods im untergeordneten Feld name des Feldes metadata in der Ressourcendefinition des Pods definiert ist. Detailliertere Informationen finden Sie im API-Guide oder geben Sie den Befehl ein kubectl explain pod.metadata.name.

Nehmen wir an, Sie möchten eine zusätzliche Spalte zur Ausgabe hinzufügen, die beispielsweise zeigt, auf welchem Knoten jeder Pod läuft. Dazu fügen Sie einfach die entsprechende Spaltenspezifikation zur benutzerdefinierten Spaltenoption hinzu:

$ 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

Der Ausdruck wählt den Namen des Knotens aus spec.nodeName — wenn ein Pod einem Knoten zugewiesen wird, wird dessen Name im Feld spec.nodeName der Ressourcenspezifikation des Pods eingetragen. Weitere Informationen finden Sie in der Ausgabe von kubectl explain pod.spec.nodeName.

Bitte beachten Sie, dass die Kubernetes-Ressourcenfelder groß- und kleinschreibungsempfindlich sind.

Sie können jedes Ressourcenkriterium als Spalte anzeigen lassen. Überprüfen Sie einfach die Ressourcenspezifikation und testen Sie sie mit beliebigen Feldern, die Ihnen gefallen.

Aber lassen Sie uns zunächst die Ausdrucksarten zur Auswahl von Feldern genauer betrachten.

JSONPath-Ausdrücke

Die Ausdrücke zur Auswahl von Ressourcenfeldern basieren auf JSONPath.

JSONPath ist eine Sprache zur Abfrage von Daten aus JSON-Dokumenten. Das Auswählen eines einzelnen Feldes ist der einfachste Anwendungsfall für JSONPath. Es bietet jedoch weitaus umfangreichere Möglichkeiten, einschließlich Selektoren, Filter und mehr.

Kubectl explain unterstützt eine begrenzte Anzahl von JSONPath-Funktionen. Im Folgenden sind die Funktionen und Beispiele für deren Verwendung beschrieben:

# Выбрать все элементы списка
$ 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'

Eine besondere Bedeutung hat der Operator []. Viele Felder von Kubernetes-Ressourcen sind Listen, und dieser Operator ermöglicht das Auswählen von Elementen aus diesen Listen. Er wird häufig mit einem Platzhalter wie [*] verwendet, um alle Elemente der Liste auszuwählen.

Anwendungsbeispiele

Die Möglichkeiten zur Verwendung benutzerdefinierter Spaltenausgaben sind grenzenlos, da Sie jedes Feld oder jede Kombination von Feldern der Ressource in der Ausgabe anzeigen können. Hier sind einige Anwendungsbeispiele, aber zögern Sie nicht, diese selbst zu erkunden und nützliche Anwendungen zu finden.

  1. Anzeige von Container-Images für 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

    Dieser Befehl zeigt die Namen der Container-Images für jeden Pod an.

    Beachten Sie, dass ein Pod mehrere Container enthalten kann, wobei die Namen der Images in einer Zeile durch Kommas getrennt ausgegeben werden.

  2. Anzeige der Verfügbarkeitszonen der Knoten:
    $ 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

    Dieser Befehl ist nützlich, wenn Ihr Cluster in einer öffentlichen Cloud gehostet wird. Er zeigt die Verfügbarkeitszone für jeden Knoten an.

    Eine Verfügbarkeitszone ist ein Cloud-Konzept, das den Replikationsbereich auf eine geografische Region beschränkt.

    Die Verfügbarkeitszonen für jeden Knoten werden über ein spezielles Label abgerufen — failure-domain.beta.kubernetes.io/zone. Wenn der Cluster in einer öffentlichen Cloud betrieben wird, wird dieses Label automatisch erstellt und mit den Namen der Verfügbarkeitszonen für jeden Knoten ausgefüllt.

    Labels sind kein Teil der Spezifikation von Kubernetes-Ressourcen, daher finden Sie keine Informationen darüber in API-Guide. Sie können sie jedoch sehen (wie alle anderen Labels auch), wenn Sie Informationen über die Knoten im YAML- oder JSON-Format anfordern:

    $ kubectl get nodes -o yaml
    # oder
    $ kubectl get nodes -o json

    Eine hervorragende Möglichkeit, mehr über Ressourcen zu erfahren, zusätzlich zum Verständnis der Ressourcenspezifikationen.

4. Einfaches Wechseln zwischen Clustern und Namespaces

Wenn kubectl eine Anfrage an die Kubernetes-API stellt, liest es vorher die kubeconfig-Datei, um alle notwendigen Verbindungsparameter zu erhalten.

Standardmäßig ist die kubeconfig-Datei ~/ .kube / config. Diese Datei wird normalerweise durch einen speziellen Befehl erstellt oder aktualisiert.

Wenn Sie mit mehreren Clustern arbeiten, enthält Ihre kubeconfig-Datei die Verbindungsparameter für all diese Cluster. Sie benötigen eine Möglichkeit, kubectl mitzuteilen, mit welchem Cluster Sie arbeiten.

Innerhalb eines Clusters können Sie mehrere Namespaces erstellen – eine Art virtueller Cluster innerhalb des physischen Clusters. Kubectl bestimmt, welcher Namespace verwendet werden soll, auch anhand der Informationen aus der kubeconfig-Datei. Daher benötigen Sie auch eine Möglichkeit, kubectl mitzuteilen, mit welchem Namespace zu arbeiten.

In diesem Kapitel erklären wir, wie das funktioniert und wie Sie eine effektive Nutzung erreichen.

Bitte beachten Sie, dass Sie mehrere kubeconfig-Dateien haben können, die in der Umgebungsvariable KUBECONFIG aufgelistet sind. In diesem Fall werden alle diese Dateien zu einer gemeinsamen Konfiguration während der Ausführung zusammengeführt. Sie können auch die standardmäßig verwendete kubeconfig-Datei ändern, indem Sie kubectl mit dem Parameter ausführen --kubeconfig. Siehe offizielle Dokumentation.

kubeconfig-Dateien

Schauen wir uns an, was genau die kubeconfig-Datei enthält:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Wie Sie sehen, enthält die kubeconfig-Datei eine Reihe von Kontexten. Ein Kontext besteht aus drei Elementen:

  • Cluster – die URL des API-Servers des Clusters.
  • Benutzer – Anmeldedaten für die Authentifizierung des Benutzers im Cluster.
  • Namespace – der Namensraum, der beim Verbinden mit dem Cluster verwendet wird.

In der Praxis wird oft ein Kontext pro Cluster in der kubeconfig-Datei verwendet. Es kann jedoch mehrere Kontexte pro Cluster geben, die sich in Bezug auf Benutzer oder Namensraum unterscheiden. Diese Konfiguration mit mehreren Kontexten ist jedoch selten, sodass normalerweise eine eindeutige Zuordnung zwischen Clustern und Kontexten besteht.

Zu jedem Zeitpunkt ist einer der Kontexte aktiv:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Wenn kubectl die Konfigurationsdatei liest, werden stets die Informationen aus dem aktuellen Kontext verwendet. Im obigen Beispiel wird sich kubectl mit dem Cluster Hare verbinden.

Um zu einem anderen Cluster zu wechseln, müssen Sie den aktuellen Kontext in der kubeconfig-Datei ändern:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Jetzt wird sich kubectl mit dem Cluster Fox verbinden.

Um im selben Cluster zu einem anderen Namensraum zu wechseln, müssen Sie den Wert des Elements namespace für den aktuellen Kontext ändern:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Im obigen Beispiel wird kubectl den Namensraum Prod des Clusters Fox verwenden (zuvor wurde der Namensraum Test festgelegt).

Bitte beachten Sie, dass kubectl auch die Parameter --cluster, --user, --namespace und --context, die es ermöglichen, einzelne Elemente sowie den aktuellen Kontext unabhängig von den Einstellungen in der kubeconfig-Datei zu überschreiben. Siehe kubectl options.

Theoretisch können Sie die Parameter in der kubeconfig-Datei manuell ändern. Aber das ist unpraktisch. Um diese Vorgänge zu vereinfachen, gibt es verschiedene Tools, die es ermöglichen, die Parameter automatisch zu ändern.

Verwenden Sie kubectx

Ein sehr beliebtes Tool zum Wechseln zwischen Clustern und Namespaces.

Das Tool bietet die Befehle kubectx und kubens zum Ändern des aktuellen Kontexts und des Namespaces.

Wie bereits erwähnt, bedeutet das Ändern des aktuellen Kontexts, dass der Cluster gewechselt wird, wenn Sie nur einen Kontext pro Cluster haben.

Hier ist ein Beispiel für die Ausführung dieser Befehle:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Im Wesentlichen bearbeiten diese Befehle einfach die kubeconfig-Datei, wie oben beschrieben.

Um kubectxzu installieren, folgen Sie den Anweisungen auf Github.

Beide Befehle unterstützen die Autovervollständigung von Kontext- und Namespace-Namen, sodass Sie diese nicht vollständig eingeben müssen. Anleitungen zur Einrichtung der Autovervollständigung hier.

Eine weitere nützliche Funktion ist der kubectx ist interaktive Modus. Er funktioniert zusammen mit dem Tool fzf, das separat installiert werden muss. Die Installation von fzf macht den interaktiven Modus automatisch in kubectxverfügbar. Im interaktiven Modus können Sie Kontext und Namespace über eine interaktive Suchoberfläche auswählen, die von fzf bereitgestellt wird.

Verwendung von Shell-Aliasen

Sie benötigen keine separaten Werkzeuge, um den aktuellen Kontext und den Namensraum zu ändern, denn kubectl bietet dafür ebenfalls Befehle an. So ermöglicht der Befehl kubectl config Unterbefehle zur Bearbeitung von kubeconfig-Dateien.

Hier sind einige davon:

  • kubectl config get-contexts: listet alle Kontexte auf;
  • kubectl config current-context: gibt den aktuellen Kontext zurück;
  • kubectl config use-context: wechselt den aktuellen Kontext;
  • kubectl config set-context: ändert ein Kontext-Element.

Es ist jedoch nicht sehr praktisch, diese Befehle direkt zu benutzen, da sie lang sind. Man kann für sie Shell-Aliasnamen erstellen, die leicht auszuführen sind.

Ich habe eine Reihe von Aliasnamen basierend auf diesen Befehlen erstellt, die eine Funktionalität ähnlich wie kubectx bieten. Hier können Sie ihre Verwendung sehen:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Bitte beachten Sie, dass die Aliasnamen fzf verwenden, um ein interaktives Interface mit freier Suche bereitzustellen (wie im interaktiven Modus von kubectx). Das bedeutet, dass Sie fzf installieren, um diese Aliasnamen zu verwenden.

Hier sind die Definitionen der Aliasnamen:

# Получить текущий контекст
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/^..//")"'

Um diese Aliasnamen zu installieren, fügen Sie die oben genannten Definitionen in Ihre Datei ein ~/.bashrc oder ~/.zshrc und starten Sie Ihre Shell neu.

Verwendung von Plugins

Kubectl ermöglicht das Laden von Plugins, die genauso wie die Hauptbefehle ausgeführt werden. Sie können beispielsweise das Plugin kubectl-foo installieren und es mit dem Befehl ausführen kubectl foo.

Es wäre praktisch, den Kontext und den Namespace auf diese Weise zu wechseln, indem Sie beispielsweise kubectl ctx zum Wechseln des Kontexts und kubectl ns zum Wechseln des Namensraums verwenden.

Ich habe zwei Plugins geschrieben, die dies ermöglichen:

Die Funktionsweise der Plugins basiert auf den Aliassen aus dem vorherigen Abschnitt.

So funktionieren sie:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Bitte beachten Sie, dass die Plugins fzf verwenden, um eine interaktive Schnittstelle für die freie Suche bereitzustellen (wie im interaktiven Modus von kubectx). Das bedeutet, dass Sie fzf installieren, um diese Aliasnamen zu verwenden.

Um die Plugins zu installieren, müssen Sie die Skripte mit den Namen kubectl-ctx und kubectl-ns in eines der Verzeichnisse Ihrer PATH-Variable herunterladen und sie ausführbar machen, zum Beispiel mit chmod +x. Danach können Sie kubectl ctx und kubectl ns.

5. Eingabeverkürzung mit Auto-Aliassen

Shell-Aliasse sind eine gute Möglichkeit, die Eingabe zu beschleunigen. Das Projekt kubectl-aliases enthält etwa 800 Abkürzungen für die wichtigsten kubectl-Befehle.

Sie könnten sich fragen: Wie behält man 800 Aliase im Kopf? Aber Sie müssen sich nicht alle merken, denn sie beruhen auf einem einfachen Schema, das unten dargestellt ist:

Wie Sie kubectl effektiver nutzen: Eine detaillierte Anleitung
Zum Beispiel:

  1. kgpooyaml — kubectl get pods oyaml
  2. ksysgsvcw — kubectl -n kube-system get svc w
  3. ksysrmcm — kubectl -n kube-system rm cm
  4. kgdepallsl — kubectl get deployment all sl

Wie Sie sehen, bestehen die Aliase aus Komponenten, die jeweils ein bestimmtes Element des kubectl-Befehls darstellen. Jeder Alias kann ein Komponenten für den Basisbefehl, die Operation und die Ressource sowie mehrere Komponenten für Parameter haben. Sie fügen einfach diese Komponenten von links nach rechts gemäß dem oben angegebenen Schema hinzu.

Der aktuelle detaillierte Plan ist auf GitHub. Dort finden Sie auch eine vollständige Liste der Aliasnamen.

Zum Beispiel ist der Alias kgpooyamlall gleichwertig mit dem Befehl kubectl get pods -o yaml --all-namespaces.

Die Reihenfolge der Optionen ist nicht wichtig: Der Befehl kgpooyamlall ist gleichbedeutend mit dem Befehl kgpoalloyaml.

Sie müssen nicht alle Komponenten als Aliase verwenden. Zum Beispiel k, kg, klo, ksys, kgpo kann ebenfalls verwendet werden. Darüber hinaus können Sie in der Befehlszeile Aliase und normale Befehle oder Optionen kombinieren:

Zum Beispiel:

  1. Anstelle von kubectl proxy kann geschrieben werden als k proxy.
  2. Anstelle von kubectl get roles kann geschrieben werden als kg roles (derzeit existiert kein Alias für die Ressource Roles).
  3. Um Daten zu einem bestimmten Pod zu erhalten, können Sie den Befehl verwenden kgpo my-pod — kubectl get pod my-pod.

Bitte beachten Sie, dass einige Aliase ein Argument in der Befehlszeile benötigen. Zum Beispiel der Alias kgpol bedeutet kubectl get pods -l. Die Option -l verlangt ein Argument – eine Labelspezifikation. Wenn Sie den Alias verwenden, sollte dieser wie folgt aussehen kgpol app=ui.

Da einige Aliase Argumente erfordern, sollten die Aliase a, f und l zuletzt verwendet werden.

Im Allgemeinen, sobald Sie dieses Schema beherrschen, können Sie intuitiv Aliase aus den Befehlen ableiten, die Sie ausführen möchten, und viel Zeit beim Eingeben sparen.

Installation

Um kubectl-aliases zu installieren, müssen Sie die Datei .kubectl_aliases von GitHub herunterladen und in die Datei einfügen ~/.bashrc oder ~/.zshrc:

source ~/ .kubectl_aliases

Automatische Vervollständigung

Wie bereits erwähnt, fügen Sie häufig zusätzliche Wörter zum Alias in der Befehlszeile hinzu. Zum Beispiel:

$ kgpooyaml test-pod-d4b77b989

Wenn Sie die Autovervollständigung des Befehls kubectl verwenden, haben Sie wahrscheinlich Autovervollständigung für Dinge wie Ressourcennamen genutzt. Aber ist es möglich, dies auch für Aliase zu tun?

Das ist eine sehr wichtige Frage, denn wenn die Autovervollständigung nicht funktioniert, entgehen Ihnen einige der Vorteile von Aliasen.

Die Antwort hängt davon ab, welche Shell Sie verwenden:

  1. Für Zsh funktioniert die Autovervollständigung für Aliase "out of the box".
  2. Für Bash sind leider einige Schritte erforderlich, um die Autovervollständigung zum Laufen zu bringen.

Aktivierung der Autovervollständigung für Aliase in Bash

Das Problem mit Bash besteht darin, dass es versucht, (jedes Mal, wenn Sie Tab drücken) den Alias zu vervollständigen, anstatt den Befehl, auf den der Alias verweist (wie es Zsh tut). Da Sie keine Autovervollständigungs-Skripte für alle 800 Aliase haben, funktioniert die Autovervollständigung nicht.

Projekt complete-alias stellt eine allgemeine Lösung für dieses Problem bereit. Es schließt sich dem Autovervollständigungsmechanismus für Aliase an, vervollständigt den Alias intern zum Befehl und gibt die Vervollständigungsoptionen für den vervollständigten Befehl zurück. Das bedeutet, dass die Vervollständigung für einen Alias genau so funktioniert wie für einen vollständigen Befehl.

Ich werde zunächst erklären, wie man complete-alias installiert, und dann, wie man es so konfiguriert, dass die Vervollständigung für alle kubectl-Aliase aktiviert wird.

Installation von complete-alias

Zunächst einmal hängt complete-alias von bash-completion. Daher müssen Sie vor der Installation von complete-alias sicherstellen, dass bash-completion installiert ist. Die Installationsanleitungen wurden zuvor für Linux und MacOS bereitgestellt.

Wichtiger Hinweis für MacOS-Nutzer: Wie das Autocomplete-Skript für kubectl funktioniert auch complete-alias nicht mit Bash 3.2, das standardmäßig in MacOS verwendet wird. Insbesondere hängt complete-alias von bash-completion v2 ab (brew install bash-completion@2), das mindestens Bash 4.1 erfordert. Das bedeutet, dass Sie eine neuere Version von Bash installieren müssen, um complete-alias in MacOS verwenden zu können.

Sie müssen das Skript bash_completion.sh von aus dem GitHub-Repository herunterladen und es in Ihrer Datei aktivieren ~/.bashrc:

source ~/bash_completion.sh

Nach dem Neustart der Befehlszeile wird complete-alias vollständig installiert sein.

Aktivierung der Autovervollständigung für kubectl-Alias

Technisch gesehen bietet complete-alias die Shell-Funktion _complete_alias. Diese Funktion überprüft den Alias und gibt Vorschläge zur Vervollständigung für den Alias-Befehl zurück.

Um die Funktion mit einem bestimmten Alias zu verknüpfen, müssen Sie den integrierten Mechanismus von Bash complete, verwenden, um _complete_alias als Alias-Vervollständigungsfunktion festzulegen.

Nehmen wir als Beispiel den Alias k, der den Befehl kubectl darstellt. Um zu installieren _complete_alias Um die Autocomplete-Funktion für dieses Alias zu aktivieren, führen Sie bitte den folgenden Befehl aus:

$ complete -F _complete_alias k

Das Ergebnis ist, dass jedes Mal, wenn Sie das Alias k automatisch vervollständigen, die Funktion _complete_aliasaufgerufen wird, die das Alias überprüft und Autocomplete-Vorschläge für den Befehl zurückgibt. kubectl.

Als zweites Beispiel nehmen wir das Alias kg, das steht für kubectl get:

$ complete -F _complete_alias kg

Genau wie im vorherigen Beispiel erhalten Sie bei der automatischen Vervollständigung von kg dieselben Vorschläge, die Sie für kubectl get.

bekommen würden. Beachten Sie, dass complete-alias für jedes Alias in Ihrem System verwendet werden kann.

Um die automatische Vervollständigung für alle kubectl-Alias zu aktivieren, müssen Sie den oben genannten Befehl für jedes einzelne ausführen. Der folgende Code-Ausschnitt tut genau das, vorausgesetzt, Sie haben kubectl-aliases in ~/.kubectl-aliases:

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

Dieser Codeabschnitt sollte in Ihre ~/.bashrcplatziert werden, die Kommandozeile neu geladen werden und die automatische Vervollständigung für alle 800 kubectl-Alias wird verfügbar sein.

6. Erweiterung von kubectl durch Plugins

Seit Version 1.12, unterstützt kubectl Plugin-Mechanismus, der es ermöglicht, die Funktionen mit zusätzlichen Befehlen zu erweitern.

Wenn Sie mit den Git-Plugin-Mechanismen vertraut sind, dann sind die kubectl-Plugins nach demselben Prinzip aufgebaut.

In diesem Kapitel erklären wir, wie man Plugins installiert, wo man sie findet und wie man eigene Plugins erstellt.

Installation von Plugins

Die kubectl-Plugins werden als einfache ausführbare Dateien mit einem Namen im Format kubectl-xverbreitet. Das Präfix kubectl- ist obligatorisch, gefolgt von einem neuen Subbefehl von kubectl, der auf das Plugin zugreift.

Zum Beispiel wird das Plugin hello in Form einer Datei mit dem Namen kubectl-hello.

verbreitet. Um ein Plugin zu installieren, kopieren Sie die Datei kubectl-x in ein beliebiges Verzeichnis in Ihrer PATH-Variable und machen Sie sie ausführbar, zum Beispiel mit chmod +x. Nachdem dies geschehen ist, können Sie das Plugin über kubectl x.

aufrufen. Sie können den folgenden Befehl verwenden, um eine Liste aller Plugins anzuzeigen, die derzeit in Ihrem System installiert sind:

$ kubectl plugin list

Dieser Befehl zeigt auch Warnungen an, wenn Sie mehrere Plugins mit denselben Namen haben oder wenn es eine Plugin-Datei gibt, die nicht ausführbar ist.

Plugin-Suche und -Installation mit Krew

Kubectl-Plugins sind wie Softwarepakete für gemeinsame oder wiederholte Nutzung geeignet. Aber wo findet man die Plugins, die andere geteilt haben?

Das Krew-Projekt zielt darauf ab, eine einheitliche Lösung zum Teilen, Suchen, Installieren und Verwalten von kubectl-Plugins bereitzustellen. Das Projekt bezeichnet sich selbst als „Paketmanager für kubectl-Plugins“ (Krew ist ähnlich wie Brew).

). Krew ist eine Liste von kubectl-Plugins, die Sie auswählen und installieren können. Zudem ist Krew auch ein Plugin für kubectl.

Das bedeutet, dass die Installation von Krew im Grunde wie die Installation eines anderen kubectl-Plugins funktioniert. Detaillierte Anweisungen finden Sie auf der GitHub-Seite.

Die wichtigsten Krew-Befehle:

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

Beachten Sie, dass die Installation von Plugins mit Krew die Installation von Plugins auf die oben beschriebene Standardweise nicht beeinträchtigt.

Bitte beachten Sie, dass der Befehl kubectl krew list nur die Plugins anzeigt, die mit Krew installiert wurden, während der Befehl kubectl plugin list alle Plugins auflistet, also sowohl die, die mit Krew installiert wurden, als auch die, die auf andere Weise installiert wurden.

Plugins an anderen Orten suchen

Krew ist ein junges Projekt, das derzeit eine Liste von insgesamt etwa 30 Plugins enthält. Wenn Sie nicht finden können, was Sie brauchen, können Sie Plugins auch anderswo finden, zum Beispiel auf GitHub.

Ich empfehle, den Abschnitt auf GitHub zu besuchen kubectl-plugins. Dort finden Sie mehrere Dutzend verfügbare Plugins, die einen Blick wert sind.

Eigene Plugins schreiben

Sie können selbst Plugins erstellen — das ist nicht schwer. Sie müssen eine ausführbare Datei erstellen, die das gewünschte tut, sie benennen in kubectl-x und installieren, wie oben beschrieben.

Die Datei kann ein Bash-Skript, ein Python-Skript oder eine kompilierte Go-Anwendung sein — das ist nicht wichtig. Die einzige Voraussetzung ist, dass es direkt im Betriebssystem ausführbar sein muss.

Lassen Sie uns jetzt ein Beispiel-Plugin erstellen. Im vorherigen Abschnitt haben Sie den Befehl kubectl verwendet, um eine Liste der Container für jedes Pod auszugeben. Diese Befehle können leicht in ein Plugin verwandelt werden, das Sie zum Beispiel mit kubectl img.

aufrufen können. Erstellen Sie eine Datei kubectl-img

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

mit folgendem Inhalt: Machen Sie die Datei jetzt mit chmod +x kubectl-img kubectl img.

Wie bereits erwähnt, können kubectl-Plugins in jeder Programmiersprache oder Skriptsprache geschrieben werden. Wenn Sie Shell-Skripte verwenden, haben Sie den Vorteil, dass Sie kubectl einfach aus dem Plugin heraus aufrufen können. Sie können jedoch auch komplexere Plugins in echten Programmiersprachen schreiben, indem Sie die Kubernetes-Clientbibliothek. Wenn Sie Go verwenden, können Sie auch die cli-runtime-Bibliothek, die speziell für das Schreiben von kubectl-Plugins entwickelt wurde, verwenden.

Wie man seine Plugins teilt

Wenn Sie denken, dass Ihre Plugins für andere nützlich sein könnten, zögern Sie nicht, sie auf GitHub zu teilen. Stellen Sie sicher, dass Sie sie in das Thema kubectl-plugins.

aufnehmen. Sie können auch anfragen, dass Ihr Plugin zurKrew-Liste hinzugefügt wird. Anweisungen, wie Sie das tun können, finden Sie im.

GitHub-Repository.

Auto-Vervollständigung von Befehlen

Derzeit unterstützen Plugins keine Auto-Vervollständigung. Das bedeutet, dass Sie den vollständigen Namen des Plugins und die vollständigen Namen der Argumente eingeben müssen. Im GitHub-Repository von kubectl gibt es für diese Funktioneinen offenen Request.

Viel Glück!!!

Weitere Lesetipps zu diesem Thema:

  1. Drei Ebenen des automatischen Skalierens in Kubernetes und wie man sie effektiv nutzt.
  2. Kubernetes im Geiste der Piraterie mit einem Implementierungsschema.
  3. Unser Kanal Rund um Kubernetes auf Telegram.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster