Kubernetes a gentle introduction
Vortrag von: Burkhard Linke
Bioinformatik Core Facility
DNBI Cloud Architekt
Vertritt sein persönliche Meinung.
Notizen von: Christian Krippes
Was ist Kubernetes
- Ein sehr komplexes System
- Vielfältig; jede Installation kann und wird sich unterscheiden
- Open-Source-Kern
- Anbieter-Plugins für verschiedene Aspekte
- Vier wichtige Entwicklungen hin zu Kubernetes
Geschichtsstunde
Einen Service aufbauen im Jahr 2000:
- Rackplatz im Serverzentrum mieten und Maschine einbauen
- oder Maschine mieten
- IPv4 Adresse erhalten
- Maschine konfigurieren
- Service installieren und konfigurieren
- Updates, Bug-Fixes und Ausfälle handhaben
- Sehr schwer skalierbar
- Ziemlich schwer einen globalen Dienst bereitzustellen
Entwicklung 1 - Virtualisierung
- Günstige Multicore-Prozessoren haben es wirtschaftlich interessant gemacht
- Viele Dienste auf einer physischen Maschine möglich
- Dienste sind voneinander isoliert
- Frühe Performanceverluste heute nahezu gänzlich verschwunden (Paravirtualisierung)
- Gängige Virtualisierungssoftware vmWare,Xen,qemu,bhyve …
Cloud
- Virtualsierung war grundlage für Cloud - Infrastruktur als Service
- VM mieten -> Nur die Nutzungszeit zahlen
- Hyperscalers (AWS,MS Azure etc.) ermöglichen globale Infrastruktur
–> Es ist jetzt möglich, (virtuelle) Server überall und jederzeit in beliebiger Anzahl und Konfiguration zu erhalten!
Entwicklung 2 - Container
- Nicht wirklich neues Konzept (OpenVZ 2005, lxc 2008)
- Vorläufer chroot, jails, zones …
- Isolierte Anwendungen
- Verbesserte Sicherheit und Resourcenkontrolle
Docker
- Hat Container handhabbar gemacht und damit populär
- Öffentliches Repo mit vorgefertigten “docker images”
- Eine Anwendung mit all ihren Abhängigkeiten
- Lauffähig unabhängig vom Betriebsystem
- Software in Containern wurde ein beliebtes Produkt
- Standards für Container-Format und Container Build haben zur Verbreitung beigetragen
—> Klassische Software Installation wurde durch Container weitestgehend abgelöst:
Container: Schneller, weniger Fehleranfällig, weniger Abhängigkeitskonflikte
Entwicklung 3 - Infrastruktur als Code IaC / DevOps
- Entwicklungen 1 und 2 ermöglichen mehr und größere Dienste was aber auch mehr Komplexität
mit sich bringt
- Anzahl der virtuellen und baremetal Systeme wächst und macht es schwieriger für den Menschen handhabbar
- Automatisierung notwendig, Server werden vom handgepflegten “Pet” zur einheitlich automatisiert behandelten Massenware
“Cattle”.
- Ziel: Reproduzierbare und parametrisierbare Deployments, also Installation & Konfiguration sämtlicher Server und der notwendigen Software die ich für meinen Dienst brauche.
- Unterschiedliche Umgebungen (staging vs. testing)
- IaC ermöglicht automatisierte Tests von Deployments (Unit Test, Integration Test, etc.)
- Änderungsmanagement über Werkzeuge wie bspw. git.
–> Weniger Personen können heute wesentlich größere und komplexere Systeme handhaben
Infrastruktur als Code meint das die Konfiguration eines Servers als abstrakte Beschreibung (Code) vorliegt
die auf einen oder beliebig viele Server(Cattle) verteilt werden kann.
Siehe auch [HackyHour #10()]/notes/2023-05-24-HackyHour-10.md) in der wir bereits über Ansible gesprochen haben.
Devops= Developer become Operators (and vice versa).
Entwicklung 4 - Nutzer/ “Cloud” / Smartphones
- Wachsende Zahl von Nutzern
- Unterschiedliche Wahrnehmung von Computern
- Dienste “laufen” in der Cloud
- Immer weniger Funktionalität läuft auf dem Gerät des Nutzers
- “Always on” - Hochverfügbarkeit als Anforderung
- Anwendungen werden global vertrieben -> Einfluss auf Lastspitzen
- Neue Dienste (Content-Delivery-Networks, Streaming)
Herrausforderung: Wie handhaben?
Kubernetes
Kubernetes (häufig abgekürzt mit K8s) ist ein Open-Source-Container
Orchestrierungssystem zur Automatisierung von Softwarebereitstellung, Skalierung und
Verwaltung. (Wikipedia)
Kubernetes Design
- Datenbank von Resourcen Definitionen
- verschachtelte Key->Value Entitäten
- verschiedene Typen für unterschiedliche Entitäten
- Namensräume zur Abgrenzung
- JSON Format zum Import/Export der Definitionen
- API zur Interaktion mit K8s Cluster
Helm
- Templating System für K8s Resourcen
- Ermöglicht komplexe Deployments
- helm chart definiert die Komponenten der Anwendung/Service bspw. Chatdienst
- Werden von Entwicklern der Anwendung bereitgestellt
- de-facto Standard für Deployments
Schöne neue Welt?
- Steile Lernkurve!
- Wahnsinnig komplex in großen Deployments
- Konstant Änderungen unterworfen
- Erfordert gute Instandhaltungsstrategie
- Debugging bereitet häufiger starke körperliche Schmerzen
- Daten Backup wird häufig übersehen
Zusammenfassung
- K8s ist ein mächtiges modernes System um Dienste im Sinne von Entwicklung 4 zu handhaben
- Es ist anpassbar und erweiterbar und komplett automatisierbar
- Aber eine Herrausforderung für seinen Administrator