Diese Applikation soll das Architektur-Muster Cloud-Native anhand einer Voting-Applikation verdeutlichen. Hierbei existieren zwei Frontends. Eines dient einzig zum Abgeben einer Stimme. Das zweite gibt Einblicke in die Wahl-Ergebnisse. Beide Frotends kommunizieren dabei mit einem Serving-Layer Micro-Service. Dieser dient als Schnittstelle. Über diesen können Wahl-Ergebnisse erfragt, oder Stimmen abgegeben werden. Je nach dem welche Informationen benötigt werden, kommuniziert der Serving-Layer mit dem Calculate-Service oder Raw-Data-Service. Erster berechnet auf Basis der Wahlergebnisse Zusatzinformationen ("Welcher Kandidat hat die meisten Stimmen?", "Aus welchem Land kamen die meisten Stimmen?"). Letzterer dient als Schnittstelle zur Datenbank und übernimmt das Speichern und Abrufen der Daten.
Folgende Grafik erläutert den Zusammenhang zwischen den einzelnen Micro-Services.
Im Folgenden wird erläutert, wie die gesamte Voting-Applikation gestartet werden kann.
- Eine funktionsfähige Minikube Installation
brew install minikube
- Zunächst sollte dieses Repo gepulled und in dieses hinein navigiert werden.
minikube start --vm-driver=hyperkit
Starte Minikube mit dem Driver hyperkit. Da wir später Ingress nutzen werden, nutzen wir nicht Docker selbst als Driver.minikube addons enable ingress
Aktiviert das Addon Ingress für unser lokales Kubernetes Cluster. Minikube nutzt dabei automatisch die eigene Ingress Implementierung.kubectl get nodes
Hiermit müsste nun ein Node namens Minikube mit dem Status Ready augelistet werden.minikube status
Zusätzlich kann hiermit der Status des lokalen Clusters geprüft werden.bash startup.sh
Führt das Skript startup.sh aus. Dieses wendetkubectl apply -f [deployment].yaml
auf alle benötigten Deployments an. Hierbei wird auch ein Ingress Controller für den Serving-Layer angelegt.kubectl get ingress
Nun muss die konkrete IP-Adresse des Ingress Controllers ermittelt werden. Anschließend gilt es diese in der lokalenHosts
Datei zu ergänzen. Dies gelingt wie folgt.sudo vi /etc/hosts
Hier muss nun ein Eintrag für die Adresse voting-app.com ergänzt werden, welcher auf die Adresse des Ingress Controllers verweist. Dies ist nötig, damit die Frontends den Serving-Layer erreichen können. Zwar sind sowohl das Voter-, als auch das Analysis-Frontend im Cluster selbst gehostet, allerdings der ausführende Browser nicht. Damit dieser ebenfalls den Serving-Layer erreichen kann nutzt er den, nach außen erreichbaren, Ingress-Controller, um über eine gleich-bleibende IP-Adresse auf den Serving-Layer zuzugreifen. Da die konkrete IP des Ingress-Controllers individuell für die Minikube-Installation ist, muss dies manuell im lokalen Hosts-File konfiguriert werden.minikube service service-frontend-voing
undminikube service service-frontend-analysis
öffnen nun das jeweilige Frontend im Browser. Der Serving-Layer kann über die Adresse voing-app.com erreicht werden. Hierbei existieren die Endpunkte/results
und/votesByCountry
. Ein neuer Vote kann mittels POST auf den Endpunkt/vote
mitgeteilt werden.
Run debug deployment with nslookup, ping etc. installed
kubectl run curl --image=radial/busyboxplus:curl -i --tty
Check if cluster-dns-server has entry about service
nslookup service-frontend-voting-service
See complete history of pulling images, creating pods etc.
kubectl get events
minikube addons enable ingress
kubectl get ingress
Add the listed ip for the given Ingress-Endpoint to your host file:
sudo vim /etc/hosts
as
YOUR_IP voting-app.com
Für Frontend Browser
sudo vim etc/hosts
brew update
brew install hyperkit
brew install minikube
kubectl
minikube
minikube start --vm-driver=hyperkit
kubectl get nodes
minikube status
kubectl version
minikube delete
minikube start --vm-driver=hyperkit --v=7 --alsologtostderr
minikube status
kubectl get nodes
kubectl get pod
kubectl get services
kubectl create deployment nginx-depl --image=nginx
kubectl get deployment
kubectl get replicaset
kubectl edit deployment nginx-depl
kubectl delete -f service-calculate.yaml
kubectl logs {pod-name}
kubectl exec -it {pod-name} -- bin/bash
kubectl create deployment mongo-depl --image=mongo
kubectl logs mongo-depl-{pod-name}
kubectl describe pod mongo-depl-{pod-name}
kubectl delete deployment mongo-depl
kubectl delete deployment nginx-depl
vim nginx-deployment.yaml
kubectl apply -f nginx-deployment.yaml
kubectl get pod
kubectl get deployment
kubectl delete -f nginx-deployment.yaml
#Metrics
kubectl top
The kubectl top command returns current CPU and memory usage for a cluster’s pods or nodes, or for a particular pod or node if specified.