Einführung
In Kubernetes sind Pods flüchtig und können jederzeit beendet und neu erstellt werden. Dies stellt eine Herausforderung für das Networking dar, da es schwierig ist, eine direkte Verbindung zu einem Pod herzustellen. Um dieses Problem zu lösen, bietet Kubernetes eine Abstraktion auf höherer Ebene namens Service. Ein Service stellt eine stabile IP-Adresse und einen DNS-Namen für eine Gruppe von Pods bereit, wodurch andere Komponenten problemlos eine Verbindung zu ihnen herstellen können. In diesem Lab lernen Sie, wie Sie Pods in Kubernetes mithilfe von Services vernetzen.
Starten des Minikube-Clusters
Bevor Sie Ressourcen erstellen können, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichtgewichtige Kubernetes-Umgebung, die auf Ihrem lokalen Rechner ausgeführt wird.
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 Single-Node-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
- Je nach Leistung Ihres Systems kann der Start von Minikube einige Minuten in Anspruch nehmen.
Überprüfen Sie, ob Minikube läuft:
Überprüfen Sie den Status des Minikube-Clusters:
minikube status- Achten Sie darauf, dass Komponenten wie
kubeletundapiserveralsRunningaufgeführt sind. - Falls der Cluster nicht läuft, führen Sie
minikube starterneut aus.
- Achten Sie darauf, dass Komponenten wie
Sollten beim Starten von Minikube Probleme auftreten, verwenden Sie bei Bedarf minikube delete, um die Umgebung zurückzusetzen.
Erstellen eines Pods
Der erste Schritt besteht darin, einen einfachen Pod zu erstellen. Erstellen Sie eine Datei namens /home/labex/project/myapp-pod.yaml mit folgendem Inhalt:
apiVersion: v1
kind: Pod
metadata:
name: my-pod-1
labels:
app: nginx
spec:
containers:
- name: my-container
image: nginx
Speichern Sie die Datei und erstellen Sie den Pod, indem Sie den folgenden Befehl ausführen:
minikube kubectl -- apply -f /home/labex/project/myapp-pod.yaml
Dadurch wird ein Pod namens my-pod-1 mit einem einzelnen Container erstellt, der das Nginx-Image ausführt.
Erstellen eines Service
Der zweite Schritt besteht darin, einen Service zu erstellen, der auf den im vorherigen Schritt erstellten Pod abzielt. Erstellen Sie eine Datei namens /home/labex/project/service.yaml mit folgendem Inhalt:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
Speichern Sie die Datei und erstellen Sie den Service, indem Sie den folgenden Befehl ausführen:
minikube kubectl -- apply -f /home/labex/project/service.yaml
Dadurch wird ein Service namens my-service erstellt, der auf Pods mit dem Label app=nginx abzielt und Port 80 freigibt.
Testen des Service
Der dritte Schritt besteht darin, den Service zu testen, indem Sie von einem anderen Pod aus darauf zugreifen. Erstellen Sie eine Datei namens /home/labex/project/test-pod-1.yaml mit folgendem Inhalt:
apiVersion: v1
kind: Pod
metadata:
name: test-pod-1
spec:
containers:
- name: my-container
image: busybox
command:
- sleep
- "3600"
Speichern Sie die Datei und erstellen Sie den Test-Pod, indem Sie den folgenden Befehl ausführen:
minikube kubectl -- apply -f /home/labex/project/test-pod-1.yaml
Dadurch wird ein Pod namens test-pod-1 mit einem einzelnen Container erstellt, der das Busybox-Image ausführt.
Greifen Sie anschließend mit wget vom Busybox-Pod aus auf den Service zu:
minikube kubectl -- exec test-pod-1 -- wget -qO- http://my-service
Dieser Befehl gibt die Standard-Nginx-Seite zurück, was darauf hinweist, dass der Service ordnungsgemäß funktioniert.
Aktualisieren des Service
Der vierte Schritt besteht darin, den Service so zu aktualisieren, dass er auf eine andere Gruppe von Pods abzielt. Aktualisieren Sie das Feld selector in der Datei /home/labex/project/service.yaml wie folgt:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: busybox
ports:
- name: http
port: 80
targetPort: 80
Speichern Sie die Datei und aktualisieren Sie den Service, indem Sie den folgenden Befehl ausführen:
minikube kubectl -- apply -f /home/labex/project/service.yaml
Dies aktualisiert den Service so, dass er auf Pods mit dem Label app=busybox abzielt. Zu diesem Zeitpunkt hat der Service keine Endpunkte, da noch kein vorhandener Pod dieses Label verwendet.
Testen des aktualisierten Service
Der fünfte Schritt besteht darin, den aktualisierten Service zu testen, indem Sie von einem anderen Pod aus darauf zugreifen. Erstellen Sie einen neuen Test-Pod mit dem folgenden Befehl:
minikube kubectl -- run my-pod-2 --image=busybox --restart=Never -- sleep 3600
Dadurch wird ein neuer Pod namens my-pod-2 mit einem einzelnen Container erstellt, der das Busybox-Image ausführt.
Bevor Sie Labels ändern, bestätigen Sie, dass der Service keine passenden Endpunkte hat:
minikube kubectl -- get endpoints my-service
Die Ausgabe sollte <none> anzeigen, da derzeit kein Pod das Label app=busybox besitzt.
Dies geschieht, weil der Service-Selektor nun nach app=busybox sucht, Ihr Nginx-Server-Pod jedoch immer noch mit app=nginx gelabelt ist. Um dies zu beheben, versehen Sie den ursprünglichen Server-Pod mit einem neuen Label, sodass der Service wieder auf den Nginx-Container verweist.
Führen Sie den folgenden Befehl aus, um das Label des Server-Pods zu aktualisieren:
minikube kubectl -- label pod my-pod-1 app=busybox --overwrite
Dies aktualisiert das Label auf my-pod-1, sodass es mit dem Service-Selektor übereinstimmt.
Testen Sie den Service nun erneut von my-pod-2 aus:
minikube kubectl -- exec my-pod-2 -- wget -qO- http://my-service
Dieser Befehl sollte die Standard-Nginx-Seite zurückgeben, was darauf hinweist, dass der Service wieder ordnungsgemäß funktioniert.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie man Pods in Kubernetes mithilfe von Services vernetzt. Sie haben einen Nginx-Pod erstellt, ihn mit einem Service freigegeben und diesen Service von Busybox-Client-Pods aus getestet. Sie haben außerdem den Service-Selektor aktualisiert und den ursprünglichen Nginx-Pod neu gelabelt, sodass der Service wieder auf einen funktionierenden Webserver zielte. Services sind eine wesentliche Komponente des Networkings in Kubernetes und ermöglichen es Ihnen, auf zuverlässige und skalierbare Weise eine Verbindung zu Pods herzustellen.


