PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

PrĂ©sentation de k9s — une interface 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 conviviale dans les applications K8s, leur observation et leur gestion. K9s surveille en permanence les changements dans Kubernetes et propose des commandes rapides pour travailler avec les ressources observées.

Le projet est écrit en Go et existe depuis plus d'un an et demi : le premier commit a été effectué le 1er février 2019. Au moment de la rédaction de cet article, il compte plus de 9000 étoiles sur GitHub et environ 80 contributeurs. Voyons ce que k9s peut faire ?

Installation et lancement

C'est une application cliente (par rapport au cluster Kubernetes) qui est le plus simple Ă  lancer en tant qu'image Docker :

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

Pour certaines distributions Linux et autres OS, il existe Ă©galement des installations prĂȘtes Ă  l'emploi. paquetsDans le cas gĂ©nĂ©ral pour les systĂšmes Linux, vous pouvez installer le 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. D'aprĂšs les retours, l'application fonctionne mĂȘme avec des versions anciennes de Kubernetes, telles que 1.12.

L'application se lance en utilisant la configuration standard .kube⁄config — similaire à ce que fait kubectl.

Navigation

Par dĂ©faut, une fenĂȘtre s'ouvre avec le namespace standard qui est spĂ©cifiĂ© pour le contexte. Cela signifie que si vous avez Ă©crit kubectl config set-context --current --namespace=test, le namespace s'ouvrira donc test. (Pour les changements de contextes⁄namespaces, voir ci-dessous.)

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Passer en mode commande se fait en appuyant sur « : ». AprĂšs cela, vous pouvez gĂ©rer le fonctionnement de k9s avec des 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 terminal avancĂ©e pour Kubernetes

Pour certaines autres ressources Kubernetes :

  • :ns — Namespaces ;
  • :deploy — DĂ©ploiements ;
  • :ing — Ingresses ;
  • :svc — Services.

Pour afficher la liste complĂšte des types de ressources disponibles Ă  la consultation, il y a une commande :aliases.

Il est pratique de visualiser Ă©galement la liste des commandes disponibles par les combinaisons de touches dans la fenĂȘtre actuelle : pour cela, il suffit d'appuyer sur « ? ».

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

K9s propose Ă©galement un mode de recherche, pour y accĂ©der, il suffit de taper « / ». Cela permet de rechercher dans le contenu de la fenĂȘtre actuelle. Supposons que, si vous avez prĂ©cĂ©demment entrĂ© :ns, vous avez une liste de namespaces ouverte. S'ils sont trop nombreux, pour Ă©viter de faire dĂ©filer longtemps vers le bas, il vous suffit dans la fenĂȘtre des namespaces d'entrer /mynamespace.

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

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

La recherche fonctionne dans tous les types de fenĂȘtres, y compris les journaux, la visualisation des manifestes YAML et describe pour les ressources - pour plus de dĂ©tails sur ces fonctionnalitĂ©s, voir ci-dessous.

À quoi ressemble gĂ©nĂ©ralement la sĂ©quence d'actions pour la navigation ?

Avec la commande :ctx vous pouvez choisir le contexte :

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

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

Si vous choisissez maintenant la ressource qui nous intéresse (par exemple, le StatefulSet), les informations correspondantes apparaßtront : combien de pods sont en cours d'exécution avec des informations à leur sujet.

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Il peut ĂȘtre intĂ©ressant uniquement pour les pods - alors il suffit d'entrer :pod. Dans le cas des ConfigMaps (:cm — pour la liste de ces ressources) vous pouvez choisir l'objet d'intĂ©rĂȘt et appuyer sur « u », aprĂšs quoi K9s vous indiquera qui utilise spĂ©cifiquement celui-ci (cette CM).

Une autre fonctionnalitĂ© pratique pour visualiser les ressources - leur « rayons X » (XRay view). Ce mode est activĂ© par la commande :xray RESOURCE et
 il est plus simple de montrer comment cela fonctionne que d'expliquer. Voici une illustration pour les StatefulSets :

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes
(Chacune de ces ressources peut ĂȘtre Ă©ditĂ©e, modifiĂ©e, effectuĂ©e describe.)

Voici le déploiement avec Ingress :

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Travailler avec les ressources

Pour chaque ressource, vous pouvez obtenir des informations en YAML ou son describe en appuyant sur les combinaisons de touches correspondantes (« y » et « d » respectivement). Bien sĂ»r, il existe encore plus d'opĂ©rations de base : leur liste et les combinaisons de touches sont toujours visibles grĂące Ă  l'« en-tĂȘte » pratique dans l'interface (qui se cache avec Ctrl + e).

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Lors de l'édition de n'importe quelle ressource (« e » aprÚs l'avoir sélectionnée), un éditeur de texte s'ouvre, défini dans les variables d'environnement (export EDITOR=vim).

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

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Cette sortie (ou la sortie du manifeste YAML de la ressource visualisĂ©e) peut ĂȘtre enregistrĂ©e Ă  l'aide de la combinaison de touches familiĂšre Ctrl + s. L'endroit oĂč elle sera enregistrĂ©e sera connu grĂące au message de K9s :

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml enregistré avec succÚs !

À partir des fichiers de sauvegarde créés, vous pouvez Ă©galement restaurer des ressources, aprĂšs avoir retirĂ© les Ă©tiquettes et annotations systĂšme. Pour cela, vous devrez vous rendre dans le rĂ©pertoire avec eux (:dir /tmp), puis choisir le fichier souhaitĂ© et l'appliquer appliquer.

À propos, vous pouvez Ă  tout moment revenir Ă  un ReplicaSet prĂ©cĂ©dent si vous rencontrez des problĂšmes avec le courant. Pour cela, il suffit de sĂ©lectionner le RS souhaitĂ© (:rs pour leur liste):

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes


 et d'exécuter un rollback en utilisant Ctrl + l. Nous devrions recevoir une notification que tout s'est bien passé :

k9s/whoami-5cfbdbb469 a été restauré avec succÚs

Pour mettre Ă  l'Ă©chelle les rĂ©pliques, il suffit d'appuyer sur « s » (scale) et de choisir le nombre d’instances souhaitĂ© :

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Il est possible d'accéder à n'importe quel conteneur via shell : pour cela, allez au pod souhaité, appuyez sur « s » (shell) et sélectionnez le conteneur.

Autres possibilités

Bien sûr, la consultation des journaux est également supportée (« l » pour la ressource sélectionnée). Et pour voir de nouveaux journaux, il n'est pas nécessaire d'appuyer constamment sur Entrée : il suffit de faire une marque (« m »), aprÚs quoi seuls les nouveaux messages seront suivis.

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Dans cette mĂȘme fenĂȘtre, vous pouvez Ă©galement choisir une plage temporelle pour afficher les journaux :

  • touche « 1 » — pour 1 minute ;
  • « 2 » — 5 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 :

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Vous pouvez voir le nombre de ressources et leur état (celles avec un état sont affichées en vert Running).

Une autre fonction intĂ©ressante de K9s s'appelle Popeye. Elle vĂ©rifie toutes les ressources selon certains critĂšres de validitĂ© et gĂ©nĂšre un « score » accompagnĂ© d'explications. Par exemple, vous pouvez voir s'il manque des probes ou des limites, ou si un conteneur peut s'exĂ©cuter en tant que root


PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

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

:helm all # tout
:helm $namespace # dans un espace de noms spécifique

Benchmark

K9s intĂšgre mĂȘme hey — c'est un gĂ©nĂ©rateur de charge simple pour un serveur HTTP, une alternative au plus connu ab (ApacheBench).

Pour l'activer, vous aurez besoin d'activer le port-forward dans le pod. Pour cela, sélectionnez le pod et appuyez sur Shift + f, accédez au sous-menu port-forward avec l'alias « pf ».

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

AprĂšs avoir sĂ©lectionnĂ© le port et appuyĂ© sur Ctrl + b, le benchmark lui-mĂȘme sera lancĂ©. Les rĂ©sultats de son fonctionnement sont sauvegardĂ©s dans /tmp et disponibles pour une consultation ultĂ©rieure dans K9s.

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes
PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

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

NB : Il est important que l'extension de tous les fichiers YAML dans le répertoire .k9s soit bien .yml (.yaml (ne fonctionne pas correctement).

Exemple de configuration :

benchmarks:
  defaults:
    # Nombre de threads
    concurrency: 2
    # Nombre de requĂȘtes
    requests: 1000
  containers:
    # ParamĂštres pour le conteneur avec le benchmark
    # Le conteneur est défini comme 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:
    # Les benchmarks peuvent ĂȘtre effectuĂ©s sur des services de type NodePort et LoadBalancer
    # Syntaxe : namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

Interface

Le format des colonnes pour les listes de ressources est modifié en créant un fichier $HOME/.k9s/views.yml. 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

Cependant, il manque une colonne pour les labels, sur quoi il y a un problĂšme dans le projet.

Le tri par colonnes se fait par des combinaisons de touches :

  • Shift + n — par nom ;
  • Shift + o — par nƓuds ;
  • Shift + i — par IP ;
  • Shift + a — par durĂ©e de vie du conteneur ;
  • Shift + t — par nombre de redĂ©marrages ;
  • Shift + r — par statut de prĂ©paration ;
  • Shift + c — par consommation de CPU ;
  • Shift + m — par consommation de mĂ©moire.

Si quelqu'un n'aime pas la mise en forme par dĂ©faut, K9s prend mĂȘme en charge des thĂšmes. Des exemples prĂȘts (7 en tout) sont disponibles ici. Voici un exemple de l'un de ces thĂšmes (in the navy):

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

Plugins

Enfin, plugins permettent d'Ă©tendre les fonctionnalitĂ©s de K9s. Personnellement, j'ai utilisĂ© seulement l'un d'eux — kubectl get all -n $namespace.

Cela se présente comme suit. Créons un fichier $HOME/.k9s/plugin.yml avec ce contenu :

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

Maintenant, vous pouvez passer à l'espace de noms et appuyer sur « g » pour exécuter la commande correspondante :

PrĂ©sentation de k9s — une interface terminal avancĂ©e pour Kubernetes

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

Conclusion

À mon avis, K9s s'est rĂ©vĂ©lĂ© trĂšs pratique Ă  utiliser : on s'y habitue assez rapidement Ă  rechercher tout ce dont on a besoin sans utiliser kubectl. J'ai apprĂ©ciĂ© la visualisation et la sauvegarde des journaux, l'Ă©dition rapide des ressources, la rapiditĂ© globale du travail*, et le mode Popeye s'est avĂ©rĂ© utile. Les possibilitĂ©s de crĂ©er des plugins et d'adapter l'application Ă  ses besoins mĂ©ritent Ă©galement d'ĂȘtre mentionnĂ©es.

* Bien que j'aie remarquĂ© un fonctionnement lent de K9s avec un grand volume de logs. À ces moments-lĂ , l'outil utilisait 2 cƓurs sur un Intel Xeon E312xx et pouvait mĂȘme se figer.

Que manque-t-il actuellement ? Un retour rapide à la version précédente (et non à RS) sans traverser le répertoire. De plus, la restauration se fait uniquement pour l'ensemble des ressources : si vous avez supprimé une annotation ou une étiquette, il vous faudra supprimer et restaurer l'ensemble de la ressource (c'est là qu'il faudra traverser le répertoire). Un autre petit détail : il manque la date de ces sauvegardes.

P.S.

Lisez aussi dans notre blog :

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster