Was ist Kubernetes?
Kubernetes ist eine quelloffene Container-Orchestrierungsplattform, mit der viele manuelle Prozesse automatisiert werden können, die mit dem Deployment, dem Management und der Skalierung containerisierter Anwendungen einhergehen.
Kubernetes automatisiert die Konfiguration Ihrer Anwendungen und kümmert sich um die Beibehaltung und Nachverfolgung der Ressourcenzuweisung. Kubernetes ist ein Projekt der Cloud Native Computing Foundation (CNCF) und wurde 2014 zum ersten Mal vorgestellt. Seitdem hat es sich zu einer weit verbreiteten Plattform für Unternehmen entwickelt, mit der sich verteilte Anwendungen und Services in großem Umfang ausführen lassen.
Was sind die grundlegenden Konzepte von Kubernetes?
Kubernetes ist eine Plattform zum Verwalten von Containern, die den Code sowie die Konfiguration und Abhängigkeiten einer Anwendung bündeln. Dies ermöglicht die Ausführung als isolierter Prozess mit eigenen Ressourcen. Jeder Anwendung wird dabei ein eigener Container oder mehrere Container zugewiesen, die in Kubernetes-Pods gruppiert werden.
Kubernetes kann über Bare Metal-Server, virtuelle Maschinen, Public Cloud-Anbieter, Private Clouds und Hybrid Cloud-Umgebungen ausgeführt werden. Einer der Hauptvorteile von Kubernetes ist, dass es mit diversen Infrastrukturarten funktioniert.
Das Design von Kubernetes ermöglicht Nutzenden, 3 zentralen Prinzipien zu folgen, die in den Details zur Implementierung von Kubernetes erläutert werden. Ein Kubernetes-Deployment sollte folgende Eigenschaften besitzen:
- Sicher: Es sollte den neuesten Best Practices für die Sicherheit entsprechen.
- Benutzerfreundlich: Es sollte mit wenigen einfachen Befehlen zu verwenden sein.
- Erweiterbar: Es sollte keinen Anbieter bevorzugen und über eine Konfigurationsdatei angepasst werden können.
Red Hat Ressourcen
Was sind die Vorteile von Kubernetes?
Kubernetes automatisiert viele mühsame Aufgaben, die beim Bereitstellen und Skalieren von Anwendungen anfallen. Darüber hinaus macht es den Weg frei für cloudnative Entwicklungsmethoden, durch die Unternehmen Zeit sparen und neue Software schneller auf den Markt bringen können.Zu den wichtigsten Vorteilen gehören:
Unterstützung großer, komplexer Umgebungen: In einer Produktivumgebung, in der mehrere Anwendungen ausgeführt werden, müssen viele Container auf einer Vielzahl von Hosts bereitgestellt werden, die zusammenarbeiten. Kubernetes bietet die Orchestrierungs- und Managementfunktionen, die Sie für eine skalierbare Container-Bereitstellung für große Workloads benötigen.
Skalierbarkeit: Kubernetes wird automatisch basierend auf Ihren jeweiligen Anforderungen skaliert. Dadurch stellt es die erforderliche Kapazität für Ihre Anwendungen bereit und spart gleichzeitig Ressourcen und Kosten.
Portierbarkeit: Kubernetes lässt sich Onsite in Ihrem eigenen Rechenzentrum, in einer Public Cloud und in hybriden Konfigurationen mit öffentlichen und privaten Instanzen ausführen. Mit Kubernetes können Sie dieselben Befehle in vielen verschiedenen Umgebungen nutzen.
Konsistente Deployments: Kubernetes-Deployments bieten eine infrastrukturübergreifende Konsistenz. Container verkörpern das Konzept einer unveränderlichen Infrastruktur. Sämtliche Abhängigkeiten und Einrichtungsanweisungen, die zum Ausführen einer Anwendungen erforderlich sind, werden zusammen mit dem Container gebündelt.
Getrennte und automatisierte Abläufe und Entwicklung: Dank Containern sparen Entwicklungsteams Zeit, was schnelle Iterationszyklen fördert. Gleichzeitig vertrauen Operations-Teams mit Kubernetes auf die Stabilität des Systems.
Unterstützung von Hybrid Cloud-Strategien: Viele Unternehmen kombinieren Onsite-Rechenzentren mit Public Cloud- oder Private Cloud-Lösungen und verteilen Workloads bei mehreren Cloud-Anbietern, um von Änderungen bei Preisen und Servicestufen zu profitieren. Die Konsistenz und Portierbarkeit von Kubernetes kann diese hybriden Strategien unterstützen.
Fortgesetzte Unterstützung traditioneller Anwendungen: Kubernetes unterstützt Sie bei der Bereitstellung und Verwaltung von containerisierten, cloudnativen und Legacy-Anwendungen sowie von Anwendungen, die zu Microservices umstrukturiert werden.
Verwaltung komplexer Umgebungen: Microservices in Containern erleichtern die Orchestrierung von Services, wie etwa Storage-, Netzwerk- und Sicherheitsservices. Sie multiplizieren allerdings auch die Anzahl der Container in Ihrer Umgebung erheblich, was die Komplexität erhöht. Kubernetes gruppiert Container in Pods, sodass Sie Workloads planen und diesen Containern die notwendigen Services bereitstellen können, beispielsweise Netzwerk- und Storage-Services.
Verbesserte Sicherheit:Kubernetes-Sicherheitspraktiken ermöglichen Unternehmen, effektive Schritte in Richtung einer besseren IT-Sicherheit zu unternehmen. Admin-Teams können Sicherheits- und Governance-Richtlinien anwenden und Richtlinien sogar nach Pods oder Pod-Gruppen segmentieren. Entwicklungsteams können Sicherheitsprobleme in Containern zur Runtime feststellen und diese in der Build-Phase beheben, statt Updates oder Patches erst in der Produktion durchzuführen.Dank RBAC (Role-based Access Control) können Nutzenden und Service-Accounts bestimmte Berechtigungen zugewiesen werden. Mit Kubernetes Secrets lassen sich sensible Daten wie Verschlüsselungscodes schützen.
DevOps-Unterstützung: Dank der konsistenten Infrastrukturbasis für Container kann Kubernetes einen DevOps-Ansatz unterstützen, was eine effiziente Arbeitsbeziehung zwischen Entwicklungs- und Operations-Teams fördert. Durch den Einsatz von CI/CD (Continuous Integration und Continuous Delivery/Deployment) lässt sich der Softwareentwicklungs-Lifecycle optimieren und beschleunigen. Und DevSecOps, eine Weiterentwicklung von DevOps, bindet Sicherheitskontrollen und Schwachstellenmanagement frühzeitig in den Softwareentwicklungs-Lifecycle ein.
Was ist ein Kubernetes-Cluster?
Ein aktives Kubernetes-Deployment wird als Cluster bezeichnet, also als eine Gruppe von Hosts, auf denen Container ausgeführt werden.
Admins definieren den gewünschten Zustand des Kubernetes-Clusters, also welche Anwendungen oder anderen Workloads ausgeführt werden sollen, welche Images sie verwenden, welche Ressourcen für sie verfügbar gemacht werden sollen sowie weitere Konfigurationsdetails.
Ein Kubernetes-Cluster besteht aus 2 Teilen: einer Control Plane und mehreren Compute Nodes (üblicherweise Server oder virtueller Server).
Die Control Plane ist für den gewünschten Zustand des Clusters verantwortlich und stellt beispielsweise fest, welche Anwendungen ausgeführt werden und welche Container Images sie verwenden.
Die Nodes befolgen unterdessen die Anweisungen der Control Plane und erledigen die eigentliche Arbeit, also die Ausführung der Anwendungen und Workloads. Ein einzelner Node ist eine eigene Linux®-Umgebung und kann entweder eine physische oder eine virtuelle Maschine sein. Ein Kubernetes-Cluster benötigt mindestens einen Compute Node, hat jedoch normalerweise viele.
Ein Kubernetes Node besteht aus Pods, wobei jeder Pod eine einzelne Instanz einer Anwendung repräsentiert. Ein Pod besteht aus einem Container oder einer Reihe eng gekoppelter Container sowie den Optionen, mit denen die Ausführung der Container gesteuert wird.
Eine Vielzahl von Kubernetes-Services arbeiten zusammen, um automatisch den am besten geeigneten Node für eine Aufgabe zu identifizieren, Ressourcen zuzuweisen und die Pods im jeweiligen Node zu bestimmen, die diese Aufgabe erledigen. Kubernetes leitet Anfragen automatisch an den richtigen Pod weiter – unabhängig davon, wo er sich im Cluster befindet oder ob er ersetzt wurde.
Mit einer einheitlichen API (Application Programming Interface) zum Verwalten, Entwickeln und Konfigurieren des Clusters sorgt Kubernetes dafür, dass alles unter Kontrolle bleibt.
Kubernetes-Architektur
Sehen wir uns jetzt genauer an, was in einem Kubernetes-Cluster geschieht.
Die Control Plane ist das Nervenzentrum, in dem die Komponenten zur Steuerung des Clusters sowie Daten zum Status und zur Konfiguration des Clusters untergebracht sind. Die Kernkomponenten von Kubernetes übernehmen die Aufgabe, sicherzustellen, dass die Container in ausreichender Anzahl und mit den erforderlichen Ressourcen ausgeführt werden.
Die Kubernetes-API (kube-apiserver) ist das Frontend der Kubernetes Control Plane und verarbeitet interne und externe Anfragen. Der API-Server ermittelt, ob eine Anfrage gültig ist, und verarbeitet sie dann. Sie können die API über REST-Aufrufe, über die Befehlszeile „kubectl“ oder über andere Befehlszeilentools wie „kubeadm“ aufrufen.
Der Kubernetes Scheduler (kube-scheduler) berücksichtigt den Ressourcenbedarf eines Pods, wie die CPU oder den Arbeitsspeicher, sowie den Zustand des Clusters. Anschließend wird der Pod für einen geeigneten Compute Node geplant.
Controller (kube-controller-manager) sorgen dafür, dass der Cluster tatsächlich ausgeführt wird, und der Kubernetes Controller-Manager enthält mehrere ineinander verschachtelte Controller-Funktionen. Ein Controller befragt den Scheduler und stellt sicher, dass die richtige Anzahl von Pods ausgeführt wird. Wenn ein Pod ausfällt, springt ein anderer Controller ein.
Konfigurationsdaten und Informationen zum Status des Clusters befinden sich in etcd, einer Speicherdatenbank für Schlüsselwerte. Etcd ist fehlertolerant, dezentralisiert und bildet die „Ultimate Source of Truth“ für Ihren Cluster.
Zur Ausführung der Container verfügt jeder Node über eine Container Runtime Engine.Docker ist nur ein Beispiel, aber Kubernetes unterstützt auch andere Runtimes, die mit der Open Container Initiative kompatibel sind, z. B. rkt und CRI-O.
Jeder Node enthält ein Kubelet, eine winzige Anwendung, die mit der Control Plane kommuniziert. Das Kubelet stellt sicher, dass die Container in einem Pod ausgeführt werden. Wenn die Control Plane einen Vorgang in einem Node benötigt, führt das Kubelet die Aktion aus.
Jeder Node enthält auch „kube-proxy“, einen Netzwerk-Proxy für die Kubernetes-Netzwerkservices. Kube-proxy verwaltet die Netzwerkkommunikation innerhalb oder außerhalb Ihres Clusters. Dabei wird entweder die Paketfilterschicht Ihres Betriebssystems verwendet oder der Datenverkehr selbst weitergeleitet.
Kubernetes verwaltet nicht nur die Container, in denen eine Anwendung ausgeführt wird, sondern auch die an einen Cluster angehängten Anwendungsdaten. Mit Kubernetes können Nutzende Storage-Ressourcen anfordern, ohne die Details der zugrunde liegenden Storage-Infrastruktur kennen zu müssen. Persistente Volumes sind spezifisch für einen Cluster und nicht für einen Pod und können daher die Lebensdauer eines Pods überleben.
Die Container Images, auf denen Kubernetes basiert, werden in einer Container Registry gespeichert. Dies kann eine von Ihnen konfigurierte Registry oder die Registry eines Drittanbieters sein.
Was sind Knative und Serverless Kubernetes?
Der Begriff „Serverless“ (serverlos) bezieht sich auf ein cloudnatives Entwicklungsmodell, bei dem Entwicklungsteams Anwendungen erstellen und ausführen können, ohne Server verwalten zu müssen. Natürlich sind die Server noch physisch vorhanden, nur wurden sie von der App-Entwicklung getrennt. Entwicklungsteams müssen für das Deployment lediglich den Code in Container paketieren.
Einmal bereitgestellt, werden Serverless-Apps bedarfsabhängig ausgeführt und können automatisch nach oben oder unten skaliert werden. Serverless-Lösungen von Public Cloud-Anbietern werden üblicherweise entsprechend der Nachfrage über ein eventgesteuertes Ausführungsmodell berechnet. Das heißt, dass eine Serverless-Funktion erst dann etwas kostet, wenn sie tatsächlich benutzt wird.
Kubernetes ist eine beliebte Wahl für das Ausführen von Serverless-Umgebungen. Kubernetes aber ist von Hause aus nicht für die native Ausführung von Serverless-Apps konfiguriert.Knative ist ein Open Source Community-Projekt, mit dem Komponenten hinzugefügt werden, um Serverless-Apps bereitstellen, ausführen und verwalten zu können.
Außerdem können Sie mit Knative einen Service entwickeln, indem Sie Ihren Code als Container Image paketieren und dieses an das System übergeben. Ihr Code wird nur bei Bedarf ausgeführt, und die Instanzen werden dabei von Knative automatisch gestartet und gestoppt.
Was ist ein Kubernetes Operator?
Ein Kubernetes Operator ist ein anwendungsspezifischer Controller, der die Funktionalität der Kubernetes-API erweitert, um Instanzen komplexer Anwendungen für Kubernetes-Nutzende zu erstellen, zu konfigurieren und zu verwalten sowie andere Anwendungsfunktionen hinzuzufügen. Hierzu werden allgemeine Kubernetes-Konzepte für Ressourcen und Controller herangezogen. Allerdings sind auch domain- oder anwendungsspezifische Kenntnisse zur Automatisierung des gesamten Lifecycles der verwalteten Software erforderlich.
Ein Kubernetes Operator kann zur Durchführung praktisch aller erdenklichen Kubernetes-Aktionen entwickelt werden: die Skalierung komplexer Apps, Upgrades der Anwendungsversion und sogar die Verwaltung von Kernel-Modulen für Nodes in einem Computing Cluster mit spezialisierter Hardware. Beispiele für Software und Tools, die als Kubernetes Operators bereitgestellt werden, sind etwa der Prometheus Operator für das Monitoring und der Elastic Kubernetes Operator für die Automatisierung der Suche.
Red Hat OpenShift und Kubernetes: Was ist der Unterschied?
Kubernetes ist eine Open Source-Software für die Bereitstellung, Verwaltung und Skalierung von Containern. Der praktische Einsatz erfordert beträchtliche Anstrengungen. Die meisten Unternehmen möchten Funktionen wie Automatisierung, Überwachung, Protokollanalyse, Service Mesh, Serverless und Tools für die Entwicklungsproduktivität integrieren. Vielleicht wollen Sie noch zusätzliche Tools hinzufügen, die Sie in Sachen Netzwerk, Ingress, Load Balancing, Storage, Monitoring, Protokollierung, Multi Cluster-Management und CI/CD (Continuous Integration/Continuous Delivery) unterstützen. Kurz gesagt, für die meisten Use Cases reicht Kubernetes allein nicht aus.
Viele Softwareanbieter stellen ihre eigenen Versionen von Kubernetes bereit, darunter selbst gemanagte Distributionen, gehostete Services, Installationsprogramme und PaaS-Angebote (Platform as a Service). Die CNCF führt eine Liste mit Dutzenden von zertifizierten Kubernetes-Angeboten.
Red Hat® OpenShift® ist nicht nur ein von der CNCF zertifiziertes Kubernetes-Angebot, es umfasst noch viel mehr. Red Hat OpenShift nutzt Kubernetes als Basis für eine vollständige Plattform, um cloudnative Anwendungen konsistent in Hybrid Cloud-Umgebungen auszuführen.
Mit Kubernetes als Engine für die Container-Orchestrierung integriert Red Hat OpenShift viele weitere Funktionen aus dem CNCF Open Source-IT-Ökosystem, die von Red Hat getestet, gebündelt und unterstützt werden. Red Hat OpenShift ist als Public Cloud-Service bei den führenden Anbietern wie AWS, Microsoft Azure, Google und IBM verfügbar. Alternativ können Sie die Lösung als selbst gemanagte Software im breiten Spektrum von Bare Metal- und virtuellen Infrastrukturen in Rechenzentren, Public Clouds und am Edge einsetzen.
Was ist OKD?
OKD ist ein Community-Projekt gebündelter Software-Komponenten, die für die Ausführung von Kubernetes erforderlich sind. Zusätzlich zu Kubernetes bietet OKD dedizierte Tools für Entwicklungs- und Operations-Teams, die eine beschleunigte Anwendungsentwicklung, eine effiziente Bereitstellung und Skalierung sowie langfristige Lifecycles unterstützen. Mit OKD können Entwicklungsteams Anwendungen in der Cloud entwickeln, testen und bereitstellen. Dabei werden verschiedene Programmiersprachen unterstützt, darunter Go, Node.js, Ruby, Python, PHP, Perl und Java.
Es ist das Upstream-Projekt von Red Hat OpenShift, optimiert für eine kontinuierliche Anwendungsentwicklung und -bereitstellung. OKD ist bezüglich Funktionen üblicherweise einige Releases weiter als OpenShift, da Community-Updates ebenso wie die Tests für die Nutzung in Unternehmen zuerst bei OKD stattfinden.
Der Hauptunterschied zwischen OKD und OpenShift besteht darin, dass Red Hat OpenShift von Red Hat validiert und getestet wird und Subskriptionsvorteile bietet, um die Anforderungen für Unternehmensabläufe zu erfüllen. Eine Red Hat OpenShift Subskription umfasst technischen Support, Sicherheitsteams, langfristige Supportoptionen, validierte Drittanbieter-Operatoren, zertifizierte Datenbanken und Middleware und vieles andere mehr.
Warum Red Hat als Anwendungsplattform?
Red Hat ist ein führender und aktiver Entwickler von Open Source-Container-Technologien (darunter auch Kubernetes) und entwickelt wichtige Tools zum Sichern, Vereinfachen und automatischen Aktualisieren Ihrer Container-Infrastruktur.
Mit Red Hat OpenShift können Ihre Entwicklungsteams neue containerisierte Anwendungen erstellen, hosten und in der Cloud mit der erforderlichen Skalierbarkeit, Kontrolle und Orchestrierung bereitstellen. So können Sie gute Ideen schnell und einfach in neue Geschäftsmöglichkeiten verwandeln. Wenn Sie Ihre Kubernetes-Workloads in einem gemanagten Cloud Service bereitstellen oder dorthin verschieben möchten, ist OpenShift auch als cloudnativer Service auf Amazon Web Services (AWS), Microsoft Azure, Google Cloud, IBM Cloud und bei anderen Anbietern verfügbar.
Basierend auf den Grundlagen von OpenShift können Sie Red Hat Advanced Cluster Management und Red Hat Ansible® Automation Platform zusammen verwenden, um mehrere Kubernetes-Cluster in verschiedenen Regionen und Umgebungen, einschließlich der Public Cloud, On-Premise und am Edge, effizient bereitzustellen und zu verwalten.
Der offizielle Red Hat Blog
Lernen Sie mehr über unser Ökosystem von Kunden, Partnern und Communities und erfahren Sie das Neueste zu Themen wie Automatisierung, Hybrid Cloud, KI und mehr.