tostphoto - stock.adobe.com
Kubernetes-Operator und Controller: Was ist der Unterschied?
Kubernetes-Operatoren und -Controller haben ähnliche Funktionen, spielen aber unterschiedliche Rollen im Kubernetes-Ökosystem. Wir erklären die Unterschiede und Einsatzgebiete.
Eine der herausragenden Funktionen von Kubernetes ist die Fähigkeit, einen gewünschten Zustand automatisch zu implementieren. Sie beschreiben, was passieren soll, und die Kontrollebene kümmert sich um den Rest.
Um dies umzusetzen, stützt sich Kubernetes auf Controller und Operatoren. Beide Methoden sind dafür verantwortlich, dass der tatsächliche Zustand der Ressourcen mit dem gewünschten Zustand übereinstimmt, der in den Kubernetes-Konfigurationen definiert ist.
Es gibt jedoch einige nuancierte Unterschiede zwischen Controllern und Operatoren. Um eine erfolgreiche Kubernetes-Bereitstellung zu gewährleisten, ist es wichtig zu wissen, welche Option für Ihre Konfigurationsanforderungen am besten geeignet ist.
Was ist ein Kubernetes-Controller?
Kubernetes-Controller beruhen auf Regelkreisen, einem Konzept aus der Kontrollsystemtheorie. Ein Regelkreis ist ein kontinuierlicher Zyklus, in dem der Ist-Zustand einer Ressource automatisch mit dem Soll-Zustand verglichen wird, um die beiden Zustände in Einklang zu bringen.
Stellen Sie sich zum Beispiel vor, Sie fahren mit einem Auto im Tempomat-Modus und die gewünschte Geschwindigkeit ist auf 130 km/h eingestellt. Ein Regelkreis überwacht die tatsächliche Geschwindigkeit des Fahrzeugs und bringt sie so nah wie möglich an die gewünschte Geschwindigkeit von 130 km/h heran. Wann immer die tatsächliche Geschwindigkeit von der gewünschten Geschwindigkeit abweicht, erkennt der Regelkreis die Abweichung und versucht, die beiden Geschwindigkeiten anzugleichen.
Die Idee hinter den Kubernetes-Controllern ist ähnlich. Wie Regelkreise überprüfen Controller in Kubernetes, welche Bedingungen Admins vorgegeben haben, und arbeiten daran, diese Bedingungen automatisch durchzusetzen.
Ein Kubernetes-Controller ist eine beliebige Einheit, die Ressourcen überwacht und feststellt, ob der aktuelle Zustand mit dem konfigurierten Zustand übereinstimmt. Wenn dies nicht der Fall ist, versucht der Controller, die Ressourcen an den gewünschten Zustand anzupassen.
Vorinstallierte versus benutzerdefinierte Kubernetes-Controller
Kubernetes bietet eine Reihe von integrierten Controllern, die standardmäßig in jeder Kubernetes-Umgebung installiert sind. Eingebaute Controller werden von kube-controller-manager verwaltet, einem Daemon, der in die Kubernetes-Kontrollebene integriert ist.
Beispiele für integrierte Controller sind die folgenden:
- Deployment. Dieser Controller überwacht den Status von Kubernetes Deployments, dem gängigsten Ansatz zum Bereitstellen eines Workloads in Kubernetes.
- StatefulSet. Dieser Controller bietet Stateful Storage für persistente Anwendungen.
- CronJob. Dieser Controller führt Jobs – Komponenten eines Kubernetes-Workloads, die bestimmte Aufgaben bearbeiten – nach einem festgelegten Zeitplan aus.
Kubernetes unterstützt auch das Erstellen und Installieren von benutzerdefinierten Controllern. Mit benutzerdefinierten Controllern erweitern Kubernetes-Benutzer die Funktionen für bestimmte Aufgaben und Arbeitsabläufe.
Hier ein Beispiel: ein Administrator muss regelmäßig bestimmte Arten von Labels für Pods in seiner Kubernetes-Umgebung hinzufügen. Durch das Schreiben eines benutzerdefinierten Controllers erstellt der Administrator benutzerdefinierte Labels für Pods auf eine Art und Weise, die sich mit den voreingestellten Controller-Methoden wie Deployments nicht umsetzen lassen.
Kubernetes Operatoren versus Controller
Operatoren sind benutzerdefinierte Controller, die eine Erweiterung der Kubernetes-API verwenden, um bestimmte Ziele zu erreichen. Mit anderen Worten: Kubernetes-Operatoren sind eine spezielle Unterkategorie von Controllern, die API-Erweiterungen, auch bekannt als benutzerdefinierte Ressourcen, verwenden.
Diese Definition könnte den Eindruck erwecken, dass Operatoren im Grunde dasselbe sind wie Controller. Das ist weitgehend richtig; ein Operator ist nur eine Art von Controller in Kubernetes.
Es gibt jedoch zwei wichtige Unterschiede zwischen Operatoren und anderen Controllern:
- Benutzerdefinierte Ressourcen. Während Operatoren benutzerdefinierte Ressourcen verwenden, arbeiten andere Kubernetes-Controller, ohne auf benutzerdefinierte Ressourcen oder Kubernetes-API-Erweiterungen angewiesen zu sein.
- Zweck. Die meisten Operatoren konzentrieren sich auf eine bestimmte Aufgabe; sie sind darauf ausgelegt, eine bestimmte Art von Anwendung auszuführen. Dies unterscheidet sie von anderen Controllern, die einen allgemeinen Zweck erfüllen, der nicht an eine bestimmte Domäne gebunden ist. Der Deployment-Controller verwaltet zum Beispiel alle Kubernetes Deployments, nicht nur die, die mit einer bestimmten Art von Anwendung verbunden sind.
Operator-Repositories wie OperatorHub enthalten Operatoren, die für bestimmte Anwendungen oder Plattformen zuständig sind, wie zum Beispiel die Überwachungs-Tools Prometheus und Falco, aber nicht den Status allgemeiner Kubernetes-Ressourcen. Das liegt daran, dass allgemeine Ressourcen wie Deployments und Pods von eingebauten Controllern verwaltet werden, die die systemeigenen Kontrollebenenfunktionen von Kubernetes nutzen und keine API-Erweiterungen.
Wann sollten Sie Helm-Diagramme und wann Operatoren verwenden?
Operatoren sind nicht die einzige Möglichkeit, domänenspezifische Anwendungen zu Kubernetes hinzuzufügen. Sie können auch Helm-Charts verwenden, die Anwendungen automatisch installieren.
Es gibt viele Überschneidungen zwischen Operatoren und Helm-Charts in Bezug auf ihre Aufgaben. Unter der Haube arbeiten die beiden jedoch unterschiedlich. Ein Helm-Diagramm besteht aus YAML-Code, der definiert, wie eine Anwendung ausgeführt werden soll, während ein Operator auf Kubernetes-API-Erweiterungen angewiesen ist, um seine Aufgabe zu erfüllen.
Das bedeutet, dass Operatoren in der Regel der bessere Ansatz sind, wenn Sie Kubernetes Funktionen auf niedrigerer Ebene hinzufügen müssen. Wenn Sie jedoch nur eine bestimmte Anwendung ausführen möchten, ist ein Helm-Diagramm sinnvoller.