Eine einfache Möglichkeit, Talos Linux auf jedem Rechner und bei jedem Anbieter zu installieren – Linux.com

Eine einfache Möglichkeit, Talos Linux auf jedem Rechner und bei jedem Anbieter zu installieren – Linux.com

Eine einfache Möglichkeit, Talos Linux auf jedem Rechner und bei jedem Anbieter zu installieren – Linux.com

Talos Linux ist ein spezialisiertes Betriebssystem, das für die Ausführung von Kubernetes entwickelt wurde. In erster Linie übernimmt es das vollständige Lebenszyklusmanagement für Kubernetes-Komponenten der Control-Plane. Auf der anderen Seite konzentriert sich Talos Linux auf die Sicherheit und minimiert die Möglichkeiten des Benutzers, das System zu beeinflussen. Ein besonderes Merkmal dieses Betriebssystems ist das fast vollständige Fehlen von ausführbaren Dateien, einschließlich des Fehlens einer Shell und der Unmöglichkeit, sich über SSH anzumelden. Die gesamte Konfiguration von Talos Linux erfolgt über eine Kubernetes-ähnliche API.

Talos Linux wird als eine Reihe von vorgefertigten Images für verschiedene Umgebungen bereitgestellt.

Die Standard-Installationsmethode geht davon aus, dass Sie ein vorbereitetes Image für Ihren spezifischen Cloud-Anbieter oder Hypervisor nehmen und daraus eine virtuelle Maschine erstellen. Sie können auch die Bare-Metal-Route wählen und das Talos-Linux-Image mit ISO- oder PXE-Methoden laden.

Leider funktioniert dies nicht, wenn Sie mit Anbietern zu tun haben, die einen vorkonfigurierten Server oder eine virtuelle Maschine anbieten, ohne dass Sie ein benutzerdefiniertes Image hochladen oder sogar ein ISO für die Installation über KVM verwenden können. In diesem Fall sind Ihre Möglichkeiten auf die Distributionen beschränkt, die der Cloud-Anbieter zur Verfügung stellt.

Während des Talos-Linux-Installationsprozesses müssen in der Regel zwei Fragen beantwortet werden: (1) Wie wird das Talos-Linux-Image geladen und gebootet, und (2) wie wird die machine-config (die Hauptkonfigurationsdatei für Talos Linux) vorbereitet und auf dieses gebootete Image angewendet. Lassen Sie uns über jeden dieser Schritte sprechen.

Booten in Talos Linux

Eine der universellsten Methoden ist die Verwendung eines Linux-Kernel-Mechanismus namens kexec.

kexec ist sowohl ein Dienstprogramm als auch ein Systemaufruf mit demselben Namen. Es erlaubt Ihnen, einen neuen Kernel vom bestehenden System zu booten, ohne einen physischen Neustart des Rechners durchzuführen. Das bedeutet, dass Sie das erforderliche vmlinuz und initramfs für Talos Linux herunterladen können und dann die benötigte Kernel-Befehlszeile angeben und sofort auf das neue System umschalten können. Es ist so, als ob der Kernel beim Start durch den Standard-Bootloader geladen würde, nur dass in diesem Fall Ihr bestehendes Linux-Betriebssystem als Bootloader fungiert.

Im Grunde genommen benötigen Sie nur eine beliebige Linux-Distribution. Es kann ein physischer Server sein, der im Rettungsmodus läuft, oder sogar eine virtuelle Maschine mit einem vorinstallierten Betriebssystem. Schauen wir uns einen Fall an, bei dem Ubuntu verwendet wird, aber es kann buchstäblich jede andere Linux-Distribution sein.

Melden Sie sich über SSH an und installieren Sie das Paket kexec-tools, das das Dienstprogramm kexec enthält, das Sie später benötigen werden:

apt install kexec-tools -y

Als nächstes müssen Sie das Talos-Linux herunterladen, d.h. den Kernel und initramfs. Sie können aus dem offiziellen Repository heruntergeladen werden:

wget -O /tmp/vmlinuz https://github.com/siderolabs/talos/releases/latest/download/vmlinuz-amd64
wget -O /tmp/initramfs.xz https://github.com/siderolabs/talos/releases/latest/download/initramfs-amd64.xz

Wenn Sie keinen virtuellen, sondern einen physischen Server haben, müssen Sie Ihr eigenes Image mit der gesamten erforderlichen Firmware erstellen, indem Sie Talos-Fabrik Dienst. Alternativ können Sie die vorgefertigten Images aus dem Cozystack-Projekt verwenden (eine Lösung zum Aufbau von Clouds, die wir bei Ænix entwickelt und in die CNCF Sandbox übertragen haben) – diese Images enthalten bereits alle erforderlichen Module und Firmware:

wget -O /tmp/vmlinuz https://github.com/cozystack/cozystack/releases/latest/download/kernel-amd64
wget -O /tmp/initramfs.xz https://github.com/cozystack/cozystack/releases/latest/download/initramfs-metal-amd64.xz

Nun benötigen Sie die Netzwerkinformationen, die beim Booten an Talos Linux übergeben werden. Im Folgenden finden Sie ein kleines Skript, das alles Notwendige zusammenstellt und Umgebungsvariablen setzt:

IP=$(ip -o -4 route get 8.8.8.8 | awk -F"src " '{sub(" .*", "", $2); print $2}')
GATEWAY=$(ip -o -4 route get 8.8.8.8 | awk -F"via " '{sub(" .*", "", $2); print $2}')
ETH=$(ip -o -4 route get 8.8.8.8 | awk -F"dev " '{sub(" .*", "", $2); print $2}')
CIDR=$(ip -o -4 addr show "$ETH" | awk -F"inet $IP/" '{sub(" .*", "", $2); print $2; exit}')
NETMASK=$(echo "$CIDR" | awk '{p=$1;for(i=1;i<=4;i++){if(p>=8){o=255;p-=8}else{o=256-2^(8-p);p=0}printf(i<4?o".":o"n")}}')
DEV=$(udevadm info -q property "/sys/class/net/$ETH" | awk -F= '$1~/ID_NET_NAME_ONBOARD/{print $2; exit} $1~/ID_NET_NAME_PATH/{v=$2} END{if(v) print v}')

Sie können diese Parameter über die cmdline des Kernels übergeben. Verwenden Sie den Parameter ip=, um das Netzwerk mit dem IP-Konfiguration auf Kernel-Ebene Mechanismus für diese. Mit dieser Methode kann der Kernel beim Booten automatisch Schnittstellen einrichten und IP-Adressen zuweisen, basierend auf Informationen, die über die Kernel-Cmdline übergeben werden. Es handelt sich um eine eingebaute Kernel-Funktion, die durch die Option CONFIG_IP_PNP aktiviert wird. In Talos Linux ist diese Funktion standardmäßig aktiviert. Alles, was Sie tun müssen, ist, eine richtig formatierte Netzwerkeinstellung in der cmdline des Kernels anzugeben.

Setzen Sie die Variable CMDLINE mit der Option ip, die die aktuellen Systemeinstellungen enthält, und geben Sie sie aus:

CMDLINE="init_on_alloc=1 slab_nomerge pti=on console=tty0 console=ttyS0 printk.devkmsg=on talos.platform=metal ip=${IP}::${GATEWAY}:${NETMASK}::${DEV}:::::"
echo $CMDLINE

Die Ausgabe sollte in etwa so aussehen:

init_on_alloc=1 slab_nomerge pti=on console=tty0 console=ttyS0 printk.devkmsg=on talos.platform=metal ip=10.0.0.131::10.0.0.1:255.255.255.0::eno2np0:::::

Überprüfen Sie, ob alles korrekt aussieht, und laden Sie dann unseren neuen Kernel:

kexec -l /tmp/vmlinuz --initrd=/tmp/initramfs.xz --command-line="$CMDLINE"
kexec -e

Der erste Befehl lädt den Talos-Kernel in den Arbeitsspeicher, der zweite Befehl stellt das aktuelle System auf diesen neuen Kernel um.

Als Ergebnis erhalten Sie eine laufende Instanz von Talos Linux mit konfiguriertem Netzwerk. Wenn der Server neu gestartet wird, kehrt das System in seinen ursprünglichen Zustand zurück (indem das Betriebssystem von der Festplatte geladen wird, z. B. Ubuntu).

Anwenden der machine-config und Installieren von Talos Linux auf Festplatte

Um Talos Linux dauerhaft auf der Festplatte zu installieren und das aktuelle Betriebssystem zu ersetzen, müssen Sie eine machine-config anwenden, die die zu installierende Festplatte angibt. Um den Rechner zu konfigurieren, können Sie entweder das offizielle talosctl Dienstprogramm oder das Talm, ein Dienstprogramm, das vom Cozystack-Projekt gepflegt wird (Talm funktioniert auch mit vanilla Talos Linux).

Betrachten wir zunächst die Konfiguration mit talosctl. Bevor Sie die Konfiguration anwenden, vergewissern Sie sich, dass sie Netzwerkeinstellungen für Ihren Knoten enthält; andernfalls wird der Knoten nach dem Neustart keine Netzwerkkonfiguration vornehmen. Während der Installation wird der Bootloader auf die Festplatte geschrieben und enthält nicht die Option ip für die automatische Kernel-Konfiguration.

Hier ist ein Beispiel für einen Konfigurationspatch, der die notwendigen Werte enthält:

# node1.yaml
machine:
install:
disk: /dev/sda
network:
hostname: node1
nameservers:
- 1.1.1.1
- 8.8.8.8
interfaces:
- interface: eno2np0
addresses:
- 10.0.0.131/24
routes:
- network: 0.0.0.0/0
gateway: 10.0.0.1

Sie können damit eine vollständige Maschinenkonfiguration erstellen:

talosctl gen secrets
talosctl gen config --with-secrets=secrets.yaml --config-patch-control-plane=@node1.yaml

Überprüfen Sie die resultierende Konfiguration und wenden Sie sie auf den Knoten an:

talosctl apply -f controlplane.yaml -e 10.0.0.131 -n 10.0.0.131 -i

Sobald Sie controlplane.yaml anwenden, installiert der Knoten Talos auf der Festplatte /dev/sda und überschreibt dabei das vorhandene Betriebssystem, bevor er neu startet.

Jetzt müssen Sie nur noch den Befehl bootstrap ausführen, um den etcd-Cluster zu initialisieren:

talosctl --talosconfig=talosconfig bootstrap -e 10.0.0.131 -n 10.0.0.131

Sie können den Status des Knotens jederzeit über das Dashboard commnad einsehen:

talosctl --talosconfig=talosconfig dashboard -e 10.0.0.131 -n 10.0.0.131

Sobald alle Dienste den Status Ready erreicht haben, rufen Sie die kubeconfig ab und können Ihr neu installiertes Kubernetes nutzen:

talosctl --talosconfig=talosconfig kubeconfig kubeconfig
export KUBECONFIG=${PWD}/kubeconfig

Talm für die Konfigurationsverwaltung verwenden

Wenn Sie viele Konfigurationen haben, brauchen Sie eine bequeme Möglichkeit, sie zu verwalten. Dies ist besonders nützlich bei Bare-Metal-Knoten, bei denen jeder Knoten unterschiedliche Festplatten, Schnittstellen und spezifische Netzwerkeinstellungen haben kann. Infolgedessen müssen Sie möglicherweise einen Patch für jeden Knoten vorhalten.

Um dieses Problem zu lösen, haben wir Folgendes entwickelt Talm — ein Konfigurationsmanager für Talos Linux, der ähnlich wie Helm funktioniert.

Das Konzept ist einfach: Sie haben eine gemeinsame Konfigurationsvorlage mit Nachschlagefunktionen, und wenn Sie eine Konfiguration für einen bestimmten Knoten erstellen, fragt Talm dynamisch die Talos-API ab und ersetzt die Werte in der endgültigen Konfiguration.

Talm enthält fast alle Funktionen von talosctl und fügt noch ein paar Extras hinzu. Es kann Konfigurationen aus Helm-ähnlichen Vorlagen generieren und sich die Knoten- und Endpunktparameter für jeden Knoten in der resultierenden Datei merken, so dass Sie diese Parameter nicht jedes Mal angeben müssen, wenn Sie mit einem Knoten arbeiten.

Ich zeige Ihnen, wie Sie die gleichen Schritte durchführen, um Talos Linux mit Talm zu installieren:

Initialisieren Sie zunächst eine Konfiguration für einen neuen Cluster:

mkdir talos
cd talos
talm init

Passen Sie die Werte für Ihren Cluster in values.yaml an:

endpoint: "https://10.0.0.131:6443"
podSubnets:
- 10.244.0.0/16
serviceSubnets:
- 10.96.0.0/16
advertisedSubnets:
- 10.0.0.0/24

Erzeugen Sie eine Konfiguration für Ihren Knoten:

talm template -t templates/controlplane.yaml -e 10.0.0.131 -n 10.0.0.131 > nodes/node1.yaml

Die resultierende Ausgabe sieht ungefähr so aus:

# talm: nodes=["10.0.0.131"], endpoints=["10.0.0.131"], templates=["templates/controlplane.yaml"]
# THIS FILE IS AUTOGENERATED. PREFER TEMPLATE EDITS OVER MANUAL ONES.
machine:
type: controlplane
kubelet:
nodeIP:
validSubnets:
- 10.0.0.0/24
network:
hostname: node1
# -- Discovered interfaces:
# eno2np0:
# hardwareAddr:a0:36:bc:cb:eb:98
# busPath: 0000:05:00.0
# driver: igc
# vendor: Intel Corporation
# product: Ethernet Controller I225-LM)
interfaces:
- interface: eno2np0
addresses:
- 10.0.0.131/24
routes:
- network: 0.0.0.0/0
gateway: 10.0.0.1
nameservers:
- 1.1.1.1
- 8.8.8.8
install:
# -- Discovered disks:
# /dev/sda:
# model: SAMSUNG MZQL21T9HCJR-00A07
# serial: S64GNG0X444695
# wwid: eui.36344730584446950025384700000001
# size: 1.9 TB
disk: /dev/sda
cluster:
controlPlane:
endpoint: https://10.0.0.131:6443
clusterName: talos
network:
serviceSubnets:
- 10.96.0.0/16
etcd:
advertisedSubnets:
- 10.0.0.0/24

Nun müssen Sie es nur noch auf Ihren Knoten anwenden:

talm apply -f nodes/node1.yaml -i

Talm erkennt automatisch die Knotenadresse und den Endpunkt aus der “modeline” (ein bedingter Kommentar am Anfang der Datei) und wendet die Konfiguration an.

Sie können auch andere Befehle auf dieselbe Weise ausführen, ohne die Knotenadresse und die Endpunktoptionen anzugeben. Hier sind ein paar Beispiele:

Anzeigen des Knotenstatus mit dem integrierten Dashboard-Befehl:

talm dashboard -f nodes/node1.yaml

Bootstrap etcd-Cluster auf Knoten1:

talm bootstrap -f nodes/node1.yaml

Speichern Sie die kubeconfig in Ihrem aktuellen Verzeichnis:

talm kubeconfig kubeconfig -f nodes/node1.yaml

Im Gegensatz zum offiziellen Dienstprogramm talosctl enthalten die generierten Konfigurationen keine Geheimnisse, so dass sie ohne zusätzliche Verschlüsselung in git gespeichert werden können. Die Geheimnisse werden im Stammverzeichnis Ihres Projekts und nur in diesen Dateien gespeichert: secrets.yaml, talosconfig und kubeconfig.

Zusammenfassung

Das ist unser komplettes Schema für die Installation von Talos Linux in nahezu jeder Situation. Hier’s eine kurze Zusammenfassung:

  1. Verwenden Sie kexec, um Talos Linux auf jedem bestehenden System zu starten.
  2. Stellen Sie sicher, dass der neue Kernel die korrekten Netzwerkeinstellungen hat, indem Sie diese vom aktuellen System abfragen und über den Parameter ip in der cmdline übergeben. So können Sie sich über die API mit dem neu gebooteten System verbinden.
  3. Wenn der Kernel über kexec gebootet wird, läuft Talos Linux vollständig im RAM. Um Talos auf der Festplatte zu installieren, wenden Sie Ihre Konfiguration entweder mit talosctl oder Talm an.
  4. Wenn Sie die Konfiguration anwenden, vergessen Sie nicht, die Netzwerkeinstellungen für Ihren Knoten anzugeben, da die Bootloader-Konfiguration auf der Festplatte diese nicht automatisch enthält.
  5. Viel Spaß mit Ihrem neu installierten und voll funktionsfähigen Talos Linux.

Zusätzliche Materialien:

Share the Post:

Related Posts