Skip to content

Voting-Applikation, welche das Architektur-Muster Cloud-Native verdeutlicht. Erstellt für das Modul Software-Architektur des PIM der HTWSaar.

Notifications You must be signed in to change notification settings

htw-swa-jk-nk-ns/voting-app

Repository files navigation

Voting-App

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.

Architektur

Folgende Grafik erläutert den Zusammenhang zwischen den einzelnen Micro-Services.

Getting-Started

Im Folgenden wird erläutert, wie die gesamte Voting-Applikation gestartet werden kann.

Prerequisites

  • Eine funktionsfähige Minikube Installation
brew install minikube

Installation

  1. Zunächst sollte dieses Repo gepulled und in dieses hinein navigiert werden.
  2. 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.
  3. minikube addons enable ingress
    Aktiviert das Addon Ingress für unser lokales Kubernetes Cluster. Minikube nutzt dabei automatisch die eigene Ingress Implementierung.
  4. kubectl get nodes
    Hiermit müsste nun ein Node namens Minikube mit dem Status Ready augelistet werden.
  5. minikube status
    Zusätzlich kann hiermit der Status des lokalen Clusters geprüft werden.
  6. bash startup.sh
    Führt das Skript startup.sh aus. Dieses wendet kubectl apply -f [deployment].yaml auf alle benötigten Deployments an. Hierbei wird auch ein Ingress Controller für den Serving-Layer angelegt.
  7. kubectl get ingress
    Nun muss die konkrete IP-Adresse des Ingress Controllers ermittelt werden. Anschließend gilt es diese in der lokalen Hosts Datei zu ergänzen. Dies gelingt wie folgt.
  8. 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.
  9. minikube service service-frontend-voingund minikube 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.

Kubernetes Cheat Sheet (WIP)

Debug

Curl into cluster with nslookup and curl preinstalled

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

Ingress

install ingress

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

Add host name

Für Frontend Browser sudo vim etc/hosts

Kubernetes

install hyperhit and minikube

brew update

brew install hyperkit

brew install minikube

kubectl

minikube

create minikube cluster

minikube start --vm-driver=hyperkit

kubectl get nodes

minikube status

kubectl version

delete cluster and restart in debug mode

minikube delete

minikube start --vm-driver=hyperkit --v=7 --alsologtostderr

minikube status

kubectl commands

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

debugging

kubectl logs {pod-name}

kubectl exec -it {pod-name} -- bin/bash

create mongo deployment

kubectl create deployment mongo-depl --image=mongo

kubectl logs mongo-depl-{pod-name}

kubectl describe pod mongo-depl-{pod-name}

delete deplyoment

kubectl delete deployment mongo-depl

kubectl delete deployment nginx-depl

create or edit config file

vim nginx-deployment.yaml

kubectl apply -f nginx-deployment.yaml

kubectl get pod

kubectl get deployment

delete with config

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.

About

Voting-Applikation, welche das Architektur-Muster Cloud-Native verdeutlicht. Erstellt für das Modul Software-Architektur des PIM der HTWSaar.

Topics

Resources

Stars

Watchers

Forks

Languages