Un aperçu 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 K8. 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, existe depuis plus d'un an et demi: le premier commit a été effectué 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 client (par rapport au cluster Kubernetes) et il est plus facile d'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 autres systèmes d'exploitation, il existe également des packages prêts à être installés . 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 K8 lui-même. Sur la base des critiques, l'application fonctionne avec les anciennes versions de Kubernetes telles que la 1.12.



L'application est lancée en utilisant la configuration standard .kube/config- de la même manière qu'elle le fait kubectl.



La navigation



Par défaut, une fenêtre s'ouvre avec l'espace de noms standard spécifié pour le contexte. Autrement dit, si vous vous êtes inscrit kubectl config set-context --current --namespace=test, l'espace de noms s'ouvrira test. (Voir ci-dessous à propos de la modification des contextes / espaces de noms.) Vous pouvez







passer en mode commande en appuyant sur ":". Vous pouvez ensuite contrôler le fonctionnement de k9s avec les commandes - par exemple, vous pouvez taper pour afficher une liste de StatefulSets (dans l'espace de noms actuel) :sts.







Pour certaines autres ressources Kubernetes:



  • :ns - Espaces de noms;
  • :deploy - Déploiements;
  • :ing - Ingresses;
  • :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 courante: il suffit de cliquer sur "?"







Aussi dans k9s il y a un mode de recherche , pour basculer vers lequel il suffit d'entrer "/". Il est utilisé pour rechercher le contenu de la "fenêtre" courante. Disons que si vous avez déjà entré :ns, vous avez une liste d'espaces de noms ouverts. S'il y en a trop, pour ne pas faire défiler longtemps vers le bas, il suffit de rentrer dans la fenêtre avec les espaces de noms /mynamespace.



Pour rechercher des libellés, vous pouvez choisir tous les pod'y dans le bon espace de noms, puis saisir, par exemple / -l app=whoami. Nous obtiendrons une liste de pods avec cette étiquette:







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



Quelle est la séquence de navigation globale?



Avec la commande :ctx, vous pouvez sélectionner Contexte:







Pour sélectionner namespace'a ont déjà mentionné l'équipe :ns, et vous pouvez rechercher l'espace désiré: /test.



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







Seuls les pods peuvent être intéressants - alors entrez simplement :pod. Dans le cas de ConfigMaps (:cm- pour une liste de ces ressources), vous pouvez sélectionner l'objet qui vous intéresse et cliquer sur "u", après quoi les K9 vous diront exactement qui l'utilise (ce CM).



Une autre fonctionnalité pratique pour visualiser les ressources est leur vue XRay . Un tel mode est invoqué par une commande :xray RESOURCEet ... il est plus facile de montrer comment il fonctionne que d'expliquer. Voici une illustration pour StatefulSets:





(Chacune de ces ressources peut être éditée, modifiée, effectuée describe.)



Et voici un déploiement avec Ingress:







Travailler avec des ressources



Des informations sur chaque ressource peuvent être obtenues dans YAML ou describeen appuyant sur les raccourcis clavier correspondants ("y" et "d", respectivement). Il existe, bien sûr, des opérations encore plus basiques: leur liste et leurs raccourcis clavier sont toujours visibles grâce à l '"en-tête" pratique de l'interface (masqué en appuyant sur Ctrl + e).







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



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







Une telle sortie (ou la sortie de l'affichage du manifeste YAML d'une ressource) peut être enregistrée en utilisant le raccourci clavier habituel Ctrl + s. L'endroit où il sera enregistré sera connu à partir du message du K9:



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


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



En passant, vous pouvez à tout moment revenir au ReplicaSet précédent en cas de problème avec le ReplicaSet actuel. Pour ce faire, sélectionnez le RS requis ( :rspour leur liste):







... et revenir en arrière 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 suffit de cliquer sur "s" (échelle) et de sélectionner le nombre d'instances requis:







Vous pouvez saisir n'importe lequel des conteneurs à l'aide du shell: pour cela, allez dans le pod souhaité, cliquez sur "s" (shell) et sélectionnez le conteneur ...



Autres possibilités



Bien entendu, la visualisation des journaux est également prise 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 marquer ("m"), puis de suivre uniquement les nouveaux messages.







Toujours dans la même fenêtre, vous pouvez sélectionner la période d'affichage des journaux:



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


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







vous pouvez voir le nombre de ressources et leur état (celles qui ont un statut sont affichées en vert Running).



Une autre fonctionnalité intéressante des K9 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 de sondes ou de limites, et certains conteneurs peuvent s'exécuter en tant que root ...







Il existe un support de base de 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 hey a été intégré dans K9 - c'est un simple générateur de charge de serveur HTTP, une alternative au plus célèbre ab (ApacheBench).



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







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









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



NB: Il est important que l'extension de tous les fichiers YAML dans le répertoire soit .k9sexactement .yml( .yamlne 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



La vue en colonnes des listes de ressources est modifiée par la création d'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 manque une colonne pour les étiquettes, pour laquelle il y a un problème dans le projet .



Le tri par colonnes est effectué par des raccourcis clavier:



  • Shift + n - par nom;
  • Shift + o - par nœuds;
  • Shift + i - par IP;
  • Shift + a - par la durée de vie du conteneur;
  • Shift + t - par le nombre de redémarrages;
  • Shift + 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 skins . Des exemples prêts (7 pièces) sont disponibles ici . Voici un exemple de l'un de ces skins (dans la marine) :







Plugins



Enfin, les plugins vous permettent d'étendre les capacités des K9. J'ai moi-même utilisé un seul d'entre eux dans mon travail - kubectl get all -n $namespace.



Ça ressemble à ça. Créez un fichier $HOME/.k9s/plugin.ymlavec le contenu suivant:



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 aller dans l'espace de noms et appuyer sur "g" pour exécuter avec la commande correspondante:







Parmi les plugins, il y a, par exemple, des intégrations avec kubectl-jq et un utilitaire pour visualiser les logs stern .



Conclusion



À mon goût, le K9 s'est avéré très pratique à utiliser: avec lui, il est assez rapide de s'habituer à chercher tout ce dont vous avez besoin sans l'utiliser kubectl. J'ai été satisfait de la visualisation des logs et de leur sauvegarde, de l'édition rapide des ressources, de la rapidité de travail en général *, le mode Popeye s'est avéré utile. Une mention distincte est la possibilité de créer des plugins et de modifier l'application en fonction de vos besoins.



* Bien qu'avec un grand volume de logs, j'ai également remarqué la lenteur du travail des K9. À de tels moments, l'utilitaire «mangeait» 2 cœurs d'Intel Xeon E312xx et pouvait même se figer.



Que manque-t-il en ce moment? Retour rapide à la version précédente (il ne s'agit pas de RS) sans aller dans le répertoire. De plus, la récupération ne se produit que pour tout.ressource: si vous avez supprimé l'annotation ou l'étiquette, vous devrez supprimer et restaurer l'intégralité de la ressource (ici, vous devrez aller dans le répertoire). Une autre bagatelle est qu'il n'y a pas assez de date pour de telles "sauvegardes" enregistrées.



PS



Lisez aussi sur notre blog:






All Articles