Container und Kubernetes

Container und Kubernetes

Was sind Container?

Jede Anwendung hat eigene Anforderungen an das Betriebssystem, benötigt spezielle Verzeichnisse sowie eigene Frameworks oder Bibliotheken. Deshalb ist die Installation mehrerer Anwendungen auf einem Serversystem kompliziert, insb. dann, wenn verschiedene Anwendungen unterschiedliche Versionen eines Frameworks benötigen. Mit Containern hat man dieses Problem nicht: Container bieten dem Entwickler die Möglichkeit, sämtliche Abhängigkeiten in ihnen zu bündeln. Container enthalten also eine Sammlung von Betriebssystem, Bibliotheken, Frameworks und die Anwendung selbst. Da mehrere Container auf einem Serversystem laufen können, können so die Anforderungen verschiedener Anwendungen sauber voneinander getrennt werden.

Neben der Bündelung sämtlicher benötigter Software innerhalb eines Containers folgt jeder Container auch einem Standard, nach dem er ausgeführt werden kann. Der IT-Betrieb braucht also nicht mehr zu wissen, in welcher Programmiersprache eine Anwendung entwickelt wurde und welche Bibliotheken nötig sind. Er benötigt nur wenige Informationen zum Betrieb, z. B. welche Verzeichnisse eingebunden werden müssen, und schon kann die Anwendung gestartet werden. Ein Container wird als ein festes Paket, genannt Image, ausgeliefert. Dieses kann in jeder containerfähigen Umgebung verwendet werden, ohne dass weitere Abhängigkeiten erfüllt werden müssen.

Vorteile - Was bringen Container?

Vorteile - Was bringen Container?

Container sind die modernere Art Software zu betreiben. Sie sind die Weiterentwicklung zu der weitverbreiteten Virtualisierung. Im Unterschied zur Virtualisierung wird keine virtuelle Hardware erstellt auf der ein komplettes Betriebssystem einschließlich Betriebssystemkern läuft. Bei Containern wird der Kern des Betriebssystems aus dem darunterliegenden Serversystem (Host) durch den Container verwendet. Lediglich die Laufzeitbiblkiotheken werden als Teil des Containers mitgeliefert. So ist es möglich, wie bei der Virtualisierung ein komplettes System inkl. aller technischen Abhängigkeiten auszuliefern, allerdings spart man gegenüber der Virtualisierung einen Großteil der Ressourcen, da der Betriebssystemskern selbst nicht Teil des Containers ist, sondern der des Hosts verwendet wird.

  • Containeranwendungen können schneller entwickelt, getestet und deployed werden als herkömmliche Anwendungen, weil ein automatisierter Aufbau der Anwendung bis hin zur produktiven Umgebung unterstützt wird (Continuous Deployment).
  • Container verbrauchen auch weniger Ressourcen als virtuelle Maschinen, wie bspw. Arbeitsspeicher und Prozessorleistung. So bleibt mehr Kapazität, um relevante Rechenarbeit zu verrichten. Durch den geringeren Ressourcenbedarf ist der Betrieb von Containern günstiger als der von Anwendungen auf virtuellen Umgebungen.
  • Containerprozesse sind voneinander isoliert, so dass kein ungewollter Zugriff von einem Container auf einen anderen erfolgen kann. Das bietet einerseits sicherheitstechnische Vorteile durch klarere Abgrenzungen aber auch Vorteile in der Softwarearchitektur: die Separierung der Komponenten wird erzwungen und so eine lose Kopplung der Softwarekomponenten erreicht.
  • Container sind portabel. Sie können einfach erstellt und automatisch von einer Containerumgebung auf eine andere übertragen werden. Gespeichert werden sie in öffentlichen oder privaten Repositories, sogenannten Container Registries. Deshalb vertragen sich Container gut mit Microservices, Continuous Deployment und DevOps.

Viele Container? Einfache Orchestrierung mit Kubernetes!

Um eine gute Trennung einzelner Anwendungskomponenten zu erreichen, kann man eine Anwendung auf mehrere Container aufteilen. Daraus ergibt sich schnell das Problem: viele Container aber wie behält man den Überblick?

Lösung dieses Problems ist die Orchestrierung der Container mittels Kubernetes. Kubernetes ist ein Open-Source-System zur Orchestrierung von Containern. Orchestrierung umfasst diese Aspekte:

  • Bereitstellung und Konfiguration von Containern in einer Container-Laufzeitumgebung
  • Zuordnung von Ressourcen zu einem Container wie bspw. Rechenleistung und Arbeitsspeicher
  • automatische oder manuelle Skalierung von Containern, wenn mehr oder weniger Rechenkapazität benötigt wird
  • Lastverteilung bei Betrieb von mehreren Instanzen eines Containers
  • Bereitstellung und Erweiterung von persistentem Speicher (Festplattenspeicher) für die Container, um Daten auch über einen Neustart hinweg zu erhalten
  • Fehlertolerante Verwaltung von Containern, durch automatischen Neustart von fehlgeschlagenen Containern und Neustart von Containern auf anderen Knoten (Server im Kubernetesverbund, auch: Kubernetes Cluster) im Verbund, falls ein Knoten ausfällt
  • Verteilung der Container auf sämtliche verfügbare Knoten im Cluster
  • einfaches Auffinden der benötigten Anwendungskomponenten im Cluster durch Service Discovery
  • Gesicherter Netzwerkverkehr im Kubernetesverbund

Weitere Komponenten im Kubernetes Cluster

Um einen Kubernetes Cluster zu betreiben, sind neben der Orchestrierung noch weitere Funktionen für den Betrieb hilfreich.

  • Traefik oder Nginx ermöglichen das Ingress Routing, also das Verstecken von Anwendungen hinter bestimmten URLs. Neben dem Routing kann bspw. Traefik automatisch SSL-Zertifikate einrichten, um den Zugriff auf eine Anwendung zu verschlüsseln.
  • Prometheus sammelt Metriken der Anwendungen, die im Kubernetesverbund betrieben werden. Bspw. werden Antwortzeiten oder Zugriffszeiten auf die Datenbank gemessen und von Prometheus gespeichert.
  • Alertmanager bietet die Möglichkeit, Aufgrund spezieller Messwerte, die von Prometheus erfasst wurden, Warnmeldungen zu verschicken. Dies kann bspw. per Email, SMS, Slack oder Microsoft Teams erfolgen.
  • Grafana stellt die Metriken grafisch dar und bietet so die Möglichkeit, einen schnellen Überblick über den Zustand des Clusters zu erhalten.
  • Loki ist eine Anwendung, die Log-Meldungen der Anwendungen einsammelt und ebenfalls in Grafana zur Verfügung stellt. So bekommt man dort einen Überlick, nicht nur über bestimmte Systemmetriken sondern auch über Log-Meldungen der verschiedenen Anwendungen.
  • Verschiedene Anwendungen bereiten Daten aus dem Kubernetes Cluster auf und stellen sie für Prometheus bereit. Der Node-Exporter ermittelt die Ressourcenauslastung auf Ebene der Knoten, also der Server im Cluster. Der von uns entwickelte Kubernetes API Scraper ermittelt bspw. die verbleibenden Festplattenkapazitäten.

Nutzen Sie die Stärke von Containern!

Wir migrieren Ihre Anwendungen in Container und betreiben für Sie die Anwendungen. Nutzen Sie unsere Erfahrung und profitieren Sie durch eine schnelle und reibungslose Umstellung. Machen Sie sich und Ihrem IT-Betrieb das Leben leichter!