Das Henne-Ei-Problem des Cloud Controller Managers in Kubernetes
Entdecken Sie die Herausforderungen und Lösungen für das Henne-Ei-Problem des Cloud Controller Managers in Kubernetes 1.31.
Kubernetes 1.31 hat die größte Migration in der Geschichte von Kubernetes abgeschlossen und dabei den In-Tree-Cloud-Anbieter entfernt. Obwohl die Migration der Komponenten nun abgeschlossen ist, bringt dies zusätzliche Komplexität für Benutzer und Installationsprojekte wie kOps oder Cluster API mit sich. In diesem Artikel gehen wir auf die zusätzlichen Schritte und mögliche Fehlerquellen ein und geben Empfehlungen für Cluster-Besitzer. Diese Migration war komplex und erforderte die Extraktion einiger Logik aus den Kernkomponenten, was zur Bildung von vier neuen Subsystemen führte.
- Cloud Controller Manager ([KEP-2392][kep2392])
- API-Server-Netzwerkproxy ([KEP-1281][kep1281])
- Kubelet-Anmeldeinformationen-Anbieter-Plugins ([KEP-2133][kep2133])
- Speichermigration zur Nutzung von [CSI][csi] ([KEP-625][kep625])
Der [Cloud Controller Manager ist Teil des Control Plane][ccm]. Er ist eine kritische Komponente, die einige Funktionen ersetzt, die zuvor im kube-controller-manager und im kubelet existierten.
Eine der wichtigsten Funktionen des Cloud Controller Managers ist der Node Controller, der für die Initialisierung der Nodes verantwortlich ist.
Wie im folgenden Diagramm zu sehen ist, registriert der kubelet das Node-Objekt beim API-Server und versieht den Node mit einem Taint, damit er zuerst vom Cloud Controller Manager verarbeitet werden kann. Das ursprüngliche Node-Objekt fehlt jedoch spezifische Informationen des Cloud-Anbieters, wie die Node-Adressen und die Labels mit cloud-spezifischen Informationen wie Node, Region und Instanztyp.
Dieser neue Initialisierungsprozess fügt eine gewisse Verzögerung bei der Node-Bereitschaft hinzu. Zuvor konnte der kubelet den Node gleichzeitig mit seiner Erstellung initialisieren. Da die Logik nun zum Cloud Controller Manager verschoben wurde, kann dies während des Cluster-Bootstrappings zu einem [Henne-Ei-Problem][chicken-and-egg] führen, insbesondere bei Kubernetes-Architekturen, die den Controller Manager nicht zusammen mit den anderen Komponenten des Control Plane bereitstellen, häufig als statische Pods, eigenständige Binärdateien oder DaemonSets/Deployments mit Tolerierungen für die Taints und der Nutzung von hostNetwork
(mehr dazu weiter unten).
Beispiele für das Abhängigkeitsproblem
Wie oben erwähnt, kann es während des Bootstrappings vorkommen, dass der Cloud Controller Manager nicht geplant werden kann, was dazu führt, dass der Cluster nicht ordnungsgemäß initialisiert wird. Im Folgenden finden Sie einige konkrete Beispiele dafür, wie dieses Problem ausgedrückt werden kann und die zugrunde liegenden Ursachen, warum dies geschehen könnte.
Diese Beispiele setzen voraus, dass Sie Ihren Cloud Controller Manager über eine Kubernetes-Ressource (z. B. Deployment, DaemonSet oder Ähnliches) betreiben, um dessen Lebenszyklus zu steuern. Da diese Methoden darauf angewiesen sind, dass Kubernetes den Cloud Controller Manager plant, muss darauf geachtet werden, dass er ordnungsgemäß geplant wird.
Mit ayedo als Partner für Kubernetes können Sie sicherstellen, dass Ihr Cluster effizient und optimal konfiguriert ist, um solche Herausforderungen zu meistern.
Quelle: Kubernetes Blog