diff --git a/Praxisbericht.tex b/Praxisbericht.tex index 1db5bc4..5830e45 100644 --- a/Praxisbericht.tex +++ b/Praxisbericht.tex @@ -188,6 +188,11 @@ Generell ist der selektron-Chart Modular aufgebaut und erlaubt in einer Zentrale Eine weitere Anforderung ist eine Verwaltungsübersicht für das Kubernetes-Cluster, da Werkzeuge wie \texttt{kubectl} und \texttt{Helm} zwar alle Funktionalitäten von Kubernetes abdecken, sich jedoch Personalschulung als aufwändig erweist und der Aufwand für simple und repetetive Aufgaben größer ist als Notwendig. Als Visualisierung wurde sich auf Headlamp\cite{uiHeadlamp}, den offiziellen Nachfolger des Kubernetes-Dashboards\cite{uiHeadlampDeprecated} und k9s\cite{uiK9s}, ein grafisches Kommandozeilentool geeinigt. k9s ist dabei besonders auf Geschwindigkeit und Tastaturbasiertes bedienen getrimmt, vergleichbar mit dem Text-Editor vim, und umfässt eher Aufgaben im Bereich des Developments von einzelnen Komponenten auf dem Cluster (Komponenten anzeigen \& editieren, Logs durchforsten). Headlamp bringt dagegen mehr Bedienkomfort, eine Standardmäßige Auflistung aller existierenden Kubernetes-Komponenten und CRDs (anstatt k9s' Such-basiertes Modell zur Komponentenauswahl), eine Map, welche existierende Komponenten miteinander Verbindet um sie Logisch zu gruppieren, und Plugin-Support. Da beide mit Kubeconfigs arbeiten, sind sie sofern \texttt{kubectl} eingerichtet ist, ohne weiteren Konfigurationsaufwand benutzbar. Besonders Headlamp hat für Überzeugung im Team gesorgt, da es auch ohne Kubernetes-Grundlagen vergleichsweise sehr einfach zu bedienen ist. +Eine klassische Serviceaufgabe wäre das Neustarten und Stoppen von Containern. Was mit dem originalen Setup mit einer Ansammlung fehleranfälliger Skripte ablief, kann somit über eine Nutzerfreundliche Oberfläche mit wenigen Clicks realisiert werden. + +\textbf{TODO: VIELLEICHT PANEL FÜR RESTART ETC IN HEADLAMP / RADAR} + +\subsection{Windows} Kernbestandteil der mir initial gegebenen Anforderungsliste war die Evaluation der Nutzbarkeit von Kubernetes auf Windows-basierten Systemen. Während Kubernetes unterstützt, Worker-Nodes auf Windows laufen zu lassen, gibt es keine Control-Plane die für Windows konzipiert ist, da Windows im Umfeld der Containerisierung keine Vorteile gegenüber Linux bietet, und der Mehraufwand nicht rechtfertigbar ist. Die Problemstellung lässt sich trotzdem lösen, da der Windows-Kernel seit Windows 10 bzw. Windows-Server 2016 Hyper-V mitliefert\cite{windowsHyperVIntro}. Hyper-V ist Microsofts Type-1 (Bare-Metal) Hypervisor, vergleichbar mit Linux' KVM. Hypervisor sind Software, die es erlauben, auf Host-Systemen mehrere Virtuelle Maschinen (VMs), sogenannte Guest-Systeme, laufen zu lassen. Dabei unterscheidet man zwischen Type-1 und Type-2 Hypervisorn. Der Vorteil von Type-1 Hypervisorn ist, dass diese parallel zum Kernel laufen und unabhängig Userspace des Host-Systems sind, während Type-2 Hypervisor auf dem Host-Betriebssystem laufen. Damit sind Type-2 Hypervisor einfacher zu bedienen, jedoch langsamer und unsicherer. Der Clou ist, mithilfe von Hyper-V eine Linux-VM aufzusetzen auf welcher das Cluster läuft. Nachteil bei dieser Konfiguration ist, dass durch die Virtualisierung ein Performance-Overhead, besonders in I/O-Operationen entsteht, sowie dass Networking innerhalb Hyper-V sehr fragil ist, weswegen nur externe Switches wie erwartet funktionieren. Diese müssen jedoch innerhalb der Kundenfirewall als externes Gerät eingerichtet werden, was die Kundentoleranz maßgeblich senkt. Da ein nicht zu unterschätzender Anteil der Kunden auf Windows-basierte Serversysteme setzt, könnte dies eine große Einschränkung bei Portierung von selektron erweisen. Um zu verhindern, dass die Server-Konfiguration undokumentiert Verändert wird, existiert das Konzept von GitOps: eine oder mehrere Git-Repositories zählen als Wahrheitsquelle und definieren den Wunschzustand der gesamten Infrastruktur, und Operatoren synchronisieren die laufende Umgebung ständig mit diesem Zustand. Dieser Vorgang ist dabei Teil der CI/CD (Continous Integration, Continous Delivery) Pipeline, konkret übernimmt es den CD-Teil. Anders als bei einer klassischen CD-Pipeline, bei der Push-basiert von einem Build-Server auf den Deployment-Server deployt wird, wird bei der GitOps-Pipeline Pull-basiert von einem auf dem Deployment-Server laufenden Operator in Intervallen die Git-Repo nach Änderungen überwacht, und im Falle einer Differenz zwischen Repository-Zustand und Server-Zustand die notwendigen Änderungen vorgenommen. Diesen Prozess nennt man reconciliation. Somit sind Serverzustand und Git-Zustand synchronisiert, Änderungen am Server auditierbar (Wer hat etwas geändert), differenzierbar (Was wurde genau geändert), rollbackbar im Falle eines Problems und reproduzierbar. Dabei setzen wir auf FluxCD, eine CNCF Graduated\cite{fluxCNCF} GitOps Implementation für Kubernetes. Eine Mögliche Alternative ist ArgoCD, welches von Haus aus eine UI bietet, jedoch ist FluxCD nativer in das Kubernetes-Tooling integriert, benutzt Kubernetes-natives RBAC und integriert mit Headlamp-Plugin\cite{fluxHeadlampPlugin} nativ in die gewünschte Übersicht. Dabei hat Flux zwei für selektron relevante Pipelines: die GitOps Pipeline und die Image-Controller-Pipeline.