Nane Kratzke

Thesis:

Gitlab-basierte Projekt-Generierung für Kubernetes Deployments

Published: 07 Sep 2020
Type: Bachelor (B. Sc.)
State: open
Study: Computer Science
Language: German
Company: myLab
Image: pixabay.com

Im myLab der TH Lübeck wird im Rahmen der Informatik-Lehre als auch weiterer (Forschungs-)Projekte sowohl GitLab als auch Kubernetes Cluster eingesetzt. Kubernetes soll dabei perspektivisch als flexible Hosting-Platform für Studierende-Projekte beliebiger Art ausgebaut werden.

Kubernetes hat allerdings den Nachteil einer sehr steilen Lernkurve, so dass dieser Dienst bislang keine breite Verwendung aufgrund eingeschränkter Bedienbarkeit erfährt und an der THL meist nur “hinter den Kulissen” eingesetzt wird.

Diese Bachelorarbeit soll sich diesem Problem annehmen und eine “Scaffolding” Lösung entwickeln, die aufeinander abgestimmte Kubernetes Namespaces und GitLab Projekte (Repositories) erzeugt, die automatisiert mittels Gitlab CI Pipelines deployt werden können und so als Ausgangspunkt für weitere die Projektarbeit dienen können. Auf diese Weise soll die Pipeline/Kubernetes-Lernkurve abgeflacht werden.

  • Die Scaffolding Lösung (Scaffolder) soll selber als Applikation in beliebigen Kubernetes Clustern deployt und mittels helm3 installiert werden können.
  • Der Scaffolder soll Nutzer gegen OAuth Gitlab Schnittstellen authentifizieren (es ist die OAuth Schnittstelle des THL Gitlab Services als Referenz heranzuziehen).
  • Der Scaffolder soll “stateless” konzipiert werden. D.h. eine Synchronisierung nach dem initialen Anlegen von Namespace mit Repository liegt nicht mehr in der Verantwortung des Scaffolders.
  • Der Scaffolder soll Gitlab Repositories im Namen des authentizierten Nutzers anlegen. Diese Repositories sollen beinhalten:
    • Access credentials für den anzulegenden Namespace im Kubernetes Cluster
    • Gitlab CI pipeline template (.gitlab-ci.yaml), dass so konfiguriert ist, das das Projekt automatisiert deployt werden kann.
    • Deployment-Beispiele (durch Nutzer über Scaffolder Oberfläche zu selektieren) die gängige Workloads (Deployment, Stateful Set, Cron-Jobs, Jobs), gängige Sprachen (z.B. Java, Python, NodeJS), und ggf. gängige Stateful-Services (z.B. Redis, MySQL, etc.) so abedeckt, dass sich ein Nutzer seine Ausgangstemplate (z.B. Python + REDIS) schnell “zusammenklicken” kann.
    • Exposing-Beispiele (durch Nutzer ebenfalls selektierbar) sollen Service und Ingress Ressourcen abdecken.
  • Der Scaffolder soll Kubernetes Namespaces anlegen, sofern diese Namespaces noch verfügbar sind. Die Namespaces sind wie folgt zu konfigurieren:
    • Ressource Quotas für CPU, Memory, und Storage sind anzugeben (Werte sind konfigurierbar zu gestalten)
    • Limit Ranges für Container sind anzugeben (Werte sind konfigurierbar zu gestalten)
    • Der Namespace soll einen ServiceAccount erhalten.
    • Der ServiceAccount soll an eine Lese-/Schreibrolle gebunden werden, die es dem ServiceAccount erlaubt nur eigene Ressourcen innerhalb des Namespaces zu manipulieren und zu sehen.

Für den Scaffolder ist eine geeignete Architektur zu entwickeln, die vermutlich auf einer Single Page Web App und einem REST-basierten Backend basieren wird. Der Scaffolder (Web App) soll für den Benutzer einfach und intuitiv zu bedienen sein! Einfachheit geht dabei vor Funktionsumfang!