Talos - "Eine moderne Linux-Distribution für Kubernetes" eingeführt



Neulich präsentierte der amerikanische Ingenieur Andrew Rynhard ein interessantes Projekt: eine kompakte Linux-Distribution, die speziell für die Ausführung von Kubernetes-Clustern entwickelt wurde. Es erhielt den Namen aus der antiken griechischen Mythologie - Talos .

Das Projekt schien von Kelsey Hightowers Tweet aus dem Jahr 2015 inspiriert zu sein, in dem er sagte, wir müssten nur auf das Erscheinen des bedingten KubeOS warten (danach wird das Leben in bewölkten Umgebungen endlich wunderbar sein):



Übrigens, mit dem Aufkommen von Talos wurde diese Geschichte fortgesetzt : Jemand antwortete auf einen historischen Tweet, dass ein solches System bereits aufgetaucht sei, und der Autor von Talos sagte, dass er sich freuen würde, wenn Kelsey sich das Projekt ansehen würde. Die Reaktion des letzteren wurde jedoch (noch) nicht verfolgt.

Anscheinend entwickelte eine Person Talos (der sich als Teil eines ganzen Unternehmens darstellt - Autonomy ) - es dauerte mehr als ein Jahr. Und jetzt, wenn der Status der Mindestverfügbarkeit erreicht ist, erwartet der Autor, dass andere Vertreter der Kubernetes / Cloud-Community hinzukommen werden. Was ist das Wesentliche des Projekts?

Prinzipien und Merkmale von Talos


Talos ist eine moderne Linux-Distribution, die speziell (und exklusiv!) Für Kubernetes entwickelt wurde. Um das Ziel bei der Umsetzung zu erreichen, halten Sie sich an folgende Ansätze:

Minimalismus


Der allgegenwärtige Minimalismus ist einer der Eckpfeiler der Talos-Architektur. Eines der eindrucksvollen Beispiele ist der verwendete Initialisierungsdienst , der (im Gegensatz zu modernen Trends in diesem Bereich) der UNIX-Philosophie folgt, dass „jedes Programm eine Sache tut, aber gut“:

Wir wollten init auf eine einzige Aufgabe konzentrieren - Kubernetes starten. Es gibt einfach keine Mechanismen für andere Aktionen.

Die Entwickler gingen noch weiter und beraubten ihr Betriebssystem des Benutzerzugriffs auf den Host, der den Systemadministratoren vertraut ist: Talos verfügt weder über Befehlsshells noch über einen SSH-Daemon oder sogar über die Möglichkeit, eigene Prozesse auf dem Host zu starten . Und wirklich: Warum das alles, wenn Sie Kubernetes und mehr ausführen müssen? Fast alle Prozesse in Talos laufen in Containern ab.

Da die Welt jedoch nicht so perfekt ist (damit das Betriebssystem "von selbst" vollständig funktioniert), gibt es immer noch Tools zum Bedienen des Betriebssystems:

  • osd- Daemon, implementiert nach dem Prinzip, die minimal erforderlichen Berechtigungen bereitzustellen (Prinzip der geringsten Berechtigungen) und eine API (basierend auf gRPC) zum Verwalten von Knoten anzubieten;
  • Mit dem Dienstprogramm osctl CLI können Sie mit dem osd-Dienst kommunizieren, der auf jedem Knoten ausgeführt wird.

Daher wurde eine Reihe grundlegender Betriebsfunktionen implementiert: Neustarten von Diensten und Clusterknoten, Empfangen von Kernelprotokollen (dmesg) und von Containern, Einfügen von Daten in Knotenkonfigurationsdateien usw.

Alle diese Komponenten (init, osd, osctl ...) sowie einige andere im Distributionskit sind in Go geschrieben . Der gesamte Quellcode wird übrigens unter den Bedingungen der Open Source-Lizenz Mozilla Public License 2.0 verteilt.

Sicherheit


Der oben beschriebene minimalistische Ansatz (alles, was nur zum Ausführen von Kubernetes erforderlich ist) + das Prinzip, nur minimale Berechtigungen selbst zu erteilen, reduzieren die potenzielle Angriffsfläche. Auch in Talos:

  • Der enthaltene Kernel wird gemäß den Empfehlungen des Kernel Self Protection Project ( KSSP ) konfiguriert , das sich auf die Fähigkeit des Kernels konzentriert, unabhängig vor potenziellen Fehlern und Schwachstellen zu schützen (anstatt Userspace-Dienstprogramme für dieselben Zwecke zu verwenden).
  • Das Root-Dateisystem ist schreibgeschützt gemountet, was - zusammen mit dem Fehlen von Shells / SSH - das System unveränderlich macht.
  • verwendet bidirektionales TLS (mTLS) zur Interaktion mit der API;
  • Die Einstellungen und Konfigurationen von Kubernetes werden gemäß den CIS-Richtlinien (Center for Internet Security) angewendet.

Ein zusätzlicher Vorteil, der sich aus dem Minimalismus und der Konzentration auf Unveränderlichkeit ergibt, ist die Vorhersagbarkeit des Verhaltens des Systems (da die Anzahl der Faktoren, die die Umwelt beeinflussen, abnimmt).

Relevanz


Die Autoren versprechen, Talos auf die vorletzte Upstream-Version von Kubernetes (K8s 1.13.3 wird derzeit unterstützt ) und die neueste verfügbare LTS Linux-Kernel-Version (jetzt unter Verwendung von 4.19.10) zu stützen.

Systemkomponenten


Die Hauptkomponenten der Distribution (zusätzlich zu den Kernel- und "proprietären" Dienstprogrammen) sind:

  • musl-libc - als Standard-C-Bibliothek;
  • Golang - für init und seine anderen Werkzeuge;
  • gRPC - für die API;
  • enthaltend - um Systemdienste in Containern zu starten (wird mit dem CRI- Plugin für Kubernetes verwendet);
  • kubeadm - zum Bereitstellen von Clustern.

Arbeite mit Talos


Talos-Bereitstellungsbeispiele für AWS-, KVM- und Xen-Bereitstellungen finden Sie in der Projektdokumentation . Um schnell zu veranschaulichen, wie dies aussieht, finden Sie hier den Installationsalgorithmus für virtuelle Linux KVM-Maschinen:

1. Installieren des Masterknotens auf dem Host:

 docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdb -f -p bare-metal \ -u http://${IP}:8080/master.yaml 

2. Erstellen einer VM:

 virt-install -n master --description "Kubernetes master node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdb \ --network bridge=br0,model=e1000,mac=52:54:00:A8:4C:E1 \ --graphics none --boot hd --rng /dev/random 

3. Ähnliche Aktionen zum Erstellen eines Arbeitsknotens:

 docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdc -f -p bare-metal \ -u http://${IP}:8080/worker.yaml virt-install -n master --description "Kubernetes worker node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdc \ --network bridge=br0,model=e1000,mac=52:54:00:B9:5D:F2 \ --graphics none --boot hd --rng /dev/random 

Das Konfigurieren der Interaktion zwischen osd und osctl besteht im Wesentlichen darin, Schlüssel für ihre Authentifizierung zu generieren (bereits erwähnte mTLS) und wird hier beschrieben.

Weitere Arbeit mit ihnen osctl reboot auf Befehle wie osctl reboot , osctl stats und osctl logs . Demonstration der Ausgabe von Containern im k8s.io Namespace:

 $ osctl ps -k NAMESPACE ID IMAGE PID STATUS k8s.io 0ca1… sha256:da86… 2341 RUNNING k8s.io 356f… sha256:da86… 2342 RUNNING … k8s.io e42e… sha256:4ff8… 2508 RUNNING k8s.io kubelet k8s.gcr.io/… 2068 RUNNING 

Der Prozess zum Konfigurieren eines Kubernetes-Clusters mit Talos ist hier (Mater-Knoten) und hier (Worker) verfügbar.

Status und Perspektiven


Das Projekt befindet sich in der Alpha-Version (die neueste Version ist v0.1.0-alpha.18 ) und in dieser Phase sieht es natürlich eher nach einem interessanten Experiment aus als nach etwas, das der Produktion wirklich nahe kommt.

Der Anstieg des Interesses an Talos nach seiner kürzlichen Ankündigung (bereits über 600 Sterne auf GitHub) und der Ruf des einzigen Autors nach gemeinsamer Kreativität können jedoch als hervorragender Anreiz für seine Entwicklung dienen.


Talos Projektaktivität in den letzten Tagen

Zumindest enthält die Distribution die für die Welt relevanten Cloud-nativen Ideen, deren Qualitätsimplementierung eine Frage der Zeit ist.

PS


Lesen Sie auch in unserem Blog:

Source: https://habr.com/ru/post/de440810/


All Articles