Einführung
kubectl ist das Befehlszeilen-Tool, das Sie während Ihrer gesamten Arbeit im CKAD-Umfeld verwenden werden. Bevor Sie Pods, Deployments, Services oder Konfigurationsobjekte erstellen, müssen Sie wissen, mit welchem Cluster kubectl kommuniziert und welcher Namespace standardmäßig für Ihre Befehle verwendet wird.
In diesem Lab untersuchen Sie den aktiven Kubernetes-Kontext, listen Namespaces auf, legen einen Übungs-Namespace als aktuellen Namespace fest und erstellen eine kleine ConfigMap, um zu sehen, wie namespaced Objekte voneinander isoliert sind. Die Überprüfungen konzentrieren sich auf den von Ihnen erstellten Kubernetes-Zustand und nicht auf die exakte Formatierung der Befehlsausgabe.
kubectl-Zugriff bestätigen
In diesem Schritt bestätigen Sie, dass kubectl den vorbereiteten Kubernetes-Cluster erreichen kann, und identifizieren den Kontext, den Ihre Befehle verwenden.
Beginnen Sie in /home/labex/project. Der Befehl mkdir -p erstellt das Verzeichnis, falls es noch nicht existiert, und richtet keinen Schaden an, falls es bereits vorhanden ist. Dieser Kurs speichert die Arbeit der Lernenden in diesem Verzeichnis, damit spätere Labs Manifeste und Hilfsdateien an einem vorhersehbaren Ort erstellen können.
mkdir -p /home/labex/project
cd /home/labex/project
Ein Kubernetes-Kontext ist eine gespeicherte Verbindungseinstellung in Ihrer kubeconfig. Er teilt kubectl mit, welcher Cluster, welche Benutzeranmeldeinformationen und welcher Standard-Namespace verwendet werden sollen. Überprüfen Sie den aktiven Kontext, bevor Sie Befehle ausführen, die Objekte verändern.
kubectl config current-context
Sie sollten den Namen des vorbereiteten LabEx-Kubernetes-Profils sehen:
labex-v135
Um einen vorhersehbaren Ausgangspunkt zu haben, setzen Sie den Namespace des aktuellen Kontexts auf default. Sie erstellen hier kein Objekt; Sie teilen kubectl lediglich mit, welcher Namespace verwendet werden soll, wenn ein späterer namespaced Befehl das Flag --namespace weglässt.
kubectl config set-context --current --namespace=default
Die Ausgabe sollte bestätigen, dass der aktuelle Kontext aktualisiert wurde:
Context "labex-v135" modified.
Das Kubernetes-Profil benötigt möglicherweise einen kurzen Moment, um nach dem Start der VM vollständig bereit zu sein. Listen Sie zuerst die Cluster-Nodes auf. Falls dieser Befehl meldet, dass der API-Server noch nicht bereit ist, warten Sie einige Sekunden und führen Sie den Befehl erneut aus, bis Sie einen Ready-Node sehen.
kubectl get nodes --request-timeout=5s
Die erwartete Ausgabe enthält einen bereiten Node und eine Kubernetes-Version:
NAME STATUS ROLES AGE VERSION
labex-v135 Ready control-plane ... v1.35...
Fragen Sie nun den API-Server nach grundlegenden Cluster-Informationen. Dies beweist, dass Ihr Terminal nicht nur die kubectl-Binary findet, sondern tatsächlich bei einem laufenden Cluster authentifiziert ist.
kubectl cluster-info
Die Ausgabe sollte einen Kubernetes-Control-Plane-Endpunkt erwähnen:
Kubernetes control plane is running at ...
...
Namespaces lesen
In diesem Schritt untersuchen Sie Kubernetes-Namespaces und prüfen, welcher Namespace standardmäßig von Ihrem aktuellen Kontext verwendet wird.
Namespaces sind eine Möglichkeit, namespaced Kubernetes-Objekte innerhalb desselben Clusters in separate Bereiche zu unterteilen. Viele Anwendungsressourcen wie Pods, Deployments, Services, Secrets und ConfigMaps befinden sich in genau einem Namespace.
Listen Sie die Namespaces auf, die bereits im Cluster existieren:
kubectl get namespaces
Sie sollten System-Namespaces wie kube-system sowie den gewöhnlichen Anwendungs-Namespace default sehen:
NAME STATUS AGE
default Active ...
kube-system Active ...
...
Ihr Kontext kann auch einen Standard-Namespace speichern. Wenn Sie einen namespaced Befehl ohne --namespace ausführen, verwendet kubectl diesen Standard-Namespace. Die Option --minify zeigt nur den aktiven Kontext an, und der jsonpath-Ausdruck gibt nur das Namespace-Feld aus.
kubectl config view --minify --output 'jsonpath={..namespace}'; echo
Da Sie den Kontext-Namespace im vorherigen Schritt festgelegt haben, wird hier default ausgegeben:
default
Sie können den aktuellen Namespace für einen einzelnen Befehl jederzeit mit --namespace überschreiben. Untersuchen Sie beispielsweise die Pods im Kubernetes-System-Namespace, ohne Ihren Kontext zu ändern:
kubectl get pods --namespace kube-system
Die genauen Pod-Namen können variieren, aber der Befehl sollte System-Pods wie CoreDNS, Netzwerk- oder Speicherkomponenten zurückgeben:
NAME READY STATUS RESTARTS AGE
... ... ... ... ...
Einen Übungs-Namespace auswählen
In diesem Schritt erstellen Sie einen Namespace für dieses Lab und machen ihn zum Standard-Namespace für spätere Befehle.
Erstellen Sie einen Namespace namens ckad-prep-contexts. Namespace-Namen sind Teil der Objektidentität: Eine ConfigMap namens app-settings in einem Namespace unterscheidet sich von einer ConfigMap mit demselben Namen in einem anderen Namespace.
kubectl create namespace ckad-prep-contexts
Der Erstellungsbefehl sollte den neuen Namespace bestätigen:
namespace/ckad-prep-contexts created
Aktualisieren Sie nun nur den aktuellen Kontext, sodass Befehle ohne --namespace auf ckad-prep-contexts abzielen. Die Option --current bedeutet „ändere den Kontext, den ich gerade verwende“, anstatt einen Kontext manuell benennen zu müssen.
kubectl config set-context --current --namespace=ckad-prep-contexts
Die Ausgabe bestätigt, dass der Kontext geändert wurde:
Context "labex-v135" modified.
Überprüfen Sie erneut den im aktiven Kontext gespeicherten Namespace:
kubectl config view --minify --output 'jsonpath={..namespace}'; echo
Es sollte nun Folgendes ausgegeben werden:
ckad-prep-contexts
Führen Sie eine einfache Pod-Auflistung ohne --namespace aus. Da der aktuelle Namespace nun ckad-prep-contexts ist, sucht dieser Befehl innerhalb Ihres Übungs-Namespaces. Es ist normal, dass der Namespace leer ist.
kubectl get pods
Erwartete Ausgabe:
No resources found in ckad-prep-contexts namespace.
Namespace-Scoping beobachten
In diesem Schritt erstellen Sie eine kleine ConfigMap und verwenden sie, um zu beobachten, wie sich der aktuelle Namespace auf die Objektsuche auswirkt.
Eine ConfigMap speichert nicht-sensible Konfigurationsdaten für Anwendungen. Sie ist leichtgewichtig, schnell zu erstellen und namespaced, was sie nützlich macht, um das Namespace-Verhalten zu üben, bevor Sie echte Anwendungen bereitstellen.
Erstellen Sie eine ConfigMap namens app-settings, ohne --namespace zu übergeben. Da Sie im vorherigen Schritt ckad-prep-contexts ausgewählt haben, erstellt Kubernetes sie in diesem Namespace.
kubectl create configmap app-settings --from-literal=mode=prep
Der Befehl sollte Folgendes melden:
configmap/app-settings created
Listen Sie die ConfigMap ohne Namespace-Flag auf. Dies verwendet den Namespace des aktuellen Kontexts.
kubectl get configmap app-settings
Erwartete Ausgabe:
NAME DATA AGE
app-settings 1 ...
Fragen Sie nun dasselbe Objekt mit einem expliziten Namespace ab. Dies sollte dieselbe ConfigMap zurückgeben, da ckad-prep-contexts der Ort ist, an dem Sie sie erstellt haben.
kubectl get configmap app-settings --namespace ckad-prep-contexts
Überprüfen Sie abschließend den default-Namespace. Die Option --ignore-not-found sorgt dafür, dass kubectl erfolgreich beendet wird und nichts ausgibt, wenn das Objekt nicht existiert. Dies ist nützlich für ein geführtes Lab, da das Fehlen hier das erwartete Ergebnis ist.
kubectl get configmap app-settings --namespace default --ignore-not-found
Keine Ausgabe bedeutet, dass die ConfigMap nicht im default-Namespace erstellt wurde. Sie haben nun die praktische Auswirkung der Einstellung des Namespaces in Ihrem aktuellen Kontext gesehen.
Zusammenfassung
Sie haben bestätigt, dass kubectl den vorbereiteten Kubernetes-Cluster erreichen kann, den aktiven Kontext identifiziert, bestehende Namespaces untersucht, den Namespace des aktuellen Kontexts geändert und eine ConfigMap erstellt, um das Namespace-Scoping zu beobachten. Diese Grundlagen bilden das Fundament für die späteren CKAD-Vorbereitungs-Labs, in denen Sie Anwendungsobjekte erstellen werden und genau wissen müssen, wo jedes Objekt erstellt und untersucht wird.


