Übung: Erkunden der Funktion eines Kubernetes-Clusters
Beim lokalen Ausführen von Kubernetes stehen mehrere Optionen zur Verfügung. Sie können Kubernetes auf physischen Computern oder VMs installieren oder eine cloudbasierte Lösung wie Azure Kubernetes Service (AKS) verwenden.
Ihre Aufgabe ist es in dieser Übung, sich mit einer Kubernetes-Installation sowie mit einem Cluster mit nur einem Knoten vertraut zu machen. In dieser Übung erfahren Sie, wie Sie eine MicroK8s-Umgebung konfigurieren und installieren, die einfach eingerichtet und wieder gelöscht werden kann. Anschließend stellen Sie einen Kubernetes-Dienst bereit und skalieren ihn auf mehrere Instanzen, um eine Website zu hosten.
Hinweis
Dieses Übung ist optional und zeigt, wie Sie die Software und Ressourcen löschen und deinstallieren können, die Sie in dieser Übung einsetzen.
Beachten Sie, dass es auch andere Optionen wie MiniKube und die Kubernetes-Unterstützung in Docker gibt, mit denen Sie dasselbe erreichen.
Was ist MicroK8s?
MicroK8s ermöglicht die Bereitstellung eines Kubernetes-Clusters mit einem Knoten als einzelnes Paket für Workstation- und IoT-Geräte. Canonical, die Erfinder von Ubuntu Linux, hat MicroK8s ursprünglich entwickelt und verwaltet das Produkt auch heute.
Sie können MicroK8s unter Linux, Windows und macOS installieren. Die Installationsanleitung unterscheidet sich jedoch etwas zwischen den Betriebssystemen. Wählen Sie die Option aus, die am besten zu Ihrer Umgebung passt.
Installieren von MicroK8s unter Linux
Die Installation von MicroK8s unter Linux ist die Installationsoption mit der geringsten Anzahl von Schritten. Wechseln Sie zu einem Terminalfenster, und führen Sie die Befehle in den folgenden Schritten aus.
Installieren Sie die MicroK8s-Snap-App. Dieser Schritt kann einige Minuten in Anspruch nehmen, je nach Geschwindigkeit Ihrer Internetverbindung und des Desktops.
sudo snap install microk8s --classic
Bei erfolgreicher Installation wird folgende Meldung angezeigt.
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Nun können Sie Add-Ons im Cluster installieren.
Installieren von MicroK8s unter Windows
Verwenden Sie Multipass, um MicroK8s unter Windows auszuführen. Multipass ist ein leichtgewichtiger VM-Manager für Linux, Windows und macOS.
Laden Sie die neueste Multipass-Version für Windows von GitHub herunter, und installieren Sie sie.
Führen Sie in einer Befehlskonsole den Startbefehl für Multipass aus, um das Image „microk8s-vm“ zu konfigurieren und auszuführen. Dieser Schritt kann einige Minuten in Anspruch nehmen, je nach Geschwindigkeit Ihrer Internetverbindung und des Desktops.
multipass launch --name microk8s-vm --memory 4G --disk 40G
Nachdem Sie die Startbestätigung für „microk8s-vm“ erhalten haben, führen Sie den Befehl
multipass shell microk8s-vm
aus, um auf die VM-Instanz zuzugreifen.multipass shell microk8s-vm
Sobald multipass funktioniert, können Sie auf die Ubuntu-VM zugreifen, um Ihren Cluster zu hosten und MicroK8s zu installieren.
Installieren Sie die MicroK8s-Snap-App. Dieser Schritt kann einige Minuten in Anspruch nehmen, je nach Geschwindigkeit Ihrer Internetverbindung und des Desktops.
sudo snap install microk8s --classic
Bei erfolgreicher Installation wird folgende Meldung angezeigt:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Nun können Sie Add-Ons im Cluster installieren.
Installieren von MicroK8s unter macOS
Verwenden Sie Multipass, um MicroK8s unter macOS auszuführen. Multipass ist ein leichtgewichtiger VM-Manager für Linux, Windows und macOS.
Für die Installation von Multipass unter macOS haben Sie zwei Möglichkeiten. Sie können entweder das neueste Multipass-Release für macOS von GitHub herunterladen und installieren oder Homebrew verwenden, um Multipass mit dem
brew cask install multipass
-Befehl zu installieren.brew install --cask multipass
Führen Sie in einer Befehlskonsole den Startbefehl für Multipass aus, um das Image „microk8s-vm“ zu konfigurieren und auszuführen. Dieser Schritt kann einige Minuten in Anspruch nehmen, je nach Geschwindigkeit Ihrer Internetverbindung und des Desktops.
multipass launch --name microk8s-vm --memory 4G --disk 40G
Nachdem Sie die Startbestätigung für „microk8s-vm“ erhalten haben, führen Sie den Befehl
multipass shell microk8s-vm
aus, um auf die VM-Instanz zuzugreifen.multipass shell microk8s-vm
Nun können Sie auf die Ubuntu-VM zugreifen, auf der Ihr Cluster gehostet wird. Sie müssen jedoch noch MicroK8s installieren. Führen Sie die folgenden Schritte aus.
Installieren Sie die MicroK8s-Snap-App. Dieser Schritt kann einige Minuten in Anspruch nehmen, je nach Geschwindigkeit Ihrer Internetverbindung und des Desktops.
sudo snap install microk8s --classic
Bei erfolgreicher Installation wird folgende Meldung angezeigt:
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Nun können Sie Add-Ons im Cluster installieren.
Vorbereiten des Clusters
Führen Sie den Befehl status
in MicroK8s aus, um die Status der auf Ihrem Cluster installierten Add-Ons anzuzeigen. Diese Add-Ons bieten verschiedene Dienste, von denen einige bereits zuvor behandelt wurden. Ein Beispiel hierfür ist die DNS-Funktionalität.
Führen Sie den Befehl
microk8s.status --wait-ready
aus, um den Status der Installation zu überprüfen.sudo microk8s.status --wait-ready
Beachten Sie, dass mehrere deaktivierte Add-Ons in Ihrem Cluster vorhanden sind. Machen Sie sich keine Gedanken über Add-Ons, die Sie nicht erkennen.
microk8s is running addons: cilium: disabled dashboard: disabled dns: disabled fluentd: disabled gpu: disabled helm3: disabled helm: disabled ingress: disabled istio: disabled jaeger: disabled juju: disabled knative: disabled kubeflow: disabled linkerd: disabled metallb: disabled metrics-server: disabled prometheus: disabled rbac: disabled registry: disabled storage: disabled
Aus der Liste müssen Sie die DNS-, Dashboard- und Registrierungs-Add-Ons aktivieren. Hier sind die Zwecke der einzelnen Add-Ons:
Add-Ons Zweck DNS Stellt den coreDNS
-Dienst bereitDashboard Stellt den Dienst kubernetes-dashboard
und verschiedene weitere Dienste bereit, die seine Funktionalität unterstützen. Es handelt sich um eine allgemeine, webbasierte Benutzeroberfläche für Kubernetes-Cluster.Registrierung Stellt eine private Registrierung und weitere Dienste bereit, die deren Funktionalität unterstützen. Verwenden Sie diese Registrierung, um private Container zu speichern. Führen Sie den folgenden Befehl aus, um die Add-Ons zu installieren.
sudo microk8s.enable dns dashboard registry
Sie können jetzt auf Ihren Cluster mithilfe von kubectl
zugreifen.
Untersuchen des Kubernetes-Clusters
MicroK8s stellt eine Version von kubectl
bereit, über die Sie mit Ihrem neuen Kubernetes-Cluster interagieren können. Mit dieser Kopie von kubectl
kann eine parallele Installation einer anderen systemweiten kubectl
-Instanz vorhanden sein, ohne dass sich dies auf ihre Funktionalität auswirkt.
Führen Sie den Befehl
snap alias
aus, umkubectl
als Alias fürmicrok8s.kubectl
hinzuzufügen. Dieser Schritt vereinfacht die Verwendung.sudo snap alias microk8s.kubectl kubectl
Die folgende Ausgabe wird angezeigt, wenn der Befehl erfolgreich ausgeführt wurde:
Added: - microk8s.kubectl as kubectl
Anzeigen der Informationen des Clusterknotens
Sie haben bereits gelernt, dass ein Kubernetes-Cluster aus Steuerungsebenen und Workerknoten besteht. Nun werden Sie sich ansehen, was auf dem neuen Cluster installiert ist.
Überprüfen Sie dazu die Knoten, die in Ihrem Cluster ausgeführt werden.
Sie wissen, dass MicroK8s eine Clusterinstallation mit nur einem Knoten ist. Daher erwarten Sie, dass nur ein Knoten angezeigt wird. Bedenken Sie jedoch, dass dieser Knoten zugleich die Steuerungsebene und ein Workerknoten im Cluster ist. Bestätigen Sie diese Konfiguration, indem Sie den Befehl
kubectl get nodes
ausführen. Führen Sie den Befehlkubectl get
aus, um Informationen zu allen Ressourcen in Ihrem Cluster abzurufen:sudo kubectl get nodes
Das Ergebnis ähnelt dem folgenden Beispiel, in dem gezeigt wird, dass nur ein Knoten im Cluster mit dem Namen
microk8s-vm
vorhanden ist. Beachten Sie, dass der Knoten sich im Status Bereit befindet. Dieser Status gibt an, dass die Steuerungsebene Workloads auf diesem Knoten planen kann.NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3
Sie können weitere Informationen für die angeforderte Ressource abrufen. Lassen Sie uns beispielsweise annehmen, dass Sie die IP-Adresse des Knotens finden müssen. Führen Sie den Parameter
-o wide
aus, um zusätzliche Informationen vom API-Server abzurufen:sudo kubectl get nodes -o wide
Das Ergebnis ähnelt dem folgenden Beispiel. Beachten Sie, dass Sie jetzt die interne IP-Adresse des Knotens, das auf dem Knoten ausgeführte Betriebssystem, die Kernelversion sowie die Containerruntime sehen können.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME microk8s-vm Ready <none> 36m v1.17.3 192.168.56.132 <none> Ubuntu 18.04.4 LTS 4.15.0-88-generic containerd://1.2.5
Im nächsten Schritt erkunden Sie die auf Ihrem Cluster ausgeführten Dienste. Führen Sie wie bei Knoten den Befehl
kubectl get
aus, um Informationen über die Dienste abzurufen, die im Cluster ausgeführt werden.sudo kubectl get services -o wide
Das Ergebnis ähnelt dem folgenden Beispiel. Beachten Sie jedoch, dass nur ein Dienst aufgeführt ist. Sie haben zuvor Add-Ons im Cluster installiert und würden erwarten, dass diese Dienste ebenfalls angezeigt werden.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none>
Der Grund dafür, dass nur ein einzelner Dienst aufgeführt wird, liegt darin, dass Kubernetes sogenannte Namespaces verwendet, um einen Cluster logisch in mehrere virtuelle Cluster aufzuteilen.
Übergeben Sie den Parameter
--all-namespaces
, um alle Dienste in allen Namespaces abzurufen:sudo kubectl get services -o wide --all-namespaces
Das Ergebnis ähnelt dem folgenden Beispiel. Beachten Sie, dass sich in Ihrem Cluster drei Namespaces befinden. Dabei handelt es sich um den Standardnamespace sowie die Namespaces
container-registry
undkube-system
. Hier werden die Instanzenregistry
,kube-dns
undkubernetes-dashboard
angezeigt, die Sie installiert haben. Außerdem gibt es unterstützende Dienste, die zusammen mit einigen Add-Ons installiert wurden.NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR container-registry registry NodePort 10.152.183.36 <none> 5000:32000/TCP 28m app=registry default kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 37m <none> kube-system dashboard-metrics-scraper ClusterIP 10.152.183.130 <none> 8000/TCP 28m k8s-app=dashboard-metrics-scraper kube-system heapster ClusterIP 10.152.183.115 <none> 80/TCP 28m k8s-app=heapster kube-system kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 28m k8s-app=kube-dns kube-system kubernetes-dashboard ClusterIP 10.152.183.132 <none> 443/TCP 28m k8s-app=kubernetes-dashboard kube-system monitoring-grafana ClusterIP 10.152.183.88 <none> 80/TCP 28m k8s-app=influxGrafana kube-system monitoring-influxdb ClusterIP 10.152.183.232 <none> 8083/TCP,8086/TCP 28m k8s-app=influxGrafana
Da Ihnen nun die Dienste angezeigt werden, die im Cluster ausgeführt werden, können Sie jetzt eine Workload auf dem Workerknoten planen.
Installieren eines Webservers in einem Cluster
Sie möchten auf einem Webserver im Cluster eine Workload planen, der eine Website für Ihre Kunden bereitstellt. Dafür haben Sie verschiedene Optionen zur Auswahl. In diesem Beispiel verwenden Sie NGINX.
Wie bereits erwähnt, können Sie in Podmanifestdateien Ihre Pods, Replikatgruppen und Bereitstellungen beschreiben, um Workloads zu definieren. Da diese Dateien nicht ausführlich behandelt wurden, verwenden Sie kubectl
, um die Informationen direkt an den API-Server zu übergeben.
Obwohl kubectl
sehr praktisch ist, ist die Verwendung von Manifestdateien eine bewährte Methode. Mit Manifestdateien können Sie ganz einfach einen Rollforward oder ein Rollback für Ihre Bereitstellungen in Ihrem Cluster ausführen. Diese Dateien helfen auch beim Dokumentieren der Konfiguration eines Clusters.
Führen Sie den Befehl
kubectl create deployment
aus, um Ihre NGINX-Bereitstellung zu erstellen. Geben Sie den Namen der Bereitstellung sowie das Containerimage an, um eine einzelne Instanz des Pods zu erstellen.sudo kubectl create deployment nginx --image=nginx
Das Ergebnis ähnelt dem folgenden Beispiel:
deployment.apps/nginx created
Führen Sie
kubectl get deployments
aus, um die Informationen zu Ihrer Bereitstellung abzurufen:sudo kubectl get deployments
Das Ergebnis ähnelt dem folgenden Beispiel. Beachten Sie, dass der Name der Bereitstellung mit dem Namen übereinstimmt, den Sie festgelegt haben, und dass eine Bereitstellung mit diesem Namen den Status „Ready“ (Bereit) aufweist und verfügbar ist.
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18s
Die Bereitstellung hat einen Pod erstellt. Führen Sie den Befehl
kubectl get pods
aus, um Informationen über die Pods Ihres Clusters abzurufen:sudo kubectl get pods
Das Ergebnis ähnelt dem folgenden Beispiel. Beachten Sie, dass der Name des Pods ein generierter Wert ist, dem der Namen der Bereitstellung vorangestellt ist, und dass der Status des Pods Running (Wird ausgeführt) lautet.
NAME READY STATUS RESTARTS AGE nginx-86c57db685-dj6lz 1/1 Running 0 33s
Testen der Websiteinstallation
Testen Sie die NGINX-Installation, indem Sie eine Verbindung mit dem Webserver über die IP-Adresse des Pods herstellen.
Um die Adresse des Pods zu finden, übergeben Sie den Parameter
-o wide
:sudo kubectl get pods -o wide
Das Ergebnis ähnelt dem folgenden Beispiel. Beachten Sie, dass der Befehl sowohl die IP-Adresse des Knotens als auch den Knotennamen zurückgibt, auf dem die Workload geplant ist.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 4m17s 10.1.83.10 microk8s-vm <none> <none>
Um auf die Website zuzugreifen, führen Sie
wget
auf der ip-Adresse aus, die zuvor aufgeführt ist:wget <POD_IP>
Das Ergebnis ähnelt dem folgenden Beispiel:
--2020-03-16 13:34:17-- http://10.1.83.10/ Connecting to 10.1.83.10:80... connected. HTTP request sent, awaiting response... 200 OK Length: 612 [text/html] Saving to: 'index.html' index.html 100%[==============================================================================================>] 612 --.-KB/s in 0s 2020-03-16 13:34:17 (150 MB/s) - 'index.html' saved [612/612]
Skalieren einer Webserverbereitstellung in einem Cluster
Angenommen, es gibt plötzlich eine erhöhte Anzahl von Benutzern, die auf Ihre Website zugreifen, und die Website schlägt aufgrund der Auslastung fehl. Sie können weitere Instanzen der Website in Ihrem Cluster bereitstellen und die Auslastung auf diese Instanzen aufteilen.
Führen Sie den Befehl kubectl scale
aus, um die Anzahl der Replikate in Ihrer Bereitstellung zu skalieren. Darin geben Sie die Anzahl der benötigten Replikate und den Namen der Bereitstellung an.
Führen Sie den Befehl
kubectl scale
aus, um die Gesamtsumme der NGINX-Pods auf drei zu skalieren:sudo kubectl scale --replicas=3 deployments/nginx
Das Ergebnis ähnelt dem folgenden Beispiel:
deployment.apps/nginx scaled
Der Skalierungsbefehl ermöglicht Ihnen, die Anzahl der Instanzen hoch- oder herunterzuskalieren.
Führen Sie den Befehl
kubectl get
aus, und übergeben Sie nochmals den Parameter-o wide
, um die Anzahl der aktiven Pods zu überprüfen:sudo kubectl get pods -o wide
Das Ergebnis ähnelt dem folgenden Beispiel. Beachten Sie, dass nun drei Pods angezeigt werden, die ausgeführt werden. Jeder Pod verfügt über eine eindeutige IP-Adresse.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-86c57db685-dj6lz 1/1 Running 0 7m57s 10.1.83.10 microk8s-vm <none> <none> nginx-86c57db685-lzrwp 1/1 Running 0 9s 10.1.83.12 microk8s-vm <none> <none> nginx-86c57db685-m7vdd 1/1 Running 0 9s 10.1.83.11 microk8s-vm <none> <none> ubuntu@microk8s-vm:~$
Sie müssten einige zusätzliche Konfigurationen auf den Cluster anwenden, um Ihre Website effektiv als öffentliche Website verfügbar zu machen. Sie müssten beispielsweise einen Lastenausgleich installieren und Knoten-IP-Adressen zuordnen. Diese Art von Konfiguration stellt einen Teil der fortgeschrittenen Konzepte dar, die Sie in Zukunft kennenlernen werden. In der Zusammenfassung gibt es Anweisungen, wenn Sie ihre VM deinstallieren und bereinigen möchten.