Talos - Présentation d'une «distribution Linux moderne pour Kubernetes»



L'autre jour, un ingénieur américain Andrew Rynhard a présenté un projet intéressant: une distribution Linux compacte conçue spécifiquement pour exécuter des clusters Kubernetes. Il a reçu le nom de la mythologie grecque antique - Talos .

Le projet est apparu inspiré par le tweet de Kelsey Hightower en 2015, dans lequel il a déclaré que nous devions simplement attendre que le KubeOS conditionnel apparaisse (après quoi la vie des environnements nuageux sera enfin merveilleuse):



À propos, avec l'avènement de Talos, cette histoire s'est poursuivie : quelqu'un a répondu à un tweet historique qu'un tel système était déjà apparu, et l'auteur de Talos a dit qu'il serait heureux si Kelsey examinait le projet. La réaction de ce dernier n'a cependant pas (encore) été suivie.

Apparemment, une personne développait Talos (se représentant dans le cadre d'une entreprise entière - Autonomie ) - cela lui a pris plus d'un an. Et maintenant, lorsque le statut de disponibilité minimale est atteint, l'auteur s'attend à ce que d'autres représentants de la communauté native Kubernetes / cloud le rejoignent. Quelle est donc l'essence du projet?

Principes et caractéristiques de Talos


Talos se positionne comme une distribution Linux moderne créée spécifiquement (et exclusivement!) Pour Kubernetes. Pour atteindre l'objectif dans sa mise en œuvre, respectez les approches suivantes:

Minimalisme


Le minimalisme omniprésent est l'une des pierres angulaires de l'architecture Talos. Un des exemples frappants ici est le service d'initialisation utilisé qui, contrairement aux tendances modernes dans ce domaine, suit la philosophie UNIX selon laquelle «chaque programme fait une chose, mais c'est bien»:

Nous voulions faire en sorte que init se concentre sur une seule tâche: lancer Kubernetes. Il n'a tout simplement pas de mécanismes pour d'autres actions.

Les développeurs sont allés plus loin et ont privé leur système d'exploitation d'accès utilisateur à l'hôte familier aux administrateurs système: Talos n'a ni shells de commande, ni démon SSH, ni même la possibilité de démarrer ses propres processus sur l'hôte. Et vraiment: pourquoi tout cela si vous avez besoin d'exécuter Kubernetes et plus encore? Presque tous les processus de Talos fonctionnent dans des conteneurs.

Cependant, comme le monde n'est pas si parfait (pour que l'OS fonctionne pleinement "par lui-même"), il existe encore des outils pour faire fonctionner l'OS:

  • démon osd , implémenté sur le principe de fournir les privilèges minimum nécessaires (Principe du moindre privilège) et offrant une API (basée sur gRPC) pour gérer les nœuds;
  • L'utilitaire osctl CLI vous permet de communiquer avec le service osd, qui s'exécute sur chaque nœud.

Ainsi, un ensemble de capacités de fonctionnement de base a été implémenté: redémarrage des services et des nœuds de cluster, réception des journaux du noyau (dmesg) et des conteneurs, insertion de données dans les fichiers de configuration des nœuds, etc.

Tous ces composants (init, osd, osctl ...), ainsi que certains autres dans le kit de distribution, sont écrits en Go . Soit dit en passant, tout le code source est distribué selon les termes de la licence open source Mozilla Public License 2.0.

La sécurité


L'approche minimaliste décrite ci-dessus (tout ce qui est nécessaire uniquement pour lancer Kubernetes) + le principe de n'émettre que des privilèges minimaux réduisent à eux seuls la surface d'attaque potentielle. Également à Talos:

  • le noyau inclus est configuré conformément aux recommandations du projet KSSP (Kernel Self Protection Project), qui se concentre sur la capacité du noyau à se protéger indépendamment contre les bogues et les vulnérabilités potentiels (au lieu d'utiliser les utilitaires de l'espace utilisateur aux mêmes fins);
  • le système de fichiers racine est monté en lecture seule, ce qui, combiné à l'absence de shell / SSH, rend le système immuable;
  • utilise TLS bidirectionnel (mTLS) pour interagir avec l'API;
  • Les paramètres et configurations de Kubernetes sont appliqués conformément aux directives CIS (Center for Internet Security).

Un avantage supplémentaire résultant du minimalisme et de la concentration sur l'immuable est la prévisibilité du système dans le comportement (car le nombre de facteurs affectant l'environnement diminue).

Pertinence


Les auteurs promettent de baser Talos sur l'avant-dernière version amont de Kubernetes (cependant, K8s 1.13.3 est actuellement pris en charge ) et la dernière version disponible du noyau LTS Linux (utilisant désormais 4.19.10).

Composants système


Les principaux composants de la distribution (en plus du noyau et des utilitaires "propriétaires") sont:

  • musl-libc - en tant que bibliothèque C standard;
  • golang - pour init et ses autres outils;
  • gRPC - pour l'API;
  • containerd - pour démarrer les services système dans des conteneurs (utilisés avec le plugin CRI pour Kubernetes);
  • kubeadm - pour déployer des clusters.

Travailler avec Talos


Des exemples de déploiement Talos pour les déploiements AWS, KVM et Xen sont fournis dans la documentation du projet . Pour illustrer rapidement à quoi cela ressemble, voici l'algorithme d'installation pour les machines virtuelles KVM Linux:

1. Installation du nœud maître sur l'hôte:

 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. Création d'une 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. Actions similaires pour créer un nœud de travail:

 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 

La configuration de l'interaction entre osd et osctl revient essentiellement à générer des clés pour leur authentification (déjà mentionné mTLS) et est décrite ici .

Le travail ultérieur avec eux se résume à des commandes comme le osctl reboot osctl stats osctl logs et les osctl logs . Démonstration de la sortie des conteneurs dans l'espace de noms k8s.io :

 $ 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 

Le processus de configuration d'un cluster Kubernetes avec Talos est disponible ici (nœuds mater) et ici (travailleurs).

Statut et perspectives


Le projet est au stade de la version alpha (la dernière version est v0.1.0-alpha.18 ) et, bien sûr, à ce stade, il ressemble plus à une expérience intéressante qu'à quelque chose de vraiment proche de la production.

Cependant, la montée de l'intérêt pour Talos après sa récente annonce (déjà plus de 600 étoiles sur GitHub) et l'appel du seul auteur à la créativité conjointe peuvent constituer une excellente incitation à son développement.


Activité du projet Talos ces derniers jours

À tout le moins, la distribution contient les idées natives du cloud pertinentes pour le monde, dont la mise en œuvre de qualité est une question de temps.

PS


Lisez aussi dans notre blog:

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


All Articles