Présentation de k9s - une interface de terminal avancée pour Kubernetes

Présentation de k9s - une interface de terminal avancée pour Kubernetes

K9s fournit une interface utilisateur de terminal pour interagir avec les clusters Kubernetes. L'objectif de ce projet Open Source est de faciliter la navigation, la surveillance et la gestion des applications dans K8s. K9s surveille en permanence les changements dans Kubernetes et propose des commandes rapides pour travailler avec les ressources surveillées.

Le projet est écrit en Go et existe depuis plus d'un an et demi : le premier commit a été fait le 1er février 2019. Au moment d'écrire ces lignes, il y a plus de 9000 étoiles sur GitHub et environ 80 contributeurs. Voyons ce que les k9 peuvent faire ?

Installation et lancement

Il s'agit d'une application cliente (par rapport au cluster Kubernetes) la plus facile à exécuter en tant qu'image Docker :

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

Pour certaines distributions Linux et d'autres systèmes d'exploitation, il existe également des logiciels prêts à installer. пакеты. En général, pour les systèmes Linux, vous pouvez installer un fichier binaire :

sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf -  -C /tmp/
sudo mv /tmp/k9s /usr/local/bin

Il n'y a pas d'exigences spécifiques pour le cluster K8s lui-même. À en juger par les critiques, l'application fonctionne également avec les anciennes versions de Kubernetes telles que 1.12.

L'application est lancée en utilisant la configuration standard .kube/config - semblable à ce qu'il fait kubectl.

Navigation

Par défaut, une fenêtre s'ouvre avec l'espace de noms par défaut spécifié pour le contexte. C'est-à-dire si vous avez écrit kubectl config set-context --current --namespace=test, l'espace de noms s'ouvrira test. (Voir ci-dessous pour modifier les contextes/espaces de noms.)

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Aller à mode de commande se fait en appuyant sur ":". Après cela, vous pouvez contrôler le fonctionnement de k9s à l'aide de commandes - par exemple, pour afficher la liste des StatefulSets (dans l'espace de noms actuel), vous pouvez entrer :sts.

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Pour d'autres ressources Kubernetes :

  • :ns — espaces de noms ;
  • :deploy — Déploiements ;
  • :ing — Entrées ;
  • :svc - Prestations de service.

Pour afficher une liste complète des types de ressources disponibles pour la visualisation, il existe une commande :aliases.

Il est également pratique de visualiser la liste des commandes disponibles par raccourcis clavier dans la fenêtre en cours : pour cela, il suffit de cliquer sur "?".

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Aussi dans k9s il y a recherche, pour aller à laquelle il suffit d'entrer "/". Avec lui, une recherche est effectuée sur le contenu de la "fenêtre" courante. Disons que si vous avez déjà saisi :ns, une liste d'espaces de noms est ouverte. S'il y en a trop, alors pour ne pas défiler longtemps, il suffit d'entrer dans la fenêtre avec les espaces de noms /mynamespace.

Pour effectuer une recherche par étiquettes, vous pouvez sélectionner tous les pods dans l'espace de noms souhaité, puis saisir, par exemple, / -l app=whoami. Nous obtiendrons une liste de pods avec cette étiquette :

Présentation de k9s - une interface de terminal avancée pour Kubernetes

La recherche fonctionne dans toutes sortes de fenêtres, y compris les journaux, l'affichage des manifestes YAML et describe pour les ressources - voir ci-dessous pour plus de détails sur ces fonctionnalités.

À quoi ressemble le flux de navigation global ?

Utilisation de la commande :ctx vous pouvez choisir un contexte :

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Pour sélectionner un espace de noms, il y a la commande déjà mentionnée :ns, puis vous pouvez utiliser la recherche de l'espace souhaité : /test.

Si nous sélectionnons maintenant la ressource qui nous intéresse (par exemple, le même StatefulSet), les informations correspondantes apparaîtront : combien de pods sont en cours d'exécution avec de brèves informations à leur sujet.

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Seuls les pods peuvent présenter un intérêt - alors il suffit d'entrer :pod. Dans le cas de ConfigMaps (:cm - pour la liste de ces ressources), vous pouvez sélectionner l'objet qui vous intéresse et cliquer sur "u", après quoi K9s vous dira qui l'utilise spécifiquement (ce CM).

Une autre fonctionnalité pratique pour visualiser les ressources est leur "x-ray" (vue radiographique). Ce mode est appelé par la commande :xray RESOURCE et ... c'est plus facile de montrer comment ça marche que de l'expliquer. Voici une illustration pour StatefulSets :

Présentation de k9s - une interface de terminal avancée pour Kubernetes
(Chacune de ces ressources peut être éditée, modifiée, modifiée describe.)

Et voici le déploiement avec Ingress :

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Travailler avec des ressources

Vous pouvez obtenir des informations sur chaque ressource dans YAML ou ses describe en appuyant sur les raccourcis clavier correspondants ("y" et "d", respectivement). Bien sûr, il y a encore plus d'opérations de base : leur liste et leurs raccourcis clavier sont toujours visibles grâce à un « en-tête » pratique dans l'interface (caché en appuyant sur Ctrl + e).

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Lors de l'édition d'une ressource ("e" après sa sélection), l'éditeur de texte défini dans les variables d'environnement est ouvert (export EDITOR=vim).

Et voici à quoi ressemble la description détaillée de la ressource (describe):

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Cette sortie (ou la sortie de l'affichage du manifeste de ressource YAML) peut être enregistrée à l'aide du raccourci clavier familier Ctrl + s. L'endroit où il sera enregistré sera connu à partir du message K9s :

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

Vous pouvez également restaurer des ressources à partir des fichiers de sauvegarde créés, après avoir supprimé les étiquettes et les annotations du système. Pour ce faire, vous devez vous rendre dans le répertoire avec eux (:dir /tmp), puis sélectionnez le fichier souhaité et appliquez apply.

D'ailleurs, à tout moment, vous pouvez revenir au ReplicaSet précédent s'il y a des problèmes avec l'actuel. Pour ce faire, sélectionnez le RS souhaité (:rs pour leur liste):

Présentation de k9s - une interface de terminal avancée pour Kubernetes

... et rollback avec Ctrl + l. Nous devrions recevoir une notification indiquant que tout s'est bien passé :

k9s/whoami-5cfbdbb469 successfully rolled back

Et pour mettre à l'échelle les répliques, il vous suffit de cliquer sur le "s" (échelle) et de sélectionner le nombre d'instances souhaité :

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Vous pouvez entrer dans n'importe quel conteneur à l'aide du shell : pour cela, rendez-vous sur le pod souhaité, cliquez sur « s » (shell) et sélectionnez le conteneur.

Autres fonctionnalités

Bien sûr, l'affichage des journaux est également pris en charge ("l" pour la ressource sélectionnée). Et pour regarder les nouveaux journaux, il n'est pas nécessaire d'appuyer constamment sur Entrée: il suffit de faire une marque («m»), puis de ne suivre que les nouveaux messages.

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Toujours dans la même fenêtre, vous pouvez sélectionner la plage horaire pour la sortie des journaux :

  • touche "1" - pendant 1 minute ;
  • "2 minutes;
  • "3 minutes;
  • "4 minutes;
  • "5" - 1 heure ;
  • "0" - pour toute la durée de vie du pod.

Mode de fonctionnement spécial Impulsion (commande :pulse) affiche des informations générales sur le cluster Kubernetes :

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Vous pouvez y voir le nombre de ressources et leur statut (le vert indique celles qui ont le statut Running).

Une autre fonctionnalité intéressante de K9s s'appelle Popeye. Il vérifie toutes les ressources pour certains critères d'exactitude et affiche la "note" résultante avec des explications. Par exemple, vous pouvez voir qu'il n'y a pas assez d'échantillons ou de limites, et certains conteneurs peuvent s'exécuter en tant que root ...

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Il existe un support de base pour Helm. Par exemple, voici comment vous pouvez voir les versions déployées dans le cluster :

:helm all # все
:helm $namespace # в конкретном пространстве имен

référence

Même intégré aux K9 est un simple générateur de charge de serveur HTTP, une alternative au plus connu ab (ApacheBench).

Pour l'activer, vous devez activer la redirection de port dans le pod. Pour cela, sélectionnez le pod et appuyez sur Shift + f, allez dans le sous-menu port-forward en utilisant l'alias "pf".

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Après avoir sélectionné le port et appuyé sur Ctrl + b, le benchmark lui-même démarrera. Les résultats de son travail sont stockés dans /tmp et sont disponibles pour une visualisation ultérieure dans K9s.

Présentation de k9s - une interface de terminal avancée pour Kubernetes
Présentation de k9s - une interface de terminal avancée pour Kubernetes

Pour changer la configuration du benchmark, vous devez créer un fichier $HOME/.k9s/bench-<my_context>.yml (déterminé pour chaque cluster).

NB : Il est important que l'extension de tous les fichiers YAML d'un répertoire .k9s c'était exactement .yml (.yaml ne fonctionne pas correctement).

Exemple de configuration:

benchmarks:
  defaults:
    # Количество потоков
    concurrency: 2
    # Количество запросов
    requests: 1000
  containers:
    # Настройки для контейнера с бенчмарком
    # Контейнер определяется как namespace/pod-name:container-name
    default/nginx:nginx:
      concurrency: 2
      requests: 10000
      http:
        path: /
        method: POST
        body:
          {"foo":"bar"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
 services:
    # Можно проводить бенчмарк на сервисах типа NodePort и LoadBalancer
    # Синтаксис: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

Interface

L'apparence des colonnes des listes de ressources est modifiée en créant un fichier $HOME/.k9s/views.yml. Un exemple de son contenu :

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

Certes, il n'y a pas assez de colonne pour les étiquettes, pour lesquelles il y a problème dans le projet.

Le tri par colonnes s'effectue par raccourcis clavier :

  • Maj + n - par nom ;
  • Maj + o - par nœuds ;
  • Maj + i - par IP ;
  • Shift + a - par la durée de vie du conteneur ;
  • Maj + t - par le nombre de redémarrages ;
  • Maj + r - par état de préparation ;
  • Shift + c - par consommation CPU ;
  • Shift + m - par consommation de mémoire.

Si quelqu'un n'aime pas le jeu de couleurs par défaut, K9s prend même en charge les peaux. Des exemples prêts à l'emploi (7 pièces) sont disponibles ici. Voici un exemple d'un de ces skins (dans la marine):

Présentation de k9s - une interface de terminal avancée pour Kubernetes

plugins

Enfin, le plug-ins vous permettent d'étendre les capacités des K9. Moi-même, je n'en ai utilisé qu'un seul dans mon travail - kubectl get all -n $namespace.

Cela ressemble à ceci. Créer un fichier $HOME/.k9s/plugin.yml avec un contenu comme celui-ci :

plugin:
 get-all:
   shortCut: g    
   confirm: false    
   description: get all
   scopes:
   - all
   command: sh
   background: false
   args:
   - -c
   - "kubectl -n $NAMESPACE get all -o wide | less"

Vous pouvez maintenant vous rendre dans l'espace de noms et appuyer sur "g" pour exécuter avec la commande correspondante :

Présentation de k9s - une interface de terminal avancée pour Kubernetes

Parmi les plugins, il y a, par exemple, des intégrations avec kubectl-jq et un utilitaire pour afficher les journaux poupe.

Conclusion

À mon goût, les K9 se sont avérés très pratiques à utiliser: vous pouvez rapidement vous habituer à chercher tout ce dont vous avez besoin sans l'utiliser. kubectl. J'ai été satisfait de la vue des journaux et de leur sauvegarde, de l'édition rapide des ressources, de la rapidité du travail en général *, le mode Popeye s'est avéré utile. Une mention spéciale est la possibilité de créer des plugins et de modifier l'application pour répondre à vos besoins.

* Bien qu'avec un grand volume de journaux, j'ai également remarqué le fonctionnement lent des K9. À de tels moments, l'utilitaire "mangeait" 2 cœurs de l'Intel Xeon E312xx et pouvait même se figer.

Que manque-t-il pour le moment ? Retour rapide à la version précédente (nous ne parlons pas de RS) sans aller dans le répertoire. De plus, la récupération ne se produit que pour seulement ressource : si vous supprimez une annotation ou un libellé, vous devrez supprimer et restaurer l'intégralité de la ressource (c'est là que vous devez vous rendre dans le répertoire). Une autre bagatelle - il n'y a pas assez de date pour de telles "sauvegardes" enregistrées.

PS

A lire aussi sur notre blog :

Source: habr.com

Ajouter un commentaire