Was ist eine Kubernetes Distribution und was sind die Unterschiede zwischen Kubernetes und OpenShift?

Bei VSHN und APPUiO.ch setzen wir auf OpenShift als Kubernetes Distribution. Was eine Kubernetes Distribution ist, warum wir das machen und wo die Unterschiede zu „plain“ Kubernetes liegen erklären wir in diesem Blogpost.

Kubernetes_Blog_Post_VSHN

Was ist Kubernetes?

Die offizielle Beschreibung von Kubernetes lautet:

Kubernetes is a portable, extensible open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation.

Der wichtigste Teil daraus ist die Tatsache, dass es sich um eine Plattform handelt und nicht um ein fertiges Produkt ab der Stange. Für das Verständnis dieses Beitrags ist dies eine wichtige Information.

Was ist eine Kubernetes Distribution?

Um die Unterschiede von Kubernetes und OpenShift zu verstehen, gilt es zuerst einmal den Begriff „Kubernetes Distribution“ zu klären: Wird Kubernetes direkt aus dem Open Source Kubernetes Projekt installiert, erhält man „nur“ die Kernkomponenten (API Server, Controller Manager, Scheduler, Kubelet, kube-proxy). Damit Kubernetes aber auch wirklich benutzbar wird, benötigt man sehr viele weitere Komponenten wie etcd, Ingress Controller, Logging Server, Metrics Collector (z.B. Prometheus), Software Defined Network (SDN) und viele mehr. Dies ist sehr gut vergleichbar mit Linux: Der Linux Kernel alleine bringt noch nicht viel, es braucht eine ganze Linux Distribution welche eine Shell, das Paketmanagement, den Bootprozess und vieles mehr zur Verfügung stellt.

OpenShift ist eine Kubernetes Distribution und macht aus Kubernetes ein Produkt

Eine „Minimum Viable Kubernetes Distribution“ benötigt folgende zusätzlichen Komponenten und Tools für einen produktiven Betrieb:

  • Installations- und Upgrademechanismus: Für eine automatisierte Installation aller involvierten Komponenten.
  • SDN (Software Defined Network): Pods müssen untereinander kommunizieren können, egal wo sie laufen. Dies stellt das SDN sicher.
  • Ingress Controller: Damit Benutzerzugriff auf die auf dem Cluster laufende Applikationen möglich ist.
  • Authentication: Eine zentrale Benutzer- und Gruppendatenbank stellt den authentisierten und autorisierten Zugriff zur Verfügung.
  • Security: Kubernetes führt Container via Docker oder CRI-O aus. Die Sicherheit auf dem Hostsystem muss entsprechend gewährleistet sein.
  • Persistent Storage: Stateful Applikationen wie Datenbanken benötigen persistenten Storage.
  • Monitoring: Ständige Überwachung aller Clusterkomponenten und Applikationen.
  • Backup: Sicherung der Clusterkomponenten und Persistenten Daten.

Optional werden weitere Komponenten empfohlen:

  • Zentrales Logging mit grafischer Aufbereitung und Durchsuchbarkeit
  • Applikations- und Cluster Metrics inkl. Alerting

OpenShift als Kubernetes Distribution

Im Kern basiert OpenShift zu 100% auf Kubernetes, bringt aber als Kubernetes Distribution alles mit, was zur Benutzung eines Kubernetes Clusters benötigt wird. Um nur die wichtigsten Funktionen zu nennen:

  • Operations ToolsEin offizieller und unterstützter Weg via Ansible ermöglicht den gesamten Lifecycle von OpenShift durchzuführen. Dazu gehört die automatisierte Installation, wie auch Upgrades auf neuere Versionen von OpenShift.
  • Router: Der OpenShift Router (Ingress Controller) – basierend auf HAProxy – sorgt dafür, dass der Zugriff auf Applikationen innerhalb des Clusters über HTTP(S) ermöglicht wird.
  • Multi-Tenancy: Die im Kern eingebaute Multi-Tenancy über OpenShift Projekte, RBAC und weitere Konzepte ermöglicht die Benutzung der Plattform durch verschiedene Stakeholder.
  • Authentication: Es werden die unterschiedlichsten Authentication Backends unterstützt, allen voran LDAP, ActiveDirectory und weitere.
  • Metrics: Die mitgelieferte Metrics Komponente sammelt alle verfügbaren Messwerte (RAM, CPU, Netzwerk) der auf dem Cluster laufenden Applikationen und visualisiert diese in der Webkonsole.
  • Central Logging: Alle von der Applikation auf stdout geloggten Zeilen werden automatisch von der zentralen Logging Komponente gesammelt und über die Webkonsole dem Benutzer zur Verfügung gestellt.
  • Security: Die Plattform ist auf höchste Sicherheit ausgelegt. So sorgen z.B. Sicherheitsmassnahmen im Kernel von Red Hat Enterprise Linux wie SELinux dafür, dass die Sicherheit der Container gewährleistet ist. Weitere Massnahmen wie „Security Context Constraints“ (SCC) und das Verhindern von Root Containern sorgen für weitere Sicherheit.
  • Builds und Pipelines: Direkt im Cluster integrierte Build- und Pipeline-Funktionalitäten ermöglichen einen komplett integrierten CI/CD Workflow.
  • Webkonsole: Alle Vorgänge auf dem Cluster werden für den Anwender der Plattform in einer Webkonsole graphisch dargestellt und ermöglichen einen einfachen und schnellen Einstieg in die Benutzung von Kubernetes.
  • SDN: Das mitgelieferte Software Defined Networking sorgt für die Konnektivität zwischen den auf der Plattform laufenden Pods und für eine angemessene Netzwerksicherheit mit Network Policies.
  • Container Registry: Docker / Container Images werden in der mitgelieferten Registry gespeichert und zum Deployment auf die Worker Nodes benutzt.

Alle diese von Haus aus mitgelieferten Funktionalitäten lassen sich zu jedem Kubernetes Cluster hinzufügen, was jedoch mit einem hohem Aufwand verbunden ist. Vergleichbar mit dem Bau einer eigenen Linux Distribution, wie das z.B. Linux From Scratch veranschaulicht. Für Kubernetes existiert eine ähnliche Anleitung, genannt Kubernetes The Hard Way.

OpenShift als PaaS

Die Stärke von Kubernetes liegt in der Container Orchestrierung. Zusätzlich dazu bietet OpenShift klassische Platform-as-a-Service (PaaS) Funktionen. Eine davon ist das automatische builden und deployen von Applikationscode direkt ab einem Git Repository. Trotzdem hat man als Anwender der Plattform dank der grossen Flexibilität aber immer die Wahl, ob man die integrierten Buildfunktionen nutzen möchte, oder doch lieber ausserhalb des Cluster builden möchte. Dies lässt sich für jedes Deployment entscheiden, so können auf einem Cluster beide Arten verwendet werden.

OpenShift als Upstream zu Kubernetes

Viele Entwicklungen in Kubernetes stammen ursprünglich aus OpenShift. Als bestes Beispiel lässt sich RBAC (Role Based Access Control) nennen. Dieses Feature ist seit der ersten OpenShift-Version Bestandteil und wurde sukzessive in Kubernetes eingebaut. RBAC ist seit Kubernetes Version 1.6 fester Bestandteil von Kubernetes. Auch das OpenShift „Route“- oder das „DeploymentConfiguration“-Objekt hat die heutigen Objekte „Ingress“ bzw. „Deployment“ in Kubernetes massgeblich mitgeprägt.

Da OpenShift zu 100% auf Kubernetes basiert, werden auch alle Kubernetes Native Workloads unterstützt, wie z.B. das „Deployment“- oder das „Ingress“-Objekt.

Schaut man etwas genauer auf die Contributor-Statistiken stellt man fest, dass Red Hat zu den Top 3 Contributor-Firmen gehört, somit ist Red Hat massgeblich an der Entwicklung von Kubernetes beteiligt. Mit dem Kauf der Firma CoreOS hat sich Red Hat geballtes Kubernetes Know-how angeeignet. Die Verschmelzung von OpenShift und Tectonic wird der nächste Meilenstein der Kubernetes Distribution OpenShift sein.

Alternativen zu OpenShift

OpenShift ist nicht die einzige Kubernetes Distribution auf dem Markt. Ein kurzer Vergleich zeigt die Unterschiede:

  • Cloud Vendor Kubernetes: Die grossen Clouds bieten ihre eigenen Kubernetes Distributionen als Service an. Diese sind auf die jeweiligen Clouds zugeschnitten und werden von den Anbietern gepflegt. Eine Installation auf der eigenen Private Cloud oder auf anderen Public Clouds ist nicht möglich.
  • Rancher: Seit der Version 2.0 fokussiert sich Rancher zu 100% auf Kubernetes und bietet als grosse Stärke eine Multi-Cluster Verwaltungsfunktion. So können mit Rancher Kubernetes Cluster in der Cloud (z.B. auf Amazon oder Google) zentral verwaltet werden, wie auch Kubernetes Cluster mit der „Rancher Kubernetes Engine“ auf eigenen VMs. Mit dem Webinterface gestaltet sich das aufsetzen eines neuen Clusters sehr einfach und Applikationsdeployments mittels Helm sind auch direkt verfügbar.
  • Tectonic: Diese Distribution legt grossen Wert auf Cloud-Native-Automatisierung. Durch den Kauf von CoreOS durch Red Hat wird Tectonic mit OpenShift zusammengeführt und viele der Funktionen werden von Tectonic in OpenShift eingebracht.
  • Canonical / Ubuntu Kubernetes: Plattform basierend auf Ubuntu, welches Juju als Installationstool verwendet. In Partnerschaft mit Google und Rancher wird in Zukunft eine Hybrid-Cloud-Lösung angeboten.
  • SUSE CaaS-Plattform: Eine sehr neue Plattform, basierend auf SUSE MicroOS. Mittels Salt wird die Konfigurationsverwaltung sichergestellt. Unter folgendem Link kann am Beta Programm teilgenommen werden: SUSE CaaS Platform Beta.

Weitere Kubernetes Distributionen aufgelistet:

Ein sehr wichtiger zu beachtender Aspekt ist der Cloud- und/oder Vendor-Lock-In. Viele der Kubernetes Distributionen haben ihre eigenen Eigenschaften, die unter Umständen nicht miteinander kompatibel sind. Am Beispiel der „Cloud-Vendor“-Distributionen: Diese können nur in der entsprechenden Cloud benutzt werden. Möchte man jedoch einen Hybrid-Cloud-Ansatz verfolgen, ist dies durch den Lock-In nicht möglich. Im Gegenzug ermöglicht eine selber installierbare Distribution wie OpenShift diese Option.

Reine Open Source Distributionen ohne Herstellersupport sind für produktive Umgebungen nicht zu empfehlen, da dieser für eine komplexe Plattform wie Kubernetes von grossem Vorteil ist.

APPUiO – Swiss Container Platform

Dem aufmerksamen Leser ist bestimmt aufgefallen, dass zwischen der „Minimum Viable Kubernetes Distribution“ und OpenShift gewisse Diskrepanzen bestehen. Genau dort setzt APPUiO an: Wir veredeln OpenShift zu einer vollständigen, production-ready Kubernetes Distribution indem wir Managed Services anbieten. Wir überwachen und sichern den Clusterstatus automatisch, kümmern uns um regelmässige Updates, beheben Fehler, stellen Persistent Storage zur Verfügung und helfen mit unserem Know-how das Beste aus der Plattform herauszuholen.

Weitere Informationen zum Thema Kubernetes und OpenShift

Am Cloud Native Meetup vom 28. August 2018 haben wir über das Thema Kubernetes Distribution berichtet, die Slides dazu sind auf Speaker Deck zu finden. Mehr zum Thema OpenShift, Docker und Kubernetes findest du ausserdem hier. Ein weiterer empfehlenswerter Blogpost zu diesem Thema von Tomasz Cholewa: 10 most important differences between OpenShift and Kubernetes (englisch, technisch).

Wie können wir helfen?

Durch unsere Erfahrung im Betrieb von OpenShift Clustern rund um die Welt bieten wir Managed OpenShift Cluster auf nahezu jeder Public, Private oder On-Premise Cloud an. Oder besteht Interesse an einer anderen Kubernetes Distribution als OpenShift? Wir helfen gerne bei der Evaluation, Integration und Betrieb und unterstützen mit unserer langjährigen Kubernetes Erfahrung.

Kontaktiere uns, folge uns auf Twitter oder wirf einen Blick auf unsere Services.

Wir freuen uns auf dein Feedback!