Einrichten eines Kubernetes Clusters mit Talos Linux auf OpenStack

Setzen Sie ein Kubernetes Cluster mit Talos Linux in der pluscloudopen auf

Überblick

In einem anderen Tutorial hatten wir exemplarisch ein Talos Linux Image importiert und in der pluscloudopen bereitgestellt. In diesem Tutorial wollen wir damit nun ein Kubernetes Cluster in der pluscloudopen aufbauen. Plusserver bietet mit der Plusserver Kubernetes Engine (PSKE) seine eigene Managed Kubernetes Lösung an. Trotzdem mag es Szenarien geben, in denen ein Kubernetes Cluster auf Basis von Talos Linux besser zu den Anforderungen passt. Die Installationsbeschreibung in der Talos Dokumentation haben wir hier auf die pluscloudopen adaptiert.

Loadbalancer

Die Controlplane eines Kubernetes Clusters (für Produktionszwecke) verteilt sich mindestens über drei Knoten (um den Ausfall eines Knotens überstehen zu können, ohne dass der Cluster seine Funktion verliert). Über diese drei Clusterknoten wird auch die Kubernetes-API zur Verfügung gestellt. Damit der Zugriff auf die Kubernetes-API ausfallsicher funktioniert, ist es sinnvoll die drei Knoten der Controlplane über einen Loadbalancer anzusprechen.

Mit dem OpenStack-Client wird ein Loadbalancer in der pluscloudopen wie folgt eingerichtet

# Das Loadbalancerobjekt mit einer public IP-Adresse anlegen
openstack loadbalancer create --name talos-control-plane --vip-network-id ext01

# Den externen Port und das gewünschte Protokoll festlegen
openstack loadbalancer listener create --name talos-control-plane-listener --protocol TCP --protocol-port 6443 talos-control-plane

# Dem Listener einen Loadbalancer Pool mit Verteilalgorithmus zuweisen 
openstack loadbalancer pool create --name talos-control-plane-pool --lb-algorithm ROUND_ROBIN --listener talos-control-plane-listener --protocol TCP

# Dem Pool einen Healthcheck zuweisen
openstack loadbalancer healthmonitor create --delay 5 --max-retries 4 --timeout 10 --type TCP talos-control-plane-pool

Anstatt jetzt schon die VMs bzw. die Pool-Member zu erzeugen, erzeugen wir nur ihre Netzwerkports. Das hat den Vorteil, dass sich ihre MAC- und IP-Adressen nicht mehr ändern - auch wenn wir die zugehörigen VMs mal neu erstellen müssen. Nicht vergessen, hier den Netzwerknamen des eigenen OpenStack-Projektes (openstack network list) zu verwenden.

openstack port create --network <projekt-netzwerk-name> talos-control-plane-1 
openstack port create --network <projekt-netzwerk-name> talos-control-plane-2 
openstack port create --network <projekt-netzwerk-name> talos-control-plane-3 

Wenn Sie - wie in diesem Beispiel - die Talos-VMs über Ihren Bastion-Host innerhalb ihres OpenStack-Projektes administrieren wollen (z. B. mit Hilfe von ssh Portforwarding), brauchen die Ports keine öffentlichen Floating-IPs zu bekommen.

Als Nächstes werden die eben erzeugten Ports dem Loadbalancer-Pool als Member hinzugefügt. Hier bitte die ID des im Projekt verwendeten Subnetzes (openstack subnet list) und die private IP-Adresse des jeweiligen Controlplane Ports (openstack port list -fvalue -c'Name' -c'Fixed IP Addresses' |grep -i talos) einsetzen:

openstack loadbalancer member create --subnet-id <projekt-subnetzwerk-id> --address <private IP-Adressse des talos-control-plane-1 port> --protocol-port 6443 talos-control-plane-pool
openstack loadbalancer member create --subnet-id <projekt-subnetzwerk-id> --address <private IP-Adressse des talos-control-plane-2 port> --protocol-port 6443 talos-control-plane-pool
openstack loadbalancer member create --subnet-id <projekt-subnetzwerk-id> --address <private IP-Adressse des talos-control-plane-3 port> --protocol-port 6443 talos-control-plane-pool

Firewallregeln

Die Talos Dokumentation gibt auch Hinweise zur “Network Connectivity”. Solange sich sowohl die Controlplane VMs als auch die Worker-VMs im selben Layer-2 Netz befinden, brauchen zwischen den Nodes keine Firewallregeln konfiguriert zu werden. Die Firewallregeln, die einem Projekt in der pluscloudopen standardmäßig zugewiesen werden, erlauben von außen nur den Zugriff per ssh (sofern die VM eine Floating-IP zugewiesen bekommt). Um jetzt auch den Zugriff auf Port 6443 (für die Kubernetes-API) und Port 50000 (für die Talos-API) zu gewähren, kann man entweder die “default” Sicherheitsgruppe erweitern oder eine eigene anlegen und diese dann den Talos-VMs zuweisen. In diesem Beispiel legen wir eine eigene Sicherheitsgruppe für Talos an:

# Sicherheitsregel erzeugen
openstack security group create talos-cluster

# Zugriff auf die Kubernetes-API von überall aus erlauben
openstack security group rule create talos-cluster --protocol TCP --dst-port 6443 --remote-ip 0.0.0.0/0

# Zugriff auf die Talos-API nur aus dem lokalen Projektnetzwerk erlauben 
openstack security group rule create talos-cluster --protocol TCP --dst-port 50000 --remote-ip 192.168.0.0/24 
openstack security group rule create talos-cluster --protocol TCP --dst-port 50001 --remote-ip 192.168.0.0/24 

Talos-Cluster konfigurieren

Um das Talos-Cluster zu müssen wir zunächst das Tool “talosctl” herunterladen :

curl -sL https://talos.dev/install | sh

Dies installiert das Go-Binary “talosctl” in /usr/local/bin.

Danach können wir auch die Konfigurationsdateien für das Talos-Cluster erzeugen:

talosctl gen config talos-k8s-openstack https://$(openstack loadbalancer show talos-control-plane -f value -c vip_address):6443

Es werden die Dateien “controlplane.yaml”, “worker.yaml” und “talosconfig” erzeugt. Die beiden yaml-Dateien benötigen wir im nächsten Schritt als user-data, wenn wir endlich die VMs für den Cluster erzeugen.

Clusterknoten erzeugen

Endlich können jetzt die drei Controlplane VMs sowie die zwei Worker VMs erzeugt werden. Nicht vergessen, den richtigen Pfad zur Datei controlplane.yaml zu verwenden. Zuerst die Control-Plane VMs:

for i in 1 2 3 ; do
  openstack server create talos-control-plane-$i --flavor SCS-2V-2-20 --nic port-id=talos-control-plane-$i --image "Talos Linux v.1.12.6 openstack" --security-group talos-cluster --user-data /where/is/my/controlplane.yaml;
done

Dann die Worker VMS. Da wir für diese vorher keine Ports erzeugt hatten, wird das automatisch erledigt. Die Worker VMs werden deshalb aber immer andere MAC- und IP-Adressen erhalten. Nicht vergessen den Netzwerknamen des eigenen OpenStack-Projektes (openstack network list) zu verwenden:

for i in 1 2 ; do
  openstack server create talos-worker-$î --flavor SCS-2V-2-20 --network <projekt-netzwerk> --image "Talos Linux v.1.12.6 openstack" --security-group talos-cluster --user-data /where/is/my/worker.yaml;
done

Cluster Bootstrap

Damit der Kubernetes Cluster gebildet werden kann, müssen sich die etcds auf den drei Controlplane VMs zu einem Cluster zusammenfinden. Um das entsprechende Kommando dafür absetzen zu können, müssen wir in der “talosconfig” den Wert für “nodes” und “endpoint” setzen. Die IP-Adressen der Controlplane Knoten kann man jetzt auch mit openstack server list --name talos ermitteln:

talosctl --talosconfig talosconfig config endpoint <IP-Adresse einer der drei Control-Plane VMs>
talosctl --talosconfig talosconfig config nodes <IP-Adresse der obigen Control-Plane VM>

Talos VM Dashboard

Schon jetzt sollte es möglich sein, sich mit

talosctl -n <node-ip> dashboard

einen Blick auf das Read-Only Dashboard der per IP-Adresse angesprochenen Talos-VM zu werfen (mit der Tastenkombination <strg>-C können Sie es wieder verlassen).

Danach sollte sich der Kubernetes Cluster bootstrappen lassen:

talosctl -n <node-ip> bootstrap

Wenn der Kubernetes Cluster sich gebildet hat, können wir auch die zugehörige kubeconfig von ihm beziehen:

talosctl --talosconfig talosconfig kubeconfig .

Damit ausgestattet können wir dann auf die Kubernetes-API Zugreifen. Dazu benötigen wir aber natürlich zunächst “kubectl”. Es gibt auch entsprechende Dokumentation:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

Mit “kubectl” und der gerade erzeugten “kubeconfig” ausgestattet können wir uns dann z. B. die Knoten und Pods in unserem Kubernetes Cluster anzeigen lassen:

kubectl get nodes -A
kubectl get pods -A

Tipp

Um Ihr neues Kubernetes Cluster enger mit OpenStack zu verzahnen, sehen Sie sich den Cloud Provider Openstack für Kubernetes an. Dieser sollte Ihnen über die Kubernetes-API Zugriff auf Loadbalancing- und Storage-Funktionen von OpenStack ermöglichen.

Zuletzt geändert 08.04.2026: talos cluster streamlining II (69c1a93)