Einführung
In diesem Lab erfahren Sie, wie Sie den Kubernetes-Befehl exec verwenden können, um Befehle innerhalb eines Containers auszuführen, der in einem Kubernetes-Pod läuft. Sie beginnen mit einfachen Beispielen und arbeiten sich schrittweise zu komplexeren Szenarien vor.
Starten Sie das Minikube-Cluster
Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.
Navigieren Sie zu Ihrem Arbeitsverzeichnis:
Öffnen Sie das Terminal und navigieren Sie zum Standard-Projektordner:
cd /home/labex/projectStarten Sie Minikube:
Starten Sie Minikube, um einen Kubernetes-Cluster zu initialisieren:
minikube start- Dieser Befehl richtet einen Ein-Knoten-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
- Minikube kann je nach Leistung Ihres Systems einige Minuten dauern, um zu starten.
Überprüfen Sie, ob Minikube läuft:
Überprüfen Sie den Status des Minikube-Clusters:
minikube status- Suchen Sie nach Komponenten wie
kubeletundapiserver, die alsRunningaufgeführt sind. - Wenn der Cluster nicht läuft, führen Sie
minikube starterneut aus.
- Suchen Sie nach Komponenten wie
Wenn Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.
Entdecken Sie den kubectl exec-Befehl
Der kubectl exec-Befehl wird verwendet, um Befehle direkt innerhalb eines Containers in einem Pod auszuführen. Er ist besonders nützlich für das Debugging und die Inspektion von Container-Umgebungen.
Führen Sie den folgenden Befehl aus, um die verfügbaren Optionen für kubectl exec anzuzeigen:
kubectl exec -h
Sie werden die folgende Ausgabe sehen:
Führt einen Befehl in einem Container aus.
Beispiele:
## Holen Sie die Ausgabe des Befehls 'date' aus dem Pod mypod, standardmäßig aus dem ersten Container
kubectl exec mypod -- date
## Holen Sie die Ausgabe des Befehls 'date' aus dem Container ruby-container im Pod mypod
kubectl exec mypod -c ruby-container -- date
## Wechseln Sie in den Roh-Terminalmodus; sendet die Standardeingabe an 'bash' im Container ruby-container im Pod mypod
## und sendet die Standardausgabe/Fehlerausgabe von 'bash' zurück an den Client
kubectl exec mypod -c ruby-container -i -t -- bash -il
## Listen Sie den Inhalt von /usr aus dem ersten Container des Pods mypod auf und sortieren Sie ihn nach Änderungszeit
## Wenn der Befehl, den Sie im Pod ausführen möchten, gemeinsame Flags hat (z. B. -i),
## müssen Sie zwei Bindestriche (--) verwenden, um die Flags/Argumente Ihres Befehls zu trennen
## Beachten Sie auch, umgeben Sie Ihren Befehl und seine Flags/Argumente nicht mit Anführungszeichen,
## es sei denn, das ist die normale Art, ihn auszuführen (d. h., führen Sie ls -t /usr aus, nicht "ls -t /usr")
kubectl exec mypod -i -t -- ls -t /usr
## Holen Sie die Ausgabe des Befehls 'date' aus dem ersten Pod der Bereitstellung mydeployment, standardmäßig aus dem ersten Container
kubectl exec deploy/mydeployment -- date
## Holen Sie die Ausgabe des Befehls 'date' aus dem ersten Pod des Dienstes myservice, standardmäßig aus dem ersten Container
kubectl exec svc/myservice -- date
Ausführen eines Befehls in einem Container
In diesem Schritt erfahren Sie, wie Sie einen Befehl in einem Container ausführen, der in einem Pod läuft.
Beginnen Sie mit der Erstellung einer Bereitstellung (deployment) mit einer Replik (replica) und einem Nginx-Container:
kubectl create deployment nginx --image=nginx --replicas=1Warten Sie, bis der Pod bereit ist:
kubectl wait --for=condition=Ready pod -l app=nginxVerwenden Sie den
kubectl exec-Befehl, um einen Befehl innerhalb des Nginx-Containers auszuführen:kubectl exec -it POD_NAME -- /bin/bashErsetzen Sie
POD_NAMEdurch den Namen des in Schritt 1 erstellten Pods. Sie können denPOD_NAMEmit dem Befehlkubectl get pod -l app=nginxabrufen.
Ausführen eines Befehls in einem bestimmten Container
In diesem Schritt erfahren Sie, wie Sie einen Befehl in einem bestimmten Container ausführen, der in einem Pod mit mehreren Containern läuft.
Erstellen Sie einen Pod mit zwei Containern: Nginx und BusyBox:
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: nginx-busybox spec: containers: - name: nginx image: nginx - name: busybox image: busybox command: - sleep - "3600" EOFWarten Sie, bis der Pod bereit ist:
kubectl wait --for=condition=Ready pod nginx-busyboxVerwenden Sie den
kubectl exec-Befehl, um einen Befehl innerhalb des BusyBox-Containers auszuführen:kubectl exec nginx-busybox -c busybox -- ls /bin
Ausführen eines Befehls mit einem Tty
In diesem Schritt erfahren Sie, wie Sie einen Befehl mit einer TTY (Terminal) in einem Container ausführen.
Verwenden Sie den
kubectl exec-Befehl mit den Optionen-it, um einen Befehl mit einer TTY auszuführen:kubectl exec -it nginx-busybox -- /bin/shSobald Sie sich in der Container-Shell befinden, führen Sie einen Befehl aus:
echo "Hello, world!"Verlassen Sie die Container-Shell:
exit
Ausführen eines Befehls mit Umgebungsvariablen
In diesem Schritt erfahren Sie, wie Sie einen Befehl mit Umgebungsvariablen innerhalb eines Containers ausführen.
Erstellen Sie eine Bereitstellung (deployment) mit einer Replik (replica) und einem Nginx-Container mit einer Umgebungsvariablen:
kubectl run nginx-env --image=nginx --env="MY_VAR=my-value"Warten Sie, bis der Pod bereit ist:
kubectl wait --for=condition=Ready pod -l run=nginx-envVerwenden Sie den
kubectl exec-Befehl, um einen Befehl innerhalb des Nginx-Containers auszuführen, der die Umgebungsvariable ausgibt:kubectl exec nginx-env -- sh -c 'echo $MY_VAR'Ersetzen Sie
nginx-envdurch den Namen des in Schritt 1 erstellten Pods.
Zusammenfassung
Herzlichen Glückwunsch, Sie haben das Lab zum Kubernetes exec-Befehl erfolgreich abgeschlossen! In diesem Lab haben Sie gelernt, wie Sie den kubectl exec-Befehl verwenden, um Befehle innerhalb von Containern auszuführen, die in Kubernetes-Pods laufen. Sie haben auch gelernt, wie Sie Befehle in bestimmten Containern ausführen, Befehle mit einer TTY ausführen und Befehle mit Umgebungsvariablen ausführen. Diese Fähigkeiten sind für die Fehlersuche in einem Kubernetes-Cluster unerlässlich.


