Getty Images/iStockphoto
Erste Schritte mit Kubernetes Cloud Controller Manager
Kubernetes Cloud Controller Manager ist ein optionales Tool zur Verwaltung von Cluster-Ressourcen. Erfahren Sie, wie es funktioniert und warum Sie es verwenden sollten.
In einigen Szenarien ist es vorteilhaft, Kubernetes auf spezialisierte Art mit bestimmten Cloud-Anbietern oder anderen Infrastrukturplattformen interagieren zu lassen. Die Verwendung der eigenen APIs eines Infrastrukturanbieters um Nodes (Knoten) zu verwalten oder Load Balancer einzurichten, kann Kubernetes beispielsweise dabei unterstützen, Cluster-Ressourcen effizienter zu verwalten.
Deshalb bietet Kubernetes den Cloud Controller Manager an. Diese optionale Funktion ermöglicht eine tiefere Integration zwischen Kubernetes und bestimmten Public- oder Private-Cloud-Plattformen, die den Controller Manager unterstützen.
Hier erfahren Sie, was der Cloud Controller Manager ist, wie er sich vom Kubernetes Controller Manager unterscheidet und wie Sie damit starten.
Was ist der Cloud Controller Manager in Kubernetes?
Mit Cloud Controller Manager verwaltet Kubernetes einige Cluster-Ressourcen mit eigenen APIs der Infrastrukturanbieter. Folgende Controller finden Sie ebenfalls in diesem Tool:
- Der Node Controller aktualisiert Node-Objekte, wenn in der Cloud-Infrastruktur neue Server erstellt werden.
- Der Route Controller konfiguriert die Kommunikationsrouten zwischen Containern auf verschiedenen Nodes in Ihrem Kubernetes-Cluster.
- Der Service Controller interagiert mit den APIs des Providers, um Load Balancer und weitere Infrastrukturkomponenten einzurichten, wenn eine Serviceressource diese benötigt.
Der Cloud Controller Manager ermöglicht den Aufbau einer nativen Schnittstelle zwischen Kubernetes und den Drittanbieter-APIs der Infrastrukturanbieter. Dazu gehören sowohl öffentliche als auch private Anbieter, die Kubernetes hosten können. Sie starten Kubernetes mit dem Cloud Controller Manager, um beispielsweise den Load Balancer eines Infrastrukturanbieters in einem Kubernetes-Cluster bereitzustellen. Oder Sie verwenden den Cloud Controller Manager, um VMs (Virtuelle Maschinen) eines Infrastrukturanbieters zu verwalten, die als Nodes innerhalb des Kubernetes-Clusters dienen. Sofern Ihre Cloud-Plattform diese Funktion im Cloud Controller Manager unterstützt, ist das möglich.
Um die Vorteile des Cloud Controller Manager nutzen zu können – die Integration von Kubernetes in eine bestimmte Infrastrukturplattform – muss die Plattform die Kubernetes-Cloud-Provider-Schnittstelle unterstützen. Alle großen Cloud-Umgebungen bieten diese Unterstützung an. Um Kompatibilität mit dem Cloud Controller Manager zu erreichen, können private Cloud-Plattformen wie OpenStack und alle anderen Infrastrukturanbieter oder Plattformen ihre eigene Cloud-Provider-Schnittstelle implementieren.
Cloud Controller Manager versus Kubernetes-Controller-Manager
Viele der jetzt über Cloud Controller Manager verfügbaren Funktionen wurden direkt im Kubernetes Controller Manager implementiert. Das ist eine der Kernkomponenten der Kubernetes Control Plane (Kontrollschicht). Um auf die Funktionen zuzugreifen, muss beim Starten von Kubernetes Controller Manager eine zu verwendende Cloud-Plattform angegeben werden.
Der für die plattformspezifischen Integrationen verantwortliche Code wurde bei diesem Ansatz jedoch in Kubernetes selbst eingebettet. Das war ineffizient, da verschiedene Infrastrukturanbieter unterschiedliche APIs und Funktionen anbieten, die mit Kubernetes verbunden werden können. Es ergab keinen Sinn, all diesen Code als Kernbestandteil von Kubernetes zu pflegen, wenn nur einige Kubernetes-Nutzer ihn benötigten. Beispielsweise sind Kubernetes-Integrationen mit AWS (Amazon Web Services) nur für Nutzer interessant, die Kubernetes-Cluster mit AWS-Infrastruktur betreiben.
Mit der Ausgliederung dieser Integrationen in den Cloud Controller Manager bieten die Kubernetes-Entwickler Nutzern die Möglichkeit, die Integrationen bei Bedarf einzusetzen, ohne dass sie standardmäßig in allen Kubernetes-Umgebungen verfügbar sein müssen.
Diese Umstellung auf den Cloud Controller Manager bedeutet, dass plattformspezifische Kubernetes-Integrationen nun außerhalb der eigenen Struktur verwaltet werden können. Denn sie beruhen auf Code, den Benutzer optional bereitstellen können, wenn sie Kubernetes ausführen.
Wer sollte den Cloud Controller Manager verwalten?
Der Cloud Controller Manager ist zwar eine optionale Kubernetes-Komponente, aber er kann die Verwaltung bestimmte Teile der Infrastruktur vereinfachen, die Ihre Kubernetes-Cluster unterstützt. Anstatt Ressourcen separat einzurichten, können Sie diese innerhalb von Kubernetes mit nativen APIs Ihres Infrastrukturanbieters verwalten.
Über einen von einem Drittanbieter verwalteten Load-Balancing-Service können Sie mit dem Cloud Controller Manager einen Load Balancer für Kubernetes erstellen. Ebenso kann der Cloud Controller Manager Netzwerkrouten zwischen Nodes erkennen, die nicht mehr verwendet werden, und diese löschen, um Infrastrukturressourcen zu sparen.
Wie startet man mit dem Cloud Controller Manager?
Stellen Sie sicher, dass Sie beim Starten von Kubernetes Controller Manager oder Kubernetes API Server nicht die Option --cloud-provider angeben, um den Cloud Controller Manager einzusetzen. Sollten Sie dies tun, verwendet Kubernetes die ältere, bauminterne Cloud-Provider-Schnittstelle, die durch den Cloud Controller Manager ersetzt wird.
Als nächstes stellen Sie die Binärdatei des Cloud Controller Manager in Ihrem Cluster bereit. Hierfür ist die gängigste Methode die Ausführung als DaemonSet auf einem Control Plane Node mit einer Konfiguration wie der folgenden:
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
k8s-app: cloud-controller-manager
name: cloud-controller-manager
namespace: kube-system
spec:
selector:
matchLabels:
k8s-app: cloud-controller-manager
template:
metadata:
labels:
k8s-app: cloud-controller-manager
spec:
serviceAccountName: cloud-controller-manager
containers:
- name: cloud-controller-manager
# Für In Tree Provider verwenden wir registry.k8s.io/cloud-controller-manager
# Für Out-of-Tree-Provider kann das durch ein beliebiges anderes Image ersetzt werden
Image: registry.k8s.io/cloud-controller-manager:v1.8.0
command:
- /usr/local/bin/cloud-controller-manager
- --cloud-provider=azure
Der Code weist Kubernetes an, einen Container auszuführen, der auf einem Image –registry.k8s.io/cloud-controller-manager:v1.8.0 – beruht, das die Cloud-Controller-Manager-Binärdatei bereitstellt. Diese Option kann man auf eine beliebige, unterstützte Schnittstelle ändern.