Annonce de l'interface Web de Kubernetes Web View (et un bref aperçu des autres interfaces Web pour Kubernetes)

Remarque perev. : L'auteur du matériel original est Henning Jacobs de Zalando. Il a créé une nouvelle interface Web pour travailler avec Kubernetes, qui se positionne comme «kubectl pour le Web». Pourquoi le nouveau projet Open Source est apparu et quels critères les solutions existantes ne remplissaient pas, lisez son article.



Dans cette publication, j'examine les différentes interfaces Web open source de Kubernetes, présente mes exigences pour une interface utilisateur universelle et explique pourquoi j'ai développé Kubernetes Web View , une interface conçue pour faciliter la prise en charge et le dépannage de plusieurs clusters à la fois.

Cas d'utilisation


Chez Zalando, nous servons un grand nombre d'utilisateurs de Kubernetes (900+) et de clusters (100+). Il existe quelques cas d'utilisation typiques où l'aide d'un outil Web spécialisé serait très utile:

  1. communication avec des collègues de soutien;
  2. réponse aux incidents et enquête sur leurs causes.

Le soutien


D'après mon expérience, la communication dans un cadre de support ressemble souvent à ceci:

- Aide, notre service XYZ n'est pas disponible!
- Que voyez-vous lorsque vous effectuez kubectl describe ingress ... ?

Ou quelque chose de similaire pour CRD:

- J'ai un problème avec le service d'identification ...
- Et qu'est kubectl describe platformcredentialsset ... ce kubectl describe platformcredentialsset ... commande kubectl describe platformcredentialsset ... ?

Une telle communication se résume généralement à introduire diverses variations de la kubectl afin de résoudre le problème. En conséquence, les deux côtés de la conversation sont obligés de basculer constamment entre le terminal et le chat Web, et ils observent une situation différente.

Par conséquent, je souhaite que l'interface Web de Kubernetes autorise les éléments suivants:

  • les utilisateurs pouvaient échanger des liens et observer la même chose;
  • Cela aiderait à éviter les erreurs humaines dans le support: par exemple, entrer le mauvais cluster sur la ligne de commande, les fautes de frappe dans les commandes CLI, etc.
  • vous permettrait de générer vos propres vues à envoyer à vos collègues, c'est-à-dire d'ajouter des colonnes d'étiquettes, d'afficher de nombreux types de ressources sur une seule page;
  • Idéalement, cet outil Web devrait vous permettre de mettre des liens profonds vers des sections spécifiques de YAML (par exemple, pointer vers un paramètre non valide qui provoque des plantages).

Réponse et analyse des incidents


La réponse aux incidents dans l'infrastructure nécessite une connaissance de la situation, la capacité d'évaluer l'impact et de rechercher des modèles dans les clusters. Quelques exemples réels:

  • le service de production critique a des problèmes et vous devez trouver toutes les ressources Kubernetes par nom dans tous les clusters pour résoudre les problèmes;
  • les nœuds commencent à tomber lors de la mise à l'échelle, et vous devez trouver tous les pods avec le statut "En attente" dans tous les clusters afin d'évaluer l'ampleur du problème;
  • les utilisateurs individuels signalent un problème avec DaemonSet déployé dans tous les clusters, et il est nécessaire de savoir si le problème est total .

Ma solution standard dans de tels cas est quelque chose comme for i in $clusters; do kubectl ...; done for i in $clusters; do kubectl ...; done for i in $clusters; do kubectl ...; done . De toute évidence, vous pouvez développer un outil qui offre des capacités similaires.

Interfaces Web Kubernetes existantes


Le monde open source des interfaces Web de Kubernetes n'est pas trop grand *, j'ai donc essayé de collecter des informations supplémentaires en utilisant Twitter :



* Mon explication du nombre limité d'interfaces Web pour Kubernetes: les services cloud et les fournisseurs de Kubernetes offrent généralement leurs propres interfaces, de sorte que le marché de la «bonne» interface utilisateur Kubernetes gratuite est relativement petit.

J'ai tweeté à propos de K8Dash , Kubernator et Octant . Examinons-les ainsi que d'autres solutions Open Source existantes, essayons de comprendre ce qu'elles sont.

K8Dash


"K8Dash est le moyen le plus simple de gérer votre cluster Kubernetes."



K8Dash a l' air bien et semble rapide, mais il présente plusieurs inconvénients pour les cas d' utilisation répertoriés ci-dessus:

  • Il ne fonctionne que dans les limites d'un cluster.
  • Le tri et le filtrage sont possibles, mais n'ont pas de permaliens.
  • Les définitions de ressources personnalisées (CRD) ne sont pas prises en charge.

Kubernator


«Kubernator est une interface utilisateur alternative pour Kubernetes. Contrairement au tableau de bord Kubernetes de haut niveau, il offre un contrôle de bas niveau et une excellente vue d'ensemble de tous les objets du cluster avec la possibilité d'en créer de nouveaux, de les modifier et de résoudre les conflits. Étant une application entièrement cliente (comme kubectl), elle ne nécessite aucun backend à l'exception du serveur API Kubernetes lui-même, et prend également en compte les règles d'accès au cluster. "



Ceci est une description assez précise de Kubernator . Hélas, il lui manque quelques fonctionnalités:

  • Ne dessert qu'un seul cluster.
  • Il n'y a pas de mode d'affichage de liste (c'est-à-dire que vous ne pouvez pas afficher tous les pods avec le statut "En attente").

Tableau de bord Kubernetes


«Kubernetes Dashboard est une interface Web universelle pour les clusters Kubernetes. Il permet aux utilisateurs de gérer et de dépanner les applications s'exécutant dans le cluster, ainsi que de gérer le cluster lui-même. »



Malheureusement, Kubernetes Dashboard n'aide pas beaucoup dans mes activités de support et de réponse aux incidents, car il:

  • Il n'y a pas de permaliens, par exemple, lorsque je filtre des ressources ou modifie l'ordre de tri;
  • il n'y a pas de moyen facile de filtrer par statut - par exemple, voir tous les pods avec le statut "En attente";
  • un seul cluster est pris en charge;
  • Les CRD ne sont pas pris en charge (cette fonction est en cours de développement);
  • pas de colonnes personnalisées (par exemple les kubectl -L ).

Vue opérationnelle de Kubernetes (kube-ops-view)


«K8s Cluster Space Observer System Panel».



La vue opérationnelle de Kubernetes a une approche complètement différente: cet outil affiche uniquement les nœuds de cluster et les pods en utilisant WebGL, sans aucun détail textuel des objets. Il est idéal pour un aperçu en ligne de l'état du cluster («les pods tombent-ils?») *, Mais pas pour les cas de support et de réponse aux incidents décrits ci-dessus.

* Remarque perev. : En ce sens, vous pouvez également être intéressé par notre plugin grafana-statusmap , que nous avons traité plus en détail dans cet article .

Rapport sur les ressources Kubernetes (kube-resource-report)


"Rassemblez des informations sur les demandes de ressources des pods et des clusters Kubernetes, comparez-les avec la consommation de ressources et générez du HTML statique."



Kubernetes Resource Report génère des rapports HTML statiques sur l'utilisation des ressources et la répartition des coûts par les équipes / applications dans les clusters. Le rapport est quelque peu utile pour prendre en charge et répondre aux incidents, car il vous permet de trouver rapidement le cluster dans lequel l'application est déployée.

Remarque perev. : En consultant les informations sur la distribution des ressources et leur coût auprès des fournisseurs de cloud, le service et l'outil Kubecost , que nous avons récemment publié, peuvent également être utiles.

Octant


«Une plate-forme de développement Web extensible conçue pour fournir une meilleure compréhension de la complexité du cluster Kubernetes.»



Octant , créé dans VMware, est un nouveau produit que j'ai découvert relativement récemment. En l'utilisant, il est pratique d'examiner le cluster sur la machine locale (il existe même des visualisations), mais il ne touche que les problèmes de support et de réponse aux incidents dans une mesure limitée. Inconvénients des octants:

  • Aucune recherche de cluster.
  • Il fonctionne uniquement sur la machine locale (non déployée sur le cluster).
  • Impossible de trier / filtrer les objets (seul le sélecteur d'étiquettes est pris en charge).
  • Vous ne pouvez pas spécifier de colonnes personnalisées.
  • Vous ne pouvez pas répertorier les objets par espace de noms.

J'ai également eu des problèmes de stabilité avec les clusters Zalando d'Octant: il s'est écrasé sur certains CRD.

Présentation de Kubernetes Web View


"Kubectl pour le web."



Après avoir analysé les options d'interface disponibles pour Kubernetes, j'ai décidé d'en créer une nouvelle: Kubernetes Web View . En effet, en fait, j'ai juste besoin de toute la puissance de kubectl sur le web, à savoir:

  • accessibilité de toutes les opérations (en lecture seule) dans lesquelles les utilisateurs préfèrent utiliser kubectl;
  • Toutes les URL doivent être permanentes et présenter la page dans sa forme originale afin que les collègues puissent les partager et les utiliser dans d'autres outils;
  • prise en charge de tous les objets Kubernetes, ce qui résoudra le problème de tout type;
  • les listes de ressources doivent être téléchargeables pour des travaux ultérieurs (dans des feuilles de calcul, des outils CLI comme grep ) et le stockage (par exemple, pour l'autopsie);
  • prise en charge de la sélection des ressources par étiquettes (similaire à kubectl get .. -l );
  • la capacité de créer des listes combinées de divers types de ressources (similaires à kubectl get all ) pour obtenir une image opérationnelle commune entre collègues (par exemple, en train de répondre à un incident);
  • la possibilité d'ajouter des liens profonds «intelligents» personnalisables à d'autres outils, tels que des tableaux de bord, des enregistreurs, des registres d'applications, etc. pour faciliter le dépannage / la réponse aux incidents;
  • le frontend doit être aussi simple que possible (HTML pur) afin d'éviter des problèmes accidentels, par exemple, du JavaScript bloqué;
  • prise en charge de plusieurs clusters pour faciliter l'interaction lors de la consultation à distance (par exemple, pour ne mémoriser qu'une seule URL);
  • si possible, l'analyse de la situation devrait être simplifiée (par exemple, avec des liens vers le téléchargement des ressources pour tous les clusters / espaces de noms);
  • des possibilités supplémentaires pour créer des liens flexibles et mettre en évidence des informations textuelles, par exemple, afin que les collègues puissent pointer vers une section spécifique de la description de la ressource (ligne dans YAML);
  • la capacité de s'adapter aux exigences d'un client particulier, par exemple, vous permettant de créer des modèles d'affichage spéciaux pour CRD, vos vues de table, de changer les styles CSS;
  • des outils pour une étude plus approfondie sur la ligne de commande (par exemple, montrant des commandes kubectl part entière prêtes à être copiées);

En dehors des non-objectifs résolus par Kubernetes Web View, il y a:

  • extraire des objets Kubernetes;
  • gestion des applications (par exemple, gestion du déploiement, graphiques Helm, etc.);
  • opérations d'écriture (doivent être effectuées via des outils CI / CD et / ou GitOps sécurisés);
  • belle interface (JavaScript, thèmes, etc.);
  • visualisations (voir kube-ops-view );
  • analyse des coûts (voir kube-resource-report ).

Comment Kubernetes Web View aide-t-il à prendre en charge et à répondre aux incidents?

Le soutien


  • Tous les liens sont permanents , ce qui facilite l'échange d'informations avec des collègues.
  • Vous pouvez créer vos propres vues , par exemple, afficher tous les déploiements et pods avec une étiquette spécifique dans deux clusters spécifiques (plusieurs noms de cluster et types de ressources peuvent être spécifiés dans le lien, séparés par des virgules).
  • Vous pouvez référencer des lignes spécifiques dans le fichier YAML de l' objet, indiquant des problèmes potentiels dans la spécification de l'objet.



Recherche de cluster dans Kubernetes Web View

Réponse aux incidents


  • La recherche globale vous permet de rechercher des objets dans tous les clusters.
  • Les vues de liste peuvent afficher tous les objets avec un certain état / colonne dans tous les clusters (par exemple, nous devons trouver tous les pods avec le statut "En attente").
  • Les listes d'objets peuvent être téléchargées au format TSV (Tab Delimited Format) pour une analyse ultérieure.
  • Des liens externes personnalisables vous permettent de basculer vers les tableaux de bord correspondants et d'autres outils.



Kubernetes Web View: une liste de modules avec le statut En attente dans tous les clusters

Si vous voulez essayer Kubernetes Web View, je vous recommande de vous familiariser avec la documentation ou de regarder la version de démonstration en direct .

Bien sûr, l'interface aurait pu être meilleure, mais pour l'instant Kubernetes Web View est un outil pour les "utilisateurs avancés" qui n'hésitent pas à manipuler manuellement les chemins URL si nécessaire. Si vous avez des commentaires / ajouts / souhaits, contactez- moi sur Twitter !

Cet article est un bref compte rendu des prémisses qui ont conduit à la création de Kubernetes Web View. D'autres suivront! ( Note trad .: Ils devraient être attendus sur le blog de l' auteur .)

PS du traducteur


Lisez aussi dans notre blog:

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


All Articles