{"id":97736,"date":"2020-10-21T14:42:17","date_gmt":"2020-10-21T12:42:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes"},"modified":"2020-10-21T14:42:17","modified_gmt":"2020-10-21T12:42:17","slug":"obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","title":{"rendered":"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/11274841ee84b0e2c3ac74c9c738faba.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/\">K9s<\/a><\/noindex> 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\u00e9es.<\/p>\n<p>Le projet est \u00e9crit en Go et existe depuis plus d'un an et demi : le premier commit a \u00e9t\u00e9 effectu\u00e9 le 1er f\u00e9vrier 2019. Au moment de la r\u00e9daction de cet article, il compte plus de 9000 \u00e9toiles sur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\">GitHub<\/a><\/noindex> et environ 80 contributeurs. Voyons ce que k9s peut faire ?<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Installation et lancement<\/h2>\n<p>\nC'est une application cliente (par rapport au cluster Kubernetes) qui est le plus simple \u00e0 lancer en tant qu'image Docker :<\/p>\n<pre><code class=\"bash\">docker run --rm -it -v $KUBECONFIG:\u2044root\u2044.kube\u2044config quay.io\u2044derailed\u2044k9s<\/code><\/pre>\n<p>\nPour certaines distributions Linux et autres OS, il existe \u00e9galement des installations pr\u00eates \u00e0 l'emploi. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s#installation\">paquets<\/a><\/noindex>Dans le cas g\u00e9n\u00e9ral pour les syst\u00e8mes Linux, vous pouvez installer le fichier binaire :<\/p>\n<pre><code class=\"bash\">sudo wget -qO- https:\/\/github.com\u2044derailed\u2044k9s\u2044releases\u2044download\u2044v0.22.0\u2044k9s_Linux_x86_64.tar.gz | tar zxvf -  -C \u2044tmp\u2044\nsudo mv \u2044tmp\u2044k9s \u2044usr\u2044local\u2044bin<\/code><\/pre>\n<p>\nIl n'y a pas d'exigences sp\u00e9cifiques pour le cluster K8s lui-m\u00eame. D'apr\u00e8s les retours, l'application fonctionne m\u00eame avec des versions anciennes de Kubernetes, telles que 1.12.<\/p>\n<p>L'application se lance en utilisant la configuration standard <code>.kube\u2044config<\/code> \u2014 similaire \u00e0 ce que fait <code>kubectl<\/code>.<\/p>\n<h2>Navigation<\/h2>\n<p>\nPar d\u00e9faut, une fen\u00eatre s'ouvre avec le namespace standard qui est sp\u00e9cifi\u00e9 pour le contexte. Cela signifie que si vous avez \u00e9crit <code>kubectl config set-context --current --namespace=test<\/code>, le namespace s'ouvrira donc <code>test<\/code>. <i>(Pour les changements de contextes\u2044namespaces, voir ci-dessous.) <\/i><\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/820fcbdd376abc95d67bf202f34c880c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPasser en mode <b>commande<\/b> se fait en appuyant sur \u00ab : \u00bb. Apr\u00e8s cela, vous pouvez g\u00e9rer le fonctionnement de k9s avec des commandes \u2014 par exemple, pour afficher la liste des StatefulSets (dans l'espace de noms actuel), vous pouvez entrer <code>:sts<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/840724fc656b22e67519c53983065862.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPour certaines autres ressources Kubernetes :<\/p>\n<ul>\n<li> <code>:ns<\/code> \u2014 Namespaces ;<\/li>\n<li> <code>:deploy<\/code> \u2014 D\u00e9ploiements ;<\/li>\n<li> <code>:ing<\/code> \u2014 Ingresses ;<\/li>\n<li> <code>:svc<\/code> \u2014 Services.<\/li>\n<\/ul>\n<p>\nPour afficher la liste compl\u00e8te des types de ressources disponibles \u00e0 la consultation, il y a une commande <code>:aliases<\/code>.<\/p>\n<p>Il est pratique de visualiser \u00e9galement la liste des commandes disponibles par les combinaisons de touches dans la fen\u00eatre actuelle : pour cela, il suffit d'appuyer sur \u00ab ? \u00bb.<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/54d329f9eeda2424f457aef6b977ae63.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK9s propose \u00e9galement un <b>mode de recherche<\/b>, pour y acc\u00e9der, il suffit de taper \u00ab \/ \u00bb. Cela permet de rechercher dans le contenu de la fen\u00eatre actuelle. Supposons que, si vous avez pr\u00e9c\u00e9demment entr\u00e9 <code>:ns<\/code>, vous avez une liste de namespaces ouverte. S'ils sont trop nombreux, pour \u00e9viter de faire d\u00e9filer longtemps vers le bas, il vous suffit dans la fen\u00eatre des namespaces d'entrer <code>\/mynamespace<\/code>.<\/p>\n<p>Pour rechercher par \u00e9tiquettes, vous pouvez s\u00e9lectionner tous les pods dans l'espace de noms souhait\u00e9, puis saisir, par exemple, <code>\/ -l app=whoami<\/code>. Nous obtiendrons une liste des pods avec cette \u00e9tiquette :<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/88b8e09a5b7819bcf49334bf351b040b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa recherche fonctionne dans tous les types de fen\u00eatres, y compris les journaux, la visualisation des manifestes YAML et <code>describe<\/code> pour les ressources - pour plus de d\u00e9tails sur ces fonctionnalit\u00e9s, voir ci-dessous.<\/p>\n<p>\u00c0 quoi ressemble g\u00e9n\u00e9ralement la s\u00e9quence d'actions pour la navigation ?<\/p>\n<p>Avec la commande <code>:ctx<\/code> vous pouvez choisir le contexte :<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a5e780a3fc98961913c966222e167d51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPour choisir un espace de noms, il y a d\u00e9j\u00e0 la commande mentionn\u00e9e <code>:ns<\/code>, puis vous pouvez utiliser la recherche pour l'espace souhait\u00e9 : <code>\/test<\/code>.<\/p>\n<p>Si vous choisissez maintenant la ressource qui nous int\u00e9resse (par exemple, le StatefulSet), les informations correspondantes appara\u00eetront : combien de pods sont en cours d'ex\u00e9cution avec des informations \u00e0 leur sujet.<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/8e0d8c41b8673b7c29f2605d3ae59503.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl peut \u00eatre int\u00e9ressant uniquement pour les pods - alors il suffit d'entrer <code>:pod<\/code>. Dans le cas des ConfigMap,<code>:cm<\/code> \u2014 pour la liste de ces ressources) vous pouvez choisir l'objet d'int\u00e9r\u00eat et appuyer sur \u00ab u \u00bb, apr\u00e8s quoi K9s vous indiquera qui utilise sp\u00e9cifiquement celui-ci (cette CM).<\/p>\n<p>Une autre fonctionnalit\u00e9 pratique pour visualiser les ressources - leur <b>\u00ab rayons X \u00bb (XRay view)<\/b>. Ce mode est activ\u00e9 par la commande <code>:xray RESOURCE<\/code> et\u2026 il est plus simple de montrer comment cela fonctionne que d'expliquer. Voici une illustration pour les StatefulSets :<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de40ebfe06ca935d2bc36323b3f16f3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(Chacune de ces ressources peut \u00eatre \u00e9dit\u00e9e, modifi\u00e9e, effectu\u00e9e <code>describe<\/code>.)<\/i><\/p>\n<p>Voici le d\u00e9ploiement avec Ingress :<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/598c1b25b787dcb1cf9660fa730d74c5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Travailler avec les ressources<\/h2>\n<p>\nPour chaque ressource, vous pouvez obtenir des informations en YAML ou son <code>describe<\/code> en appuyant sur les combinaisons de touches correspondantes (\u00ab y \u00bb et \u00ab d \u00bb respectivement). Bien s\u00fbr, il existe encore plus d'op\u00e9rations de base : leur liste et les combinaisons de touches sont toujours visibles gr\u00e2ce \u00e0 l'\u00ab en-t\u00eate \u00bb pratique dans l'interface (qui se cache avec Ctrl + e).<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/6bbe4ca07442e1e14a462586d14ef98d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLors de l'\u00e9dition de n'importe quelle ressource (\u00ab e \u00bb apr\u00e8s l'avoir s\u00e9lectionn\u00e9e), un \u00e9diteur de texte s'ouvre, d\u00e9fini dans les variables d'environnement (<code>export EDITOR=vim<\/code>).<\/p>\n<p>Voici \u00e0 quoi ressemble la description d\u00e9taill\u00e9e de la ressource (<code>describe<\/code>):<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05fdb57e3b85d1b81c9bfc6414aca117.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCette sortie (ou la sortie du manifeste YAML de la ressource visualis\u00e9e) peut \u00eatre enregistr\u00e9e \u00e0 l'aide de la combinaison de touches famili\u00e8re Ctrl + s. L'endroit o\u00f9 elle sera enregistr\u00e9e sera connu gr\u00e2ce au message de K9s :<\/p>\n<pre><code class=\"plaintext\">Log \/tmp\/k9s-screens-root\/kubernetes\/Describe-1601244920104133900.yml enregistr\u00e9 avec succ\u00e8s !<\/code><\/pre>\n<p>\n\u00c0 partir des fichiers de sauvegarde cr\u00e9\u00e9s, vous pouvez \u00e9galement restaurer des ressources, apr\u00e8s avoir retir\u00e9 les \u00e9tiquettes et annotations syst\u00e8me. Pour cela, vous devrez vous rendre dans le r\u00e9pertoire avec eux (<code>:dir \/tmp<\/code>), puis choisir le fichier souhait\u00e9 et l'appliquer <code>appliquer<\/code>.<\/p>\n<p>\u00c0 propos, vous pouvez \u00e0 tout moment revenir \u00e0 un ReplicaSet pr\u00e9c\u00e9dent si vous rencontrez des probl\u00e8mes avec le courant. Pour cela, il suffit de s\u00e9lectionner le RS souhait\u00e9 (<code>:rs<\/code> pour leur liste):<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de0ea37d970c51514559288661bdc6f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 et d'ex\u00e9cuter un rollback en utilisant Ctrl + l. Nous devrions recevoir une notification que tout s'est bien pass\u00e9 :<\/p>\n<pre><code class=\"plaintext\">k9s\/whoami-5cfbdbb469 a \u00e9t\u00e9 restaur\u00e9 avec succ\u00e8s<\/code><\/pre>\n<p>\nPour mettre \u00e0 l'\u00e9chelle les r\u00e9pliques, il suffit d'appuyer sur \u00ab s \u00bb (scale) et de choisir le nombre d\u2019instances souhait\u00e9 :<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/145093030db754c9ef85810cbba3ed5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl est possible d'acc\u00e9der \u00e0 n'importe quel conteneur via shell : pour cela, allez au pod souhait\u00e9, appuyez sur \u00ab s \u00bb (shell) et s\u00e9lectionnez le conteneur.<\/p>\n<h2>Autres possibilit\u00e9s<\/h2>\n<p>\nBien s\u00fbr, la consultation des journaux est \u00e9galement support\u00e9e (\u00ab l \u00bb pour la ressource s\u00e9lectionn\u00e9e). Et pour voir de nouveaux journaux, il n'est pas n\u00e9cessaire d'appuyer constamment sur Entr\u00e9e : il suffit de faire une marque (\u00ab m \u00bb), apr\u00e8s quoi seuls les nouveaux messages seront suivis.<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05aa9657f744b9e3d09034862e1befe7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDans cette m\u00eame fen\u00eatre, vous pouvez \u00e9galement choisir une plage temporelle pour afficher les journaux :<\/p>\n<ul>\n<li> touche \u00ab 1 \u00bb \u2014 pour 1 minute ;<\/li>\n<li> \u00ab 2 \u00bb \u2014 5 minutes ;<\/li>\n<li> \u00ab 3 \u00bb \u2014 15 minutes ;<\/li>\n<li> \u00ab 4 \u00bb \u2014 30 minutes ;<\/li>\n<li> \u00ab 5 \u00bb \u2014 1 heure ;<\/li>\n<li> \u00ab0\u00bb \u2013 pendant toute la dur\u00e9e de vie du pod.<\/li>\n<\/ul>\n<p>\nLe mode de fonctionnement sp\u00e9cial Pulse (commande <code>:pulse<\/code>) affiche des informations g\u00e9n\u00e9rales sur le cluster Kubernetes :<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/413d241ad7518f49c523fa59f51702a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVous pouvez voir le nombre de ressources et leur \u00e9tat (celles avec un \u00e9tat sont affich\u00e9es en vert <code>Running<\/code>).<\/p>\n<p>Une autre fonction int\u00e9ressante de K9s s'appelle <b>Popeye<\/b>. Elle v\u00e9rifie toutes les ressources selon certains crit\u00e8res de validit\u00e9 et g\u00e9n\u00e8re un \u00ab score \u00bb accompagn\u00e9 d'explications. Par exemple, vous pouvez voir s'il manque des probes ou des limites, ou si un conteneur peut s'ex\u00e9cuter en tant que root\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a6bc5ea45b5749fb4e1038b82374b3c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl existe un support de base pour Helm. Par exemple, vous pouvez voir les releases d\u00e9ploy\u00e9es dans le cluster :<\/p>\n<pre><code class=\"bash\">:helm all # tout\n:helm $namespace # dans un espace de noms sp\u00e9cifique\n<\/code><\/pre>\n<p><\/p>\n<h2>Benchmark<\/h2>\n<p>\nK9s int\u00e8gre m\u00eame <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rakyll\/hey\">hey<\/a><\/noindex> \u2014 c'est un g\u00e9n\u00e9rateur de charge simple pour un serveur HTTP, une alternative au plus connu ab (ApacheBench).<\/p>\n<p>Pour l'activer, vous aurez besoin d'activer le port-forward dans le pod. Pour cela, s\u00e9lectionnez le pod et appuyez sur Shift + f, acc\u00e9dez au sous-menu port-forward avec l'alias \u00ab pf \u00bb.<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/651f25269c0998c716ab9c0c4b5e0455.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApr\u00e8s avoir s\u00e9lectionn\u00e9 le port et appuy\u00e9 sur Ctrl + b, le benchmark lui-m\u00eame sera lanc\u00e9. Les r\u00e9sultats de son fonctionnement sont sauvegard\u00e9s dans <code>\/tmp<\/code> et disponibles pour une consultation ult\u00e9rieure dans K9s. <\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/57b2fe1d078e9aca1c6afccd318094da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3b2bf031e8442e47eb3482187ac5b64d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPour modifier la configuration du benchmark, vous devez cr\u00e9er un fichier <code>$HOME\/.k9s\/bench-.yml<\/code> (d\u00e9termin\u00e9 pour chaque cluster).<\/p>\n<p><i>NB : Il est important que l'extension de tous les fichiers YAML dans le r\u00e9pertoire <code>.k9s<\/code> soit bien <code>.yml<\/code> (<code>.yaml<\/code> (ne fonctionne pas correctement).<\/i><\/p>\n<p>Exemple de configuration :<\/p>\n<pre><code class=\"bash\">benchmarks:\n  defaults:\n    # Nombre de threads\n    concurrency: 2\n    # Nombre de requ\u00eates\n    requests: 1000\n  containers:\n    # Param\u00e8tres pour le conteneur de benchmark\n    # Le conteneur est d\u00e9fini comme namespace\/pod-name:container-name\n    default\/nginx:nginx:\n      concurrency: 2\n      requests: 10000\n      http:\n        path: \/\n        method: POST\n        body:\n          {\"foo\":\"bar\"}\n        header:\n          Accept:\n            - text\/html\n          Content-Type:\n            - application\/json\n services:\n    # Vous pouvez r\u00e9aliser un benchmark sur des services de type NodePort et LoadBalancer\n    # Syntaxe : namespace\/service-name\n    default\/nginx:\n      concurrency: 5\n      requests: 500\n      http:\n        method: GET\n        path: \/auth\n      auth:\n        user: flant\n        password: s3cr3tp455w0rd\n<\/code><\/pre>\n<p><\/p>\n<h2>Interface<\/h2>\n<p>\nLe format des colonnes pour les listes de ressources est modifi\u00e9 en cr\u00e9ant un fichier <code>$HOME\/.k9s\/views.yml<\/code>. Exemple de son contenu :<\/p>\n<pre><code class=\"plaintext\">k9s:\n views:\n   v1\/pods:\n     columns:\n       - AGE\n       - NAMESPACE\n       - NAME\n       - IP\n       - NODE\n       - STATUS\n       - READY\n   v1\/services:\n     columns:\n       - AGE\n       - NAMESPACE\n       - NAME\n       - TYPE\n       - CLUSTER-IP\n<\/code><\/pre>\n<p>\n<i>Cependant, il manque une colonne pour les labels, sur quoi il y a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/issues\/605\">un probl\u00e8me dans le projet<\/a><\/noindex>.<\/i><\/p>\n<p>Le tri par colonnes se fait par des combinaisons de touches :<\/p>\n<ul>\n<li> Shift + n \u2014 par nom ;<\/li>\n<li> Shift + o \u2014 par n\u0153uds ;<\/li>\n<li> Shift + i \u2014 par IP ;<\/li>\n<li> Shift + a \u2014 par dur\u00e9e de vie du conteneur ;<\/li>\n<li> Shift + t \u2014 par nombre de red\u00e9marrages ;<\/li>\n<li> Shift + r \u2014 par statut de pr\u00e9paration ;<\/li>\n<li> Shift + c \u2014 par consommation de CPU ;<\/li>\n<li> Shift + m \u2014 par consommation de m\u00e9moire.<\/li>\n<\/ul>\n<p>\nSi quelqu'un n'aime pas la mise en forme par d\u00e9faut, K9s prend m\u00eame en charge des <noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/topics\/skins\/\">th\u00e8mes<\/a><\/noindex>. Des exemples pr\u00eats (7 en tout) sont disponibles <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/skins\">ici<\/a><\/noindex>. Voici un exemple de l'un de ces th\u00e8mes <i>(in the navy)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/4a4378f2c2d36eb3985e2b71d733c444.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Plugins<\/h2>\n<p>\nEnfin, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/plugins\">plugins<\/a><\/noindex> permettent d'\u00e9tendre les fonctionnalit\u00e9s de K9s. Personnellement, j'ai utilis\u00e9 seulement l'un d'eux \u2014 <code>kubectl get all -n $namespace<\/code>.<\/p>\n<p>Cela se pr\u00e9sente comme suit. Cr\u00e9ons un fichier <code>$HOME\/.k9s\/plugin.yml<\/code> avec ce contenu :<\/p>\n<pre><code class=\"bash\">plugin:\n get-all:\n   shortCut: g    \n   confirm: false    \n   description: r\u00e9cup\u00e9rer tout\n   scopes:\n   - all\n   command: sh\n   background: false\n   args:\n   - -c\n   - \"kubectl -n $NAMESPACE get all -o wide | less\"<\/code><\/pre>\n<p>\nMaintenant, vous pouvez passer \u00e0 l'espace de noms et appuyer sur \u00ab g \u00bb pour ex\u00e9cuter la commande correspondante :<\/p>\n<p><img decoding=\"async\" alt=\"Pr\u00e9sentation de k9s \u2014 une interface terminal avanc\u00e9e pour Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c79bbf26b6c321a97cedabf22f1699b9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nParmi les plugins, il y a par exemple des int\u00e9grations avec kubectl-jq et un utilitaire pour visualiser les journaux <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wercker\/stern\">stern<\/a><\/noindex>.<\/p>\n<h2>Conclusion<\/h2>\n<p>\n\u00c0 mon avis, K9s s'est r\u00e9v\u00e9l\u00e9 tr\u00e8s pratique \u00e0 utiliser : on s'y habitue assez rapidement \u00e0 rechercher tout ce dont on a besoin sans utiliser <code>kubectl<\/code>. J'ai appr\u00e9ci\u00e9 la visualisation et la sauvegarde des journaux, l'\u00e9dition rapide des ressources, la rapidit\u00e9 globale du travail*, et le mode Popeye s'est av\u00e9r\u00e9 utile. Les possibilit\u00e9s de cr\u00e9er des plugins et d'adapter l'application \u00e0 ses besoins m\u00e9ritent \u00e9galement d'\u00eatre mentionn\u00e9es.<\/p>\n<p><i>* Bien que j'aie remarqu\u00e9 un fonctionnement lent de K9s avec un grand volume de logs. \u00c0 ces moments-l\u00e0, l'outil utilisait 2 c\u0153urs sur un Intel Xeon E312xx et pouvait m\u00eame se figer.<\/i><\/p>\n<p>Que manque-t-il actuellement ? Un retour rapide \u00e0 la version pr\u00e9c\u00e9dente (et non \u00e0 RS) sans traverser le r\u00e9pertoire. De plus, la restauration se fait uniquement pour <i>l'ensemble<\/i> des ressources : si vous avez supprim\u00e9 une annotation ou une \u00e9tiquette, il vous faudra supprimer et restaurer l'ensemble de la ressource (c'est l\u00e0 qu'il faudra traverser le r\u00e9pertoire). Un autre petit d\u00e9tail : il manque la date de ces sauvegardes.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLisez aussi dans notre blog :<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/506948\/\">Aper\u00e7u des interfaces graphiques pour Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468041\/\">Annonce de l'interface web de Kubernetes Web View (et un aper\u00e7u des autres UI web pour Kubernetes)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/426985\/\">kubebox et d'autres consoles pour Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/524196\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>K9s \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 Kubernetes. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0432 K8s, \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043c\u0438. K9s \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 Kubernetes \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Go, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u043b\u0435\u0442: \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97737,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 k9s \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-21T12:42:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-21T12:42:17+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Critique de k9s \u2014 l'interface terminal avanc\u00e9e pour Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 k9s \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f Kubernetes | ProHoster","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-21T12:42:17+00:00","article:modified_time":"2020-10-21T12:42:17+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"97736","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:14:39","updated":"2022-10-03 07:12:05","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/97736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=97736"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/97736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/97737"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=97736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=97736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=97736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}