
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: