
Fille sur un scooter. Illustration , logo Nomad de
Kubernetes est un gorille de 300 kilos pour l'orchestration des conteneurs. Il fonctionne dans certains des plus grands systÚmes de conteneurs au monde, mais cela coûte cher.
Surtout cher pour les petites équipes, qui devront passer beaucoup de temps à le maintenir et à faire face à une lourde courbe d'apprentissage. Pour notre équipe de quatre personnes, c'est trop de frais généraux. Nous avons donc commencé à rechercher des alternatives et sommes tombés amoureux de .
Ce dont nous avons besoin
Notre équipe prend en charge divers services typiques pour la surveillance et l'analyse des performances : points de terminaison API pour les métriques écrites en Go, exportation Prometheus, parseurs de journaux comme Logstash et , ainsi que des bases de données comme InfluxDB ou Elasticsearch. Chacune de ces services fonctionne dans son propre conteneur. Nous avons besoin d'un systÚme simple pour maintenir tout cela opérationnel.
Nous avons commencé par une liste de critÚres pour l'orchestration des conteneurs :
- Lancement d'un ensemble de services sur plusieurs machines.
- Vue d'ensemble des services en cours d'exécution.
- Liens entre les services.
- Redémarrage automatique en cas de panne de service.
- Maintenance de l'infrastructure par une petite équipe.
De plus, les éléments suivants seraient agréables, mais non obligatoires :
- Ătiquetage des machines par leurs capacitĂ©s (par exemple, Ă©tiquetage des machines avec des disques rapides pour les services lourds en E/S).
- Capacité à lancer des services indépendamment de l'orchestrateur (par exemple, lors du développement).
- Endroit commun pour partager des configurations et des secrets.
- Point de terminaison pour les métriques et les journaux.
Pourquoi Kubernetes ne nous convient pas
Lors de la création d'un prototype avec Kubernetes, nous avons remarqué que nous commencions à ajouter des couches de logique de plus en plus complexes, sur lesquelles nous comptions irrévocablement.
Par exemple, Kubernetes prend en charge des configurations de services intĂ©grĂ©es Ă travers . Vous pouvez rapidement vous perdre, en particulier lors de la fusion de plusieurs fichiers de configuration ou de l'ajout de services supplĂ©mentaires dans un pod. Kubernetes (ou Dans ce cas, cela permet d'intĂ©grer dynamiquement des configurations externes pour sĂ©parer les intĂ©rĂȘts. Cependant, cela crĂ©e un lien rigide et cachĂ© entre votre projet et Kubernetes. Cela dit, Helm et ConfigMaps sont des options supplĂ©mentaires, donc vous n'ĂȘtes pas obligĂ© de les utiliser. Vous pouvez simplement copier la configuration dans l'image Docker. NĂ©anmoins, il est tentant de suivre cette voie et de crĂ©er des abstractions inutiles, ce dont vous pourriez regretter par la suite.
De plus, l'Ă©cosystĂšme Kubernetes Ă©volue rapidement. Il faut beaucoup de temps et d'Ă©nergie pour se tenir au courant des meilleures pratiques et des outils les plus rĂ©cents. Kubectl, minikube, kubeadm, helm, tiller, kops, oc - la liste continue et continue. Au dĂ©but, tous ces outils ne sont pas nĂ©cessaires, mais vous ne savez pas ce dont vous aurez besoin, donc il faut ĂȘtre au courant de tout. Cela rend la courbe d'apprentissage assez raide.
Quand utiliser Kubernetes
Dans notre entreprise, beaucoup utilisent Kubernetes et en sont tout à fait satisfaits. Ces instances sont gérées par Google ou Amazon, qui ont les ressources nécessaires pour les soutenir.
Kubernetes est livré avec , qui rendent l'orchestration à grande échelle des conteneurs plus gérable :
- Gestion détaillée .
- ajoutent de la logique au cluster. Ce sont simplement des programmes qui communiquent avec l'API Kubernetes.
- ! Kubernetes peut faire évoluer des services à la demande, en utilisant des métriques de service et sans avoir besoin d'intervention manuelle.
La question est de savoir si vous avez vraiment besoin de toutes ces fonctionnalités. Vous ne pouvez pas simplement compter sur les abstractions ; .
Notre équipe fournit la plupart des services à distance (en raison d'un lien étroit avec l'infrastructure sous-jacente), donc nous ne voulions pas mettre en place notre propre cluster Kubernetes. Nous voulions simplement fournir des services.
Piles non incluses
Nomad est 20 % d'orchestration, qui fournit 80 % du nécessaire. Tout ce qu'il fait, c'est gérer les déploiements. Nomad s'occupe des déploiements, redémarre les conteneurs en cas de problÚmes... et c'est tout.
Le sens de Nomad réside dans ce qu'il fait : pas de gestion détaillée des permissions ou minimumde politiques réseau avancées , c'est intentionnel. Ces composants sont fournis par des tiers ou ne sont pas fournis du tout.
Je pense que Nomad a trouvĂ© le compromis parfait entre simplicitĂ© d'utilisation et utilitĂ©. Il est idĂ©al pour de petits services indĂ©pendants. Si vous avez besoin de plus de contrĂŽle, vous devrez les gĂ©rer vous-mĂȘme ou adopter une autre approche. Nomad est tout simplement un orchestrateur.
Ce qui est le meilleur dans Nomad, c'est sa facilité remplacer. La dépendance à un fournisseur est pratiquement inexistante, car ses fonctionnalités s'intÚgrent facilement dans tout autre systÚme de gestion des services. Il fonctionne simplement comme un binaire ordinaire sur chaque machine du cluster, c'est tout !
L'écosystÚme de Nomad est constitué de composants faiblement couplés
La vĂ©ritable force de Nomad rĂ©side dans son Ă©cosystĂšme. Il s'intĂšgre trĂšs bien avec d'autres produits â totalement optionnels â tels que (stockage clĂ©-valeur) ou (gestion des secrets). Dans le fichier Nomad, il y a des sections pour extraire des donnĂ©es de ces services :
template {
data = <<EOH
LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}"
API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.value}}{{end}}"
EOH
destination = "secrets/file.env"
env = true
} Ici, nous lisons la clé service/geo-api/log-verbosity de Consul et, pendant l'exécution, nous la présentons comme une variable d'environnement LOG_LEVEL. Nous présentons également la clé secret/geo-api-key de Vault comme API_KEY. Simple, mais puissant !
GrĂące Ă sa simplicitĂ©, Nomad peut facilement ĂȘtre Ă©tendu avec d'autres services via l'API. Par exemple, des balises sont supportĂ©es pour les tĂąches. Nous Ă©tiquetons tous les services avec des mĂ©triques avec la balise trv-metrics. Ainsi, Prometheus peut facilement trouver ces services via Consul et vĂ©rifier pĂ©riodiquement le point de terminaison /metrics pour de nouvelles donnĂ©es. Il en va de mĂȘme, par exemple, pour les journaux, en utilisant .
Il y a de nombreux autres exemples d'extensibilité :
- Lancer une tùche Jenkins à l'aide d'un hook, et Consul surveille le redéploiement de la tùche Nomad lors de changements de configuration du service.
- Ceph ajoute à Nomad un systÚme de fichiers distribué.
- pour la répartition de charge.
Tout cela permet sans lien particulier avec un fournisseur.
Avertissement honnĂȘte
Aucun systĂšme n'est parfait. Je ne recommande pas d'implĂ©menter immĂ©diatement les fonctionnalitĂ©s les plus rĂ©centes en production. Bien sĂ»r, il existe des bogues et des fonctionnalitĂ©s manquantes, mais il en va de mĂȘme pour Kubernetes.
ComparĂ© Ă Kubernetes, la communautĂ© de Nomad n'est pas aussi grande. Kubernetes a dĂ©jĂ prĂšs de 75 000 commits et 2000 contributeurs, tandis que Nomad en a environ 14 000 et 300. Il sera difficile pour Nomad de suivre le rythme de Kubernetes, mais peut-ĂȘtre que cela n'est pas nĂ©cessaire ! C'est un systĂšme plus spĂ©cialisĂ©, et une communautĂ© plus petite signifie aussi que votre pull request sera probablement remarquĂ©e et acceptĂ©e plus rapidement qu'avec Kubernetes.
Résumé
Conclusion : n'utilisez pas Kubernetes simplement parce que tout le monde le fait. Ăvaluez soigneusement vos besoins et vĂ©rifiez quel outil est le plus avantageux.
Si vous prĂ©voyez de dĂ©ployer un grand nombre de services homogĂšnes sur une infrastructure Ă grande Ă©chelle, Kubernetes est une bonne option. Gardez simplement Ă l'esprit la complexitĂ© supplĂ©mentaire et les coĂ»ts d'exploitation. Certains frais peuvent ĂȘtre Ă©vitĂ©s en utilisant un environnement Kubernetes gĂ©rĂ©, comme ou .
Si vous cherchez simplement un orchestrateur fiable, facile Ă maintenir et Ă©volutif, pourquoi ne pas essayer Nomad ? Vous pourriez ĂȘtre surpris de l'ampleur de ce que cela peut vous apporter.
Si l'on compare Kubernetes Ă une voiture, Nomad serait un scooter. Parfois, vous avez besoin de l'un, et parfois de l'autre. Les deux ont leur raison d'ĂȘtre.
Source : habr.com
