
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 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âk9sPour certaines distributions Linux et autres OS, il existe Ă©galement des installations prĂȘtes Ă l'emploi. Dans 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âbinIl 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.)

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.
![]()
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 « ? ».

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 :
![]()
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 :

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.
![]()
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 :

(Chacune de ces ressources peut ĂȘtre Ă©ditĂ©e, modifiĂ©e, effectuĂ©e describe.)
Voici le déploiement avec Ingress :

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).

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):

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):

⊠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ĂšsPour mettre Ă l'Ă©chelle les rĂ©pliques, il suffit d'appuyer sur « s » (scale) et de choisir le nombre dâinstances souhaitĂ© :

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.

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 :

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âŠ

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 â 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 ».

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.


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 .
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 . Des exemples prĂȘts (7 en tout) sont disponibles . Voici un exemple de l'un de ces thĂšmes (in the navy):

Plugins
Enfin, 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 :

Parmi les plugins, il y a par exemple des intégrations avec kubectl-jq et un utilitaire pour visualiser les journaux .
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
