Verwalten Sie Kubernetes Cluster mit PowerShell und kubectl
Erfahren Sie, wie Sie Kubernetes mit PowerShell und kubectl effizient verwalten und Werkzeuge wie Aliasing, Automatische Vervollständigung, JSON-Parsing nutzen.
Wenn es um die Verwaltung eines Kubernetes-Clusters geht, ist kubectl das beliebteste Kommandozeilen-Tool. Egal, welche Plattform oder Shell Sie verwenden: wahrscheinlich gibt es eine passende Version von kubectl für Sie.
Der einzige wirkliche Unterschied zwischen der Verwendung von kubectl in der PowerShell und Bash besteht darin, welche Tools zum Parsen der Ausgabe zur Verfügung stehen. Tools wie grep, awk oder jq funktionieren, aber mit ein wenig Know-how parsen Sie auch JSON-Ausgaben innerhalb der PowerShell mit integrierten Cmdlets.
In diesem Artikel erläutern wir anhand eines Beispiels, wie Sie Aliasing und Autovervollständigung in kubectl einrichten, die JSON-Ausgabe von kubectl analysieren und das PowerShell-Cmdlet Select-String zum Durchsuchen der Protokollausgabe verwenden.
So richten Sie kubectl in PowerShell ein
Um diesem Tutorial zu folgen, stellen Sie zunächst sicher, dass Sie kubectl installiert haben.
Kubectl-Aliasierung in PowerShell
Ein guter erster Schritt bei der Einrichtung von PowerShell zur Verwaltung von Kubernetes auf einem neuen Gerät ist das Aliasing von kubectl-Befehlen. Aliasing in PowerShell ist eine Technik, bei der ein alternativer Name verwendet wird, um einen Befehl zu referenzieren.
Um beispielsweise zu vermeiden, dass Sie kubectl immer wieder eingeben müssen, können Sie stattdessen kubectl den Alias k geben. Legen Sie mit dem Cmdlet New-Alias den Aliasnamen mit dem Parameter -Name fest und bestimmen Sie den Wert des Zielbefehls mit dem Parameter -Value:
New-Alias -Name 'k' -Wert 'kubectl'
Nachdem Sie diesen Alias eingerichtet haben, kürzen Sie kubectl immer mit k ab, wodurch Sie bei jedem Aufruf von Kubernetes sechs Zeichen sparen. Um diesen Alias über Startsitzungen hinweg zu verwenden, fügen Sie ihn zu Ihrem PowerShell-Profil hinzu, das den Alias automatisch zuordnet.
kubectl completion powershell | Out-String | Invoke-Expression
Verwenden Sie als Nächstes den folgenden Befehl, um die Autovervollständigung für kubectl-Befehle in der PowerShell-Konsole einzurichten:
kubectl completion powershell | Out-File $PROFILE -Append
Fügen Sie die Autovervollständigung mit dem folgenden Befehl zu Ihrem PowerShell-Profil hinzu:
kubectl completion powershell | Out-File $PROFILE -Append
Geben Sie nach Abschluss dieses Schritts k oder kubectl ein und drücken Sie die Tabulatortaste, um die verfügbaren Befehle zu durchlaufen.
Parsen der JSON-Ausgabe von kubectl
Eine der einfachsten Möglichkeiten, Daten von kubectl in PowerShell zu verarbeiten, besteht darin, den Ausgabetyp auf JSON zu setzen und dann über die Pipeline an ConvertFrom-Json zu übergeben. Kubectl verwendet den Parameter -o, um den Ausgabetyp zu ändern. Übergeben Sie json an diesen Parameter, um JSON-Daten abzurufen.
Der folgende Befehl ruft zum Beispiel alle Pods ab und konvertiert sie in PowerShell-Objekte:
k get pod -o json | ConvertFrom-Json
Die Ausführung dieses Befehls führt zu der in Abbildung 1 dargestellten Ausgabe.
Um eine detaillierte Ausgabe zu den Pods anzuzeigen, führen Sie den folgenden Code aus, der die Eigenschaft items untersucht:
(k get pod -o json | ConvertFrom-Json).items
Wenn Sie die JSON-Ausgabe in kubectl einrichten, können Sie PowerShell-Cmdlets wie Where-Object, Select-Object und Format-Table verwenden. Um zum Beispiel alle Pods zu finden, die weniger als einen Tag alt sind, nutzen Sie den folgenden Befehl:
(k get pod -o json | ConvertFrom-Json).items | ?{$_.metadata.creationTimestamp -gt (get-date).AddDays(-1)}
Führen Sie in ähnlicher Weise den folgenden Befehl aus, um alle mit einem bestimmten Volume verbundenen Pods zu finden:
(k get pod -o json | ConvertFrom-Json).items | ?{$_.spec.volumes.name -contains 'certs'}
Verwenden des Cmdlets Select-String in PowerShell
Mit dem Cmdlet Select-String durchsuchen Sie Text in PowerShell nach regulären Ausdrücken (Regular Expressions). Für diejenigen, die mit regulären Ausdrücken nicht vertraut sind, ist es möglich, mit Select-String auch nach bestimmten Zeichenfolgen suchen, die keine regulären Ausdrücke sind.
Wie bei kubectl ist es hilfreich, einen Alias für Select-String zu verwenden. In diesem Fall bietet PowerShell bereits einen integrierten Alias: sls.
Select-String ist besonders nützlich für die Suche in den Ausgaben des Befehls logs. Führen Sie beispielsweise den folgenden Code aus, um in der Ausgabe nach dem Wort error zu suchen, wobei $pod der Name eines Ihrer Pods ist:
k logs $pod | sls error
In Abbildung 4 sehen Sie, wie Select-String die gesuchten Passagen hervorhebt. Das ist bei der Suche nach regulären Ausdrücken sehr nützlich, da Sie so nichts übersehen können.
Der folgende Befehl hebt zum Beispiel alle Globally Unique Identifiers (GUIDs) in der Protokollausgabe hervor, indem er Select-String und einen regulären Ausdruck zum Erfassen von GUIDs verwendet.
k logs $pod --tail 10 | sls '[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}'
Beim Durchsuchen der Protokollausgabe nach einer Zeichenkette, die Sonderzeichen enthält, wie zum Beispiel URLs, sind weitere Aspekte zu beachten. Schrägstriche und Punkte sind Sonderzeichen in regulären Ausdrücken, und Sie können auf andere Sonderzeichen stoßen, ohne sie zu erkennen. Um nachzuschlagen, welche Zeichen in regulären Ausdrücken Sonderzeichen sind, geben Sie alle potenziellen Sonderzeichen mit dem PowerShell-Befehl [regex]::Escape() aus.
Verwenden Sie beispielsweise den folgenden Befehl, um die Protokollausgabe nach der Zeichenfolge https://localhost/ zu durchsuchen:
k logs $pod | sls ([regex]::Escape('https://localhost/'))
Die Zielzeichenkette wird in der Ausgabe hervorgehoben, wie in Abbildung 5 dargestellt.
Kubernetes und PowerShell sind jeweils für sich genommen leistungsstarke Tools, und wenn Sie sie zusammen verwenden, können Sie viel Zeit sparen. Auch, wenn viele Bash-Befehle für die effizientere Verwaltung von Kubernetes präferieren, lohnte es sich, die Vorteile von PowerShell-Objekten und der PowerShell-Pipeline für kubectl zu erkunden.