{"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\/it\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","title":{"rendered":"Panoramica di k9s \u2014 un'interfaccia terminale avanzata per Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per 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> fornisce un'interfaccia terminale per interagire con i cluster Kubernetes. L'obiettivo di questo progetto Open Source \u00e8 facilitare la navigazione agevole delle applicazioni in K8s, il monitoraggio e la gestione. K9s osserva costantemente i cambiamenti in Kubernetes e offre comandi rapidi per lavorare con le risorse monitorate.<\/p>\n<p>Il progetto \u00e8 scritto in Go ed esiste da oltre un anno e mezzo: il primo commit \u00e8 stato effettuato il 1 febbraio 2019. Alla data di scrittura dell'articolo, conta pi\u00f9 di 9000 stelle su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\">GitHub<\/a><\/noindex> e circa 80 collaboratori. Vediamo cosa pu\u00f2 fare k9s?<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Installazione e avvio<\/h2>\n<p>\n\u00c8 un'applicazione client (rispetto al cluster Kubernetes) che \u00e8 pi\u00f9 semplice avviare come immagine Docker:<\/p>\n<pre><code class=\"bash\">docker run --rm -it -v $KUBECONFIG:\/root\/.kube\/config quay.io\/derailed\/k9s<\/code><\/pre>\n<p>\nPer alcuni distributori Linux e altri sistemi operativi ci sono anche pacchetti pronti per l'installazione <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s#installation\">. In generale, per i sistemi Linux \u00e8 possibile installare il file binario:<\/a><\/noindex>sudo wget -qO- https:\/\/github.com\/derailed\/k9s\/releases\/download\/v0.22.0\/k9s_Linux_x86_64.tar.gz | tar zxvf - -C \/tmp\/\nsudo mv \/tmp\/k9s \/usr\/local\/bin<\/p>\n<pre><code class=\"bash\">Non ci sono requisiti specifici per il cluster K8s stesso. A quanto si dice, l'applicazione funziona anche con versioni pi\u00f9 vecchie di Kubernetes, come la 1.12.<\/code><\/pre>\n<p>\nNon ci sono requisiti specifici per il cluster K8s. Dai feedback, l'applicazione funziona anche con versioni di Kubernetes cos\u00ec vecchie come la 1.12.<\/p>\n<p>L'applicazione si avvia utilizzando la configurazione standard <code>.kube\/config<\/code> \u2014 in modo simile a come fa <code>kubectl<\/code>.<\/p>\n<h2>Navigazione<\/h2>\n<p>\nPer impostazione predefinita, si apre una finestra con il namespace standard specificato per il contesto. Cio\u00e8, se hai scritto <code>kubectl config set-context --current --namespace=test<\/code>, si aprir\u00e0 il namespace <code>test<\/code>. <i>(Per il cambiamento di contesti\/spazi dei nomi, vedi sotto.) <\/i><\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/820fcbdd376abc95d67bf202f34c880c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPassare a <b>modalit\u00e0 comando<\/b> si realizza premendo \u00ab:\u00bb. Dopo di che, puoi gestire il funzionamento di k9s usando comandi \u2014 ad esempio, per visualizzare l'elenco degli StatefulSet (nel namespace corrente) puoi digitare <code>:sts<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/840724fc656b22e67519c53983065862.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer alcune altre risorse Kubernetes:<\/p>\n<ul>\n<li> <code>:ns<\/code> \u2014 Namespaces;<\/li>\n<li> <code>:deploy<\/code> \u2014 Deployments;<\/li>\n<li> <code>:ing<\/code> \u2014 Ingress;<\/li>\n<li> <code>:svc<\/code> \u2014 Servizi.<\/li>\n<\/ul>\n<p>\nPer visualizzare l'elenco completo dei tipi di risorse disponibili per la visualizzazione, usa il comando <code>:aliases<\/code>.<\/p>\n<p>\u00c8 utile visualizzare anche l'elenco dei comandi disponibili tramite le combinazioni di tasti nel contesto della finestra corrente: per farlo, basta premere \u00ab?\u00bb.<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/54d329f9eeda2424f457aef6b977ae63.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInoltre, in k9s c'\u00e8 <b>una modalit\u00e0 di ricerca<\/b>, per accedervi \u00e8 sufficiente digitare \u00ab\/\u00bb. Con questa modalit\u00e0 puoi cercare nel contenuto della finestra attuale. Ad esempio, se hai precedentemente digitato <code>:ns<\/code>, hai aperto un elenco di spazi dei nomi. Se ce ne sono troppi, per non dover scorrere a lungo verso il basso, basta inserire nella finestra degli spazi dei nomi <code>\/mynamespace<\/code>.<\/p>\n<p>Per cercare le etichette, puoi selezionare tutti i pod nello spazio dei nomi desiderato, dopo di che puoi inserire, ad esempio, <code>\/ -l app=whoami<\/code>. Otterremo un elenco di pod con quell'etichetta:<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/88b8e09a5b7819bcf49334bf351b040b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa ricerca funziona in tutti i tipi di finestre, comprese le registrazioni, la visualizzazione dei manifest YAML e <code>describe<\/code> per le risorse \u2014 per maggiori dettagli su queste funzionalit\u00e0, vedere di seguito.<\/p>\n<p>Come appare in generale la sequenza di azioni per la navigazione?<\/p>\n<p>Utilizzando il comando <code>:ctx<\/code> puoi selezionare il contesto:<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a5e780a3fc98961913c966222e167d51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer scegliere il namespace, c'\u00e8 il comando gi\u00e0 menzionato <code>:ns<\/code>, e poi puoi utilizzare la ricerca per lo spazio desiderato: <code>\/test<\/code>.<\/p>\n<p>Se ora selezioni la risorsa di nostro interesse (ad esempio, lo stesso StatefulSet), appariranno le informazioni corrispondenti: quanti pod sono in esecuzione con brevi dettagli su di essi.<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/8e0d8c41b8673b7c29f2605d3ae59503.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPotrebbero interessare solo i pod \u2014 in questo caso, basta inserire <code>:pod<\/code>. Nel caso dei ConfigMap (<code>:cm<\/code> \u2014 per l'elenco di queste risorse) puoi scegliere l'oggetto di interesse e premere \u00abu\u00bb, dopo di che K9s ti dir\u00e0 chi lo utilizza specificamente (questo CM).<\/p>\n<p>Un'altra comoda funzionalit\u00e0 per visualizzare le risorse \u00e8 il loro <b>\u00abraggio X\u00bb (XRay view)<\/b>. Questo stato \u00e8 attivato dal comando <code>:xray RESOURCE<\/code> e\u2026 \u00e8 pi\u00f9 facile mostrare come funziona piuttosto che spiegarlo. Ecco un'illustrazione per gli StatefulSets:<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de40ebfe06ca935d2bc36323b3f16f3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(Ognuno di questi risorse pu\u00f2 essere modificato, cambiato, fatto <code>describe<\/code>.)<\/i><\/p>\n<p>Ecco un Deployment con Ingress:<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/598c1b25b787dcb1cf9660fa730d74c5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Gestione delle risorse<\/h2>\n<p>\nDi ogni risorsa si pu\u00f2 ottenere informazioni in YAML o nella sua <code>describe<\/code> premendo le relative combinazioni di tasti (\u00aby\u00bb e \u00abd\u00bb rispettivamente). Ci sono sicuramente pi\u00f9 operazioni di base: la loro lista e le combinazioni di tasti sono sempre visibili grazie all'utile \u00abheader\u00bb nell'interfaccia (si nasconde premendo Ctrl + e).<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/6bbe4ca07442e1e14a462586d14ef98d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuando si modifica qualsiasi risorsa (\u00abe\u00bb dopo la sua selezione) si apre un editor di testo, definito nelle variabili d'ambiente (<code>export EDITOR=vim<\/code>).<\/p>\n<p>Ecco come appare una descrizione dettagliata della risorsa (<code>describe<\/code>):<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05fdb57e3b85d1b81c9bfc6414aca117.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto output (o l'output del progetto YAML della risorsa) pu\u00f2 essere salvato con la consueta combinazione di tasti Ctrl + s. Dove verr\u00e0 salvato, sar\u00e0 noto dal messaggio di K9s:<\/p>\n<pre><code class=\"plaintext\">Log \/tmp\/k9s-screens-root\/kubernetes\/Describe-1601244920104133900.yml salvato con successo!<\/code><\/pre>\n<p>\nDai file di backup creati \u00e8 possibile anche ripristinare le risorse, eliminando preventivamente le etichette e le annotazioni di sistema. Per fare ci\u00f2 \u00e8 necessario andare nella directory con loro (<code>:dir \/tmp<\/code>), dopo di che selezionare il file desiderato e applicarlo <code>applica<\/code>.<\/p>\n<p>A proposito, \u00e8 possibile tornare a un ReplicaSet precedente in qualsiasi momento, se ci sono problemi con quello attuale. Per farlo, \u00e8 necessario selezionare il RS desiderato (<code>:rs<\/code> per la loro lista):<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de0ea37d970c51514559288661bdc6f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 ed eseguire il rollback utilizzando Ctrl + l. Dobbiamo ricevere una notifica che tutto \u00e8 andato a buon fine:<\/p>\n<pre><code class=\"plaintext\">k9s\/whoami-5cfbdbb469 \u00e8 stato ripristinato con successo<\/code><\/pre>\n<p>\nE per scalare le repliche, basta premere \u00abs\u00bb (scale) e scegliere il numero di istanze desiderato:<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/145093030db754c9ef85810cbba3ed5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 possibile accedere a qualsiasi contenitore tramite shell: per farlo, passare al pod desiderato, premere \u00abs\u00bb (shell) e scegliere il contenitore.<\/p>\n<h2>Altre funzionalit\u00e0<\/h2>\n<p>\nCerto, \u00e8 supportata anche la visualizzazione dei log (\u00abl\u00bb per la risorsa selezionata). E per visualizzare i nuovi log, non \u00e8 necessario premere Enter continuamente: basta contrassegnare (\u00abm\u00bb), dopodich\u00e9 si possono monitorare solo i nuovi messaggi.<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05aa9657f744b9e3d09034862e1befe7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn questa stessa finestra \u00e8 possibile selezionare un intervallo di tempo per l'output dei log:<\/p>\n<ul>\n<li> tasto \u00ab1\u00bb \u2014 per 1 minuto;<\/li>\n<li> \u00ab2\u00bb \u2014 5 minuti;<\/li>\n<li> \u00ab3\u00bb \u2014 15 minuti;<\/li>\n<li> \u00ab4\u00bb \u2014 30 minuti;<\/li>\n<li> \u00ab5\u00bb \u2014 1 ora;<\/li>\n<li> \u00ab0\u00bb \u2014 per tutta la durata del pod.<\/li>\n<\/ul>\n<p>\nLa modalit\u00e0 di lavoro speciale Pulse (comando <code>:pulse<\/code>) mostra informazioni generali sul cluster Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/413d241ad7518f49c523fa59f51702a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn esso \u00e8 possibile vedere la quantit\u00e0 di risorse e il loro stato (quelle con stato mostrato in verde) <code>Esecuzione<\/code>).<\/p>\n<p>Un'altra funzione interessante di K9s si chiama <b>Popeye<\/b>. Essa verifica tutte le risorse rispetto a determinati criteri di correttezza e restituisce un 'rating' con spiegazioni. Ad esempio, \u00e8 possibile vedere che mancano spazi o limiti, e alcuni container possono essere eseguiti come root...<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a6bc5ea45b5749fb4e1038b82374b3c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'\u00e8 un supporto di base per Helm. Ad esempio, \u00e8 possibile controllare i rilasci distribuiti nel cluster:<\/p>\n<pre><code class=\"bash\">:helm all # tutti\n:helm $namespace # in uno spazio dei nomi specifico\n<\/code><\/pre>\n<p><\/p>\n<h2>Benchmark<\/h2>\n<p>\nIn K9s hanno integrato anche <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rakyll\/hey\">hey<\/a><\/noindex> \u2014 \u00e8 un semplice generatore di carico per server HTTP, un'alternativa al pi\u00f9 noto ab (ApacheBench).<\/p>\n<p>Per attivarlo, \u00e8 necessaria l'attivazione del port-forward nel pod. Per fare ci\u00f2, selezioniamo il pod e premiamo Shift + f, quindi accediamo al sottomenu port-forward usando l'alias 'pf'.<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/651f25269c0998c716ab9c0c4b5e0455.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDopo aver selezionato la porta e premuto Ctrl + b, il benchmark partir\u00e0. I risultati del suo lavoro vengono salvati in <code>\/tmp<\/code> e sono disponibili per la consultazione successiva in K9s. <\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/57b2fe1d078e9aca1c6afccd318094da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3b2bf031e8442e47eb3482187ac5b64d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer modificare la configurazione del benchmark \u00e8 necessario creare un file <code>$HOME\/.k9s\/bench-.yml<\/code> (definito per ogni cluster).<\/p>\n<p><i>NB: \u00c8 importante che l'estensione di tutti i file YAML nella directory <code>.k9s<\/code> sia proprio <code>.yml<\/code> (<code>.yaml<\/code> non funziona correttamente).<\/i><\/p>\n<p>Esempio di configurazione:<\/p>\n<pre><code class=\"bash\">benchmarks:\n  defaults:\n    # Numero di thread\n    concurrency: 2\n    # Numero di richieste\n    requests: 1000\n  containers:\n    # Impostazioni per il contenitore del benchmark\n    # Il contenitore \u00e8 definito come 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    # Puoi eseguire benchmark su servizi di tipo NodePort e LoadBalancer\n    # Sintassi: 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>Interfaccia<\/h2>\n<p>\nLa visualizzazione delle colonne per le liste delle risorse \u00e8 modificata creando un file <code>$HOME\/.k9s\/views.yml<\/code>. Esempio del suo contenuto:<\/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>Tuttavia, manca la colonna per le etichette, su cui esiste <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/issues\/605\">un problema nel progetto<\/a><\/noindex>.<\/i><\/p>\n<p>L'ordinamento per colonne viene effettuato mediante combinazioni di tasti:<\/p>\n<ul>\n<li> Shift + n \u2014 per nome;<\/li>\n<li> Shift + o \u2014 per nodi;<\/li>\n<li> Shift + i \u2014 per IP;<\/li>\n<li> Shift + a \u2014 per tempo di vita del contenitore;<\/li>\n<li> Shift + t \u2014 per numero di riavvii;<\/li>\n<li> Shift + r \u2014 per stato di prontezza;<\/li>\n<li> Shift + c \u2014 per utilizzo della CPU;<\/li>\n<li> Shift + m \u2014 per l'uso della memoria.<\/li>\n<\/ul>\n<p>\nSe a qualcuno non piace il design predefinito, K9s supporta anche <noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/topics\/skins\/\">skin<\/a><\/noindex>. Sono disponibili esempi pronti (7 in totale) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/skins\">qui<\/a><\/noindex>. Ecco un esempio di una di queste skin <i>(in the navy)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/4a4378f2c2d36eb3985e2b71d733c444.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Plugin<\/h2>\n<p>\nInfine, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/plugins\">plugin<\/a><\/noindex> che espandono le possibilit\u00e0 di K9s. Personalmente ho utilizzato solo una di esse \u2014 <code>kubectl get all -n $namespace<\/code>.<\/p>\n<p>Appare in questo modo. Creiamo un file <code>$HOME\/.k9s\/plugin.yml<\/code> con il seguente contenuto:<\/p>\n<pre><code class=\"bash\">plugin:\n get-all:\n   shortCut: g    \n   confirm: false    \n   description: ottieni tutto\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>\nOra puoi passare allo spazio dei nomi e premere \u00abg\u00bb per eseguire il comando corrispondente:<\/p>\n<p><img decoding=\"async\" alt=\"Panoramica di k9s \u2014 un&#039;interfaccia terminale avanzata per Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c79bbf26b6c321a97cedabf22f1699b9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTra i plugin ci sono, ad esempio, integrazioni con kubectl-jq e l'utility per visualizzare i log <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wercker\/stern\">stern<\/a><\/noindex>.<\/p>\n<h2>Conclusione<\/h2>\n<p>\nA mio avviso, K9s si \u00e8 rivelata molto comoda da usare: ci si abitua rapidamente a cercare tutto senza utilizzare <code>kubectl<\/code>. Mi ha colpito la visualizzazione dei log e il loro salvataggio, l'editing rapido delle risorse, la velocit\u00e0 complessiva*, si \u00e8 rivelato utile il comando Popeye. Merita una menzione a parte la possibilit\u00e0 di creare plugin e personalizzare l'applicazione secondo le proprie esigenze.<\/p>\n<p><i>* Anche se con un grande volume di log ho notato un funzionamento lento di K9s. In quei momenti, l'utility consumava 2 core di Intel Xeon E312xx e poteva persino bloccarsi.<\/i><\/p>\n<p>Di cosa abbiamo bisogno al momento? Di un ripristino veloce alla versione precedente (non parlo di RS) senza dover entrare nella directory. Inoltre, il ripristino avviene solo per <i>tutto<\/i> il risorsa: se hai eliminato un'annotazione o un'etichetta, dovrai eliminare e ripristinare l'intera risorsa (qui sar\u00e0 necessario entrare nella directory). Un altro piccolo dettaglio: manca la data dei backup salvati.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLeggete anche nel nostro blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/506948\/\">Panoramica delle interfacce grafiche per Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468041\/\">Annuncio dell'interfaccia web Kubernetes Web View (e breve panoramica di altre interfacce web per Kubernetes)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/426985\/\">kubebox e altre interfacce a riga di comando per Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Fonte: <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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"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\" \/>\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\/it\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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:description\" content=\"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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Panoramica di k9s \u2014 un'interfaccia terminale avanzata per Kubernetes | ProHoster","description":"K9s offre un'interfaccia utente per il terminale per interagire con i cluster Kubernetes. L'obiettivo di questo progetto Open Source \u00e8 facilitare la navigazione intuitiva delle applicazioni in K8s, la loro osservazione e gestione. K9s monitora costantemente le modifiche in Kubernetes e propone comandi rapidi per lavorare con le risorse monitorate. Il progetto \u00e8 scritto in Go ed esiste da oltre un anno e mezzo: il primo commit","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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:description":"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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/97736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=97736"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/97736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/97737"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=97736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=97736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=97736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}