Um von außerhalb des Kubernetes Clusters auf die Webanwendung zugreifen zu können, kommt ein Ingress zum Einsatz. Ein Ingress stellt HTTP- und HTTPS Anfragen von außerhalb des Kubernetes Clusters zu den definierten Diensten innerhalb des Kubernetes Clusters durch. Das Routing des Datenverkehrs wird durch Regeln gesteuert, die auf der Ingress-Ressource definiert sind. Für die Erfüllung der Ingress Konfiguration wird ein Ingress Controller innerhalb des Kubernetes Clusters benötigt. In der Big Data Anwendung wird dazu der NGINX Ingress Controller eingesetzt.
Neben dem Ingress Controller und den Webanwendungen werden zusätzliche Komponenten für die Datenverarbeitung und -speicherung benötigt. Dazu zählt eine Apache Kafka Instanz, welche neue Bestellungen von dem Daten Generator in Form von Kafka Messages erhält. Mit Hilfe der Apache Spark Instanz werden die Kafka Messages gelesen, verarbeitet bzw. aufbereitet und anschließend in der MySQL Datenbank gespeichert. Die Webanwendung zur Darstellung der Bestellübersicht zeigt die durch die Spark Anwendung aufbereiteten Daten an. Zur Entlastung der Datenbank Instanz kommt zusätzlich ein Cache Server zum Einsatz.
Die nachfolgenden Schritte müssen einmalig durchgeführt werden, um das Projekt auf einem Windows Rechner zum Laufen zu bringen:
- Installation Docker (durch Installationsdatei von Docker Desktop) ->
docker
- Installation minikube (durch Minikube Installationsdatei) ->
minikube
,kubectl
- Installation helm ->
helm
- Herunterladen der benötigten Dateien unter https://github.com/helm/helm/releases
- Entpacken der ZIP Datei
- Kopieren der
helm.exe
in%USERPROFILE%\AppData\Local\Microsoft\WindowsApps
- Installation skaffold
- Herunterladen der Datei von https://storage.googleapis.com/skaffold/releases/latest/skaffold-windows-amd64.exe
- Umbennen der Datei in
skaffold.exe
- Kopieren der Datei in
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps
-
Starten von Minikube
- Starten von Minikube mit Standardwerten:
minikube start
- Starten von Minikube mit mehr Ressourcen über Docker:
minikube start --memory 8192 --cpus 4 --driver=docker
- Starten von Minikube mit mehr Ressourcen über HyperV:
minikube start --memory 8192 --cpus 4 --driver=hyperv
- Starten von Minikube mit Standardwerten:
-
Aktivieren des Ingress Addons in Minikube
Hinweis: Auf Windows Systemen kann das Ingress Addon nicht in Verbindung mit Docker genutzt werden. Es empfiehlt sich HyperV zu nutzen.
Der Befehl zum Aktivieren des Ingress addons lautet:
minikube addons enable ingress
-
Strimzi.io Kafka operator erstellen und starten
helm repo add strimzi http://strimzi.io/charts/
helm install my-kafka-operator strimzi/strimzi-kafka-operator
-
Hadoop cluster with YARN (for checkpointing)
helm repo add stable https://charts.helm.sh/stable
helm install --namespace=default --set hdfs.dataNode.replicas=1 --set yarn.nodeManager.replicas=1 --set hdfs.webhdfs.enabled=true my-hadoop-cluster stable/hadoop
-
Starten der Anwendung
- Befehl:
skaffold dev
- Befehl:
Nachdem der use Case ein mal aufgebaut wurde, müssen nicht alle Schritte erneut durchlaufen werden. Wie der Use Case in den darauffolgenden Malen gestartet werden kann, ist nachfolgend beschrieben.
Das wiederholte Starten des Use Case geht deutlich schneller, als das initiale Starten. Dazu müssen die folgenden Schritte beachtet sein.
- Starten von Minikube:
minikube start
- Starten der Anwendung:
skaffold dev
Sobald das Minikube Cluster läuft, sollten die folgenden Schritte geprüft werden:
- Laufen alle Pods, die für den Use Case benötigt werden? ->
kubectl get all
- Kann von Außen auf den Data Generator Pod zugegriffen werden? -> Weiterleitung des Ports oder Ingress
- Kann von Außen auf den Web App Pod zugegriffen werden? -> Weiterleitung des Ports oder Ingress
Um über das Ingress auf die Webanwendungen zugreifen zu können wird die IP Adresse benötigt.
Diese wird über den Befehl minikube ip
ausgegeben.
Auf die Bestellübersicht wird über den Pfad <minikube-ip>/orders/list
zugegriffen.
Auf den Datengenerator wird über den Pfad <minikube-ip>/simulator/overview
zugegriffen.
In der Datei skaffold.yaml kann das forwarden der ports definiert werden. Dies wird dann automatisch durchgeführt. Nachfolgend ist der Ausschnitt einer skaffold.yaml Datei zu sehen in der Port-Forward definiert ist:
portForward:
- resourceType: Deployment
resourceName: web-app
port: 5000
- resourceType: Deployment
resourceName: datagenerator-app
port: 3000
Weitere Informationen zum Port-Forwarding:
- https://skaffold.dev/docs/references/cli/
- https://skaffold.dev/docs/pipeline-stages/port-forwarding/
Unterschiedliche Befehle zum Starten der Anwendung mit Hilfe von Skaffold:
- Standard:
skaffold dev
- Entwicklung des Frontend (Build Prozess wird nicht jedes mal neu angestoßen):
skaffold run --port-forward=user --tail
zum Beenden muss dann der Befehlskaffold delete
eingegeben werden
Nachfolgend sind häufig verwendete Kommandos aufgelistet:
kubectl get all
kubectl get ingress
kubectl describe service/web-app-service
kubectl delete pod/AAA
- PowerShell Skript zum Aktualisieren des Pod Status
while (1) {cls; kubectl get pods;sleep 2}
- Erreichen der Web App über den localhost:
kubectl port-forward service/web-app-service 5000:5000
- Erreichen des Data Generator über den localhost:
kubectl port-forward service/datagenerator-app-service 3000:3000
Eine Übersicht aller Kommandos zum Managen des Minikube Clusters finden Sie unter: https://minikube.sigs.k8s.io/docs/start/
- Ausführen des Befehls
kubectl exec pod/mysql-deployment-7757cfc6b4-k55br -it -- bash
um Zugriff auf den MySql Pod zu bekommen - Befehl:
mysql --user=root --password
Anschließend muss das Passwort "mysecretpw" eingegeben werden - Befehl:
show databases;
zum Anzeigen der angelegten Datenbanken - Befehl:
USE popular;
zum nachfolgenden Zugreifen auf die Tabellen der Datenbank "popular" - Befehl:
SELECT * FROM count_store;
Beispielhafte SQL Abfrage