Was sind Container, Pods, Docker & Kubernetes und wie können Microsoft Azure, Google Cloud & Amazon AWS dabei unterstützen?

Jun 17, 2021
Stephan Mahler

Gleich vorweg: Container Technologien sind im Wesentlichen ein Thema für Software-Unternehmen. Allerdings ein wichtiges Thema. Container sind heute der Standard Output der Software Development Prozesse. Docker ist dabei der De-Facto-Standard der Container Technologie und Kubernetes derjenige für die Orchestrierung davon.

Was ist Containerisierung

Containerisierung wird als eine Form der Virtualisierung definiert, bei der – im Gegensatz zur OS Virtualisierung – in erster Linie Anwendungen und nicht Betriebs-Systeme, in isolierten Bereichen, sogenannten Containern, ausgeführt werden. Sie nutzen alle dasselbe, gemeinsam genutzte Betriebs-System (OS).

(Quelle: Docker.com)

Weshalb Container für Software-Entwicklung

Die Frage ist wie ein Déjà-vu als die OS Virtualisierung neu war. Man fragte sich «weshalb virtualisieren»? Die Vorteile der Containerisierung sind kurz gefasst ähnlich:

  • Entwicklung und Betrieb werden flexibler und schneller (Automatisierung, Skalierung)
  • Es ist komfortabel und reduziert Fehler (zbsp. zwischen Entwicklungs-, Staging- und Produktiv-Umgebung)
  • Es ist robuster und sicherer im Betrieb und bedeutet bessere Verfügbarkeit

Unterschied zwischen Docker und Kubernetes

Neben Docker und Kubernetes bestehen noch weitere Container- und Orchestrierungs-Lösungen. Wir fokussieren uns der Einfachheit halber nachfolgend auf die beiden Produkte, da sie mit Abstand den grössten Marktanteil und das schnellste Wachstum haben.

Docker ist die eigentliche Container Plattform – es isoliert die Applikationen von der darunterliegenden Infrastruktur durch virtuelle Container mit den Applikationen drin. Wenn wir von Container sprechen, meinen wir meist auch Docker Container. Im Übrigen betreibt Docker mit dem «Docker Hub» eine grossartige Bibliothek mit über 100’000 Container Images. Wenn man darin stöbert, findet jeder Entwickler – und sogar einige System Techniker – seine Favoriten. Unter den populärsten Docker-Container-Images befinden sich derzeit zum Beispiel: Postgres, busybox, redis, traefik, node(.js), mysql, nginx, mongo(DB), WordPress, nextcloud, owncloud, usw. – man kann diese Images mit einem kurzen Befehl auf seine Umgebung / Infrastruktur ziehen, anpassen und betreiben.

Es zeigt auf einfache Weise, wie viele Vorteile wir von der Container Mobilität haben. Entwickler können sehr einfach den Container zu sich auf die Umgebung ziehen, Code entwickeln, testen und deployen. Systemtechniker können eine Applikation, wie zum Beispiel owncloud (Filesharing-Dienst), sehr einfach und als fertiges Paket beziehen und betreiben.

Kubernetes (auch K8s) kommt ins Spiel, wenn wir mehrere Container orchestrieren möchten. Die Container sind dabei verpackt in sogenannte Pods, wobei in der Regel ein Container einem Pod entspricht. Pods sind die kleinste managebare Einheit für Kubernetes. Kubernetes kümmert sich beispielsweise beim Management um folgendes:

  • Skalierung von Pods (Container) & Load Balancing
  • Automatisierte Rollouts & Rollbacks
  • Self-Healing (zerstören von nicht antwortenden Pods / Containern und Re-Deployment)
  • Scheduling (Pods/Container auf passende Nodes / Hosts)
  • Bereitstellung von Services wie
    • Loadbalancer (Verteilung der Arbeitslast auf mehrere Pods/Container)
    • ClusterIP (interne Kommunikation zwischen Pods/Container, da zbsp. die IP sich idR. bei Pods/Container intern ständig ändert)
    • Nodeport (Externe → interne Kommunikation, ähnlich einem Router)

Ein simples Architekturbeispiel mit Containern

Beim Aufbau von modernen Applikations-Architekturen wird der Ansatz von «stateless» Containern angestrebt, die man je nach Load und Verfügbarkeit horizontal skaliert. Das bedeutet, die Container beinhalten die Applikationen – oder Teile davon (zbsp. Frontend / Backend) –  aber nicht die Daten. Die Daten befinden sich in zentralen und skalierbaren Datenbanken. In der Cloud werden dabei oft Database-as-a-Service-Dienste genutzt, wie zbsp. Azure SQL / PostgreSQL, Google Cloud SQL oder AWS RDS (PostgreSQL, MySQL, MariaDB, SQL, …) und zusätzliche zentrale, skalierbare File-Storages.

Da die Container «stateless» sind – also keine verändernden Daten beinhalten – können sie so beliebig skaliert und zerstört werden. Je nach Workload, Gesundheitszustand oder zum Beispiel beim Rollout einer neuen Applikations-Version. Damit sollten auch die Zeiten vorbei sein, in welchen BlackFriday, Playstation Releases oder populäre Bands ganze Online-Shops / Applikationen lahmgelegt haben.

Unterhalb eine einfache Skizze. Sobald ein Frontend oder Backend Container ausfällt, hat dies keinen Effekt auf die Verfügbarkeit der Applikation. Kubernetes wird dies in der Regel automatisch feststellen, den betroffenen Container zerstören und einen neuen Container deployen.

Ein etwas ausführlicheres DevOps-Diagramm, das den ganzen Deployment Prozess und weitere nützliche Services mit auflistet.

Quelle: Microsoft Docs

 

Container auf Microsoft Azure, Google Cloud und Amazon AWS

Alle Hyperscaler haben ein umfangreiches Angebot im Bereich Container und Kubernetes.

Dabei kommt jeder Hyperscaler mit einem fertigen Kubernetes Services (zbsp. Microsoft Azure Kubernetes Service kurz AKS, Amazon EKS, Google GKE), der oft auch kostenlos ist. Bezahlt werden anschliessend die Hosts, auf welchen die Container betrieben werden. Durch Produkte wie Google GCP Autopilot oder Amazon AWS Fargate gehen die Hyperscaler gar so weit, dass man sich nicht mehr um die darunterliegenden Nodes kümmern muss, sondern einfach noch einen Fixpreis je Container bezahlt.

Google ist übrigens der Erfinder von Kubernetes und mit dem im Februar 2021 lancierten Autopilot, haben sie den aktuell wohl autonomsten, isoliertesten und schnellsten (deployment) Container / Kubernetes Dienst. Wenn ein Unternehmen einen einzelnen Container betreiben möchte, ist Kubernetes dafür nicht geeignet. Microsoft hat aber zum Beispiel ihren Azure App Service über die letzten Jahre stark ausgebaut und dieser (ehemalige Webhosting Service) kann unterdessen auch mit einfachen Container Szenarien umgehen.

Bei der Verrechnung gibt es immer die Pay-per-Use-Modelle oder auch Reserved Instances, welche ein Commitment benötigen, aber dafür mit Discounts bis zu 70 % aufwarten.

Wie weiter?

Wir freuen uns, wenn wir Sie weitergehend beraten dürfen. Insbesondere unterstützen wir Sie gerne beim Hyperscaler-Pricing, der Architektur und dem anschliessenden Betrieb mit bis zu 24/7 Überwachung & Operations Ihrer hochverfügbaren und sicheren Applikation in der Cloud.

Als Multi-Cloud Provider unterstützen wir Sie auf allen Cloud-Umgebungen und finden so, die am besten geeignete Lösung für Sie. Kontaktieren Sie uns noch heute!