Kubernetes mit Go erweitern

Über selbst geschriebene Controller lassen sich Kubernetes-Cluster um eigene, anwendungsspezifische Funktionen erweitern. Eine geeignete Sprache ist Go.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht
Kubernetes mit Go erweitern
Lesezeit: 13 Min.
Von
  • Frank Müller
Inhaltsverzeichnis

Einem Cluster wird in Kubernetes der gewünschte Zustand über die API mitgeteilt, im Gegensatz zu direkten Installations- und Konfigurationskommandos. Aus Benutzersicht geschieht dies mit dem Kommando kubectl und Dateien im YAML-Format. Diese beinhalten eine Beschreibung der Ressourcen wie Pods, ReplicaSets, Deployments und Services. Was der User über die API anlegt, schreibt Kubernetes in die Datenbank etcd.

Diese Änderungen werden nicht unmittelbar ausgeführt wie in einem Level-driven Command oder einem Event Model. Tools wie kube-scheduler lesen die Datenbank aus, konfigurieren Nodes für die Pods und aktualisieren die Einträge. Diese Arbeitsweise wird als Edge-driven bezeichnet und spielt durch die robuste Arbeitsweise gerade in verteilten Umgebungen ihren Vorteil aus.

Die auf diesen Nodes betriebenen Kubelets erfahren nun über die API und deren Zugriff auf die etcd, was sie zu installieren und zu konfigurieren haben. Sie stellen den gewünschten Zustand her und melden dies wieder über die API zurück. Diesen Regelkreis bezeichnet man als Controller-Pattern. Komponenten wie Node Controller, Replication Controller, Endpoints Controller oder Service Account und Token Controller enthalten das Pattern.