{"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\/ro\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","title":{"rendered":"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru 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> ofer\u0103 o interfa\u021b\u0103 de terminal pentru interac\u021biunea cu clusterele Kubernetes. Scopul acestui proiect Open Source este de a facilita navigarea u\u0219oar\u0103 a aplica\u021biilor \u00een K8s, monitorizarea acestora \u0219i gestionarea lor. K9s monitorizeaz\u0103 constant modific\u0103rile din Kubernetes \u0219i ofer\u0103 comenzi rapide pentru a lucra cu resursele observate.<\/p>\n<p>Proiectul este scris \u00een Go, exist\u0103 de mai bine de un an \u0219i jum\u0103tate: prima sa commitere a fost realizat\u0103 pe 1 februarie 2019. La momentul redact\u0103rii acestui articol, are peste 9000 de stele pe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\">GitHub<\/a><\/noindex> \u0219i aproximativ 80 de contribuabili. S\u0103 vedem ce poate face k9s?<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Instalare \u0219i rulare<\/h2>\n<p>\nEste o aplica\u021bie client (\u00een raport cu clusterul Kubernetes) care este cel mai u\u0219or de rulat ca o imagine Docker:<\/p>\n<pre><code class=\"bash\">docker run --rm -it -v $KUBECONFIG:\/root\/.kube\/config quay.io\/derailed\/k9s<\/code><\/pre>\n<p>\nPentru unele distribu\u021bii Linux \u0219i alte sisteme de operare, sunt disponibile \u0219i pachete gata de instalat. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s#installation\">sunt preg\u0103tite pentru diferite versiuni de CentOS \u0219i Ubuntu.<\/a><\/noindex>\u00cen general, pentru sistemele Linux, se poate instala fi\u0219ierul binar:<\/p>\n<pre><code class=\"bash\">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<\/code><\/pre>\n<p>\nNu exist\u0103 cerin\u021be specifice pentru clusterul K8s. Conform recenziilor, aplica\u021bia func\u021bioneaz\u0103 \u0219i cu versiuni mai vechi de Kubernetes, cum ar fi 1.12.<\/p>\n<p>Aplica\u021bia se lanseaz\u0103 utiliz\u00e2nd configura\u021bia standard <code>.kube\/config<\/code> \u2014 similar cu ceea ce face <code>kubectl<\/code>.<\/p>\n<h2>Navigare<\/h2>\n<p>\nImplicit, se deschide o fereastr\u0103 cu namespace-ul standard specificat pentru context. A\u0219adar, dac\u0103 a\u021bi setat <code>kubectl config set-context --current --namespace=test<\/code>, atunci se va deschide namespace-ul <code>test<\/code>. <i>(Despre schimbarea contextelor\/namespaces, vezi mai jos.) <\/i><\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/820fcbdd376abc95d67bf202f34c880c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTrecerea \u00een <b>modul de comand\u0103<\/b> se realizeaz\u0103 ap\u0103s\u00e2nd \u201e:\u201d. Dup\u0103 aceea, se poate gestiona func\u021bionarea k9s folosind comenzi \u2014 de exemplu, pentru a vizualiza lista StatefulSets (\u00een namespace-ul curent) se poate introduce <code>:sts<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/840724fc656b22e67519c53983065862.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPentru unele alte resurse 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 Ingresses;<\/li>\n<li> <code>:svc<\/code> \u2014 Services.<\/li>\n<\/ul>\n<p>\nPentru a afi\u0219a lista complet\u0103 a tipurilor de resurse disponibile pentru vizualizare, exist\u0103 comanda <code>:aliases<\/code>.<\/p>\n<p>Este convenabil s\u0103 vizualiza\u021bi \u0219i lista comenzilor disponibile prin combina\u021bii de taste rapide \u00een cadrul ferestrei curente: pentru asta este suficient s\u0103 ap\u0103sa\u021bi \u201e?\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/54d329f9eeda2424f457aef6b977ae63.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe asemenea, \u00een k9s exist\u0103 <b>modul de c\u0103utare<\/b>, pentru a accesa care este suficient s\u0103 introduce\u021bi \u201e\/\u201d. Acesta permite c\u0103utarea \u00een con\u021binutul ferestrei curente. De exemplu, dac\u0103 a\u021bi introdus anterior <code>:ns<\/code>, ave\u021bi deschis lista de namespaces. Dac\u0103 sunt prea multe, pentru a nu derula mult \u00een jos, este suficient s\u0103 introduce\u021bi \u00een fereastra cu namespaces <code>\/mynamespace<\/code>.<\/p>\n<p>Pentru a c\u0103uta dup\u0103 etichete, po\u021bi selecta toate pod-urile din spa\u021biul de nume dorit, dup\u0103 care introdu, de exemplu, <code>\/ -l app=whoami<\/code>. Vom ob\u021bine o list\u0103 de pod-uri cu aceast\u0103 etichet\u0103:<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/88b8e09a5b7819bcf49334bf351b040b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC\u0103utarea func\u021bioneaz\u0103 \u00een toate tipurile de feronerie, inclusiv \u00een jurnale, vizualizarea manifestelor YAML \u0219i <code>describe<\/code> pentru resurse \u2013 mai multe detalii despre aceste func\u021bionalit\u0103\u021bi se g\u0103sesc mai jos.<\/p>\n<p>Cum arat\u0103, \u00een general, secven\u021ba de ac\u021biuni pentru navigare?<\/p>\n<p>Folosind comanda <code>:ctx<\/code> se poate alege contextul:<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a5e780a3fc98961913c966222e167d51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPentru a selecta namespace-ul, exist\u0103 deja comanda men\u021bionat\u0103 <code>:ns<\/code>, \u0219i apoi se poate folosi c\u0103utarea pentru spa\u021biul dorit: <code>\/test<\/code>.<\/p>\n<p>Dac\u0103 acum alegem resursa care ne intereseaz\u0103 (de exemplu, acela\u0219i StatefulSet), pentru aceasta va ap\u0103rea informa\u021bia corespunz\u0103toare: c\u00e2te pod-uri sunt pornite cu detalii sumare despre ele.<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/8e0d8c41b8673b7c29f2605d3ae59503.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPot fi interesante doar pod-urile \u2013 atunci este suficient s\u0103 introduci <code>:pod<\/code>. \u00cen cazul ConfigMap-urilor (<code>:cm<\/code> \u2013 pentru lista acestor resurse) se poate selecta obiectul interesant \u0219i se poate ap\u0103sa \u00abu\u00bb, dup\u0103 care K9s va sugera cine folose\u0219te (aceast\u0103 CM) \u00een mod specific.<\/p>\n<p>\u00ce \u00eenc\u0103 o caracteristic\u0103 convenabil\u0103 pentru vizualizarea resurselor \u2013 <b>\u201erentgen\u201d (XRay view)<\/b>. Acest mod este activat prin comanda <code>:xray RESOURCE<\/code> \u0219i... este mai simplu s\u0103 ar\u0103\u021bi cum func\u021bioneaz\u0103 dec\u00e2t s\u0103 explici. Iat\u0103 o ilustra\u021bie pentru StatefulSets:<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de40ebfe06ca935d2bc36323b3f16f3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(Fiecare dintre aceste resurse poate fi editat\u0103, modificat\u0103, f\u0103cut\u0103 <code>describe<\/code>.)<\/i><\/p>\n<p>Iat\u0103 Deployment-ul cu Ingress:<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/598c1b25b787dcb1cf9660fa730d74c5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Lucrul cu resursele<\/h2>\n<p>\nDespre fiecare resurs\u0103 po\u021bi ob\u021bine informa\u021bii \u00een YAML sau <code>describe<\/code> prin ap\u0103sarea combina\u021biilor de taste corespunz\u0103toare (\u00aby\u00bb \u0219i \u00abd\u00bb respectiv). Baza opera\u021biunilor, desigur, este mult mai mare: lista acestora \u0219i combina\u021biile de taste sunt \u00eentotdeauna vizibile datorit\u0103 \u201eantetului\u201d convenabil din interfa\u021b\u0103 (se ascunde ap\u0103s\u00e2nd Ctrl + e).<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/6bbe4ca07442e1e14a462586d14ef98d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC\u00e2nd editezi orice resurs\u0103 (\u00abe\u00bb dup\u0103 ce o alegi), se deschide un editor de text definit \u00een variabilele de mediu (<code>export EDITOR=vim<\/code>).<\/p>\n<p>Iat\u0103 cum arat\u0103 descrierea detaliat\u0103 a resursei (<code>describe<\/code>):<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05fdb57e3b85d1b81c9bfc6414aca117.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAceast\u0103 ie\u0219ire (sau ie\u0219irea vizualiz\u0103rii manifestului YAML al resursei) poate fi salvat\u0103 folosind combina\u021bia familiar\u0103 de taste Ctrl + s. Unde va fi salvat, va fi indicat \u00een mesajul K9s:<\/p>\n<pre><code class=\"plaintext\">Log \/tmp\/k9s-screens-root\/kubernetes\/Describe-1601244920104133900.yml saved successfully!<\/code><\/pre>\n<p>\nDin fi\u0219ierele de backup create se pot \u0219i restaura resurse, dup\u0103 ce se \u00eendep\u0103rteaz\u0103 etichetele \u0219i adnot\u0103rile sistemului. Pentru aceasta va fi necesar s\u0103 se navigheze \u00een directorul cu ele (<code>:dir \/tmp<\/code>), dup\u0103 care se va alege fi\u0219ierul dorit \u0219i se va aplica <code>aplicare<\/code>.<\/p>\n<p>De exemplu, po\u021bi reveni oric\u00e2nd la ReplicaSet-ul anterior dac\u0103 \u00eent\u00e2mpini probleme cu cel curent. Pentru aceasta, trebuie s\u0103 alegi RS-ul dorit (<code>:rs<\/code> pentru lista lor):<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de0ea37d970c51514559288661bdc6f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 \u0219i s\u0103 efectuezi rollback folosind Ctrl + l. Trebuie s\u0103 primim o notificare c\u0103 totul a decurs cu succes:<\/p>\n<pre><code class=\"plaintext\">k9s\/whoami-5cfbdbb469 a fost revertit cu succes<\/code><\/pre>\n<p>\nIar pentru a scala replicile, este suficient s\u0103 ape\u0219i pe \u201es\u201d (scale) \u0219i s\u0103 alegi num\u0103rul dorit de instan\u021be:<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/145093030db754c9ef85810cbba3ed5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste posibil s\u0103 intri \u00een oricare dintre containere folosind shell: pentru aceasta, navigheaz\u0103 la pod-ul dorit, apas\u0103 \u201es\u201d (shell) \u0219i alege containerul.<\/p>\n<h2>Alte func\u021bionalit\u0103\u021bi<\/h2>\n<p>\nDesigur, este suportat\u0103 \u0219i vizualizarea log-urilor (\u201el\u201d pentru resursa selectat\u0103). Iar pentru a vizualiza log-urile noi, nu este nevoie s\u0103 ape\u0219i constant Enter: este suficient s\u0103 marchezi (\u201em\u201d), dup\u0103 care vei monitoriza doar mesajele noi.<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05aa9657f744b9e3d09034862e1befe7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe asemenea, \u00een aceast\u0103 fereastr\u0103 po\u021bi alege o fereastr\u0103 temporal\u0103 pentru ie\u0219irea log-urilor:<\/p>\n<ul>\n<li> tasta \u201e1\u201d \u2013 pentru 1 minut;<\/li>\n<li> \u201e2\u201d \u2013 5 minute;<\/li>\n<li> \u201e3\u201d \u2013 15 minute;<\/li>\n<li> \u201e4\u201d \u2013 30 minute;<\/li>\n<li> \u201e5\u201d \u2013 1 or\u0103;<\/li>\n<li> \u201e0\u201d \u2013 pentru \u00eentreaga durat\u0103 de via\u021b\u0103 a pod-ului.<\/li>\n<\/ul>\n<p>\nModul special de lucru Pulse (comanda <code>:pulse<\/code>) arat\u0103 informa\u021bii generale despre clusterul Kubernetes:<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/413d241ad7518f49c523fa59f51702a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAici po\u021bi vedea num\u0103rul de resurse \u0219i starea acestora (cele cu statusul sunt afi\u0219ate \u00een verde. <code>Running<\/code>).<\/p>\n<p>O alt\u0103 func\u021bie interesant\u0103 a K9s se nume\u0219te <b>Popeye<\/b>. Aceasta verific\u0103 toate resursele pe baza unor criterii de validitate \u0219i prezint\u0103 \u201erating-ul\u201d ob\u021binut cu explica\u021bii. De exemplu, po\u021bi observa c\u0103 lipse\u0219te un limit\u0103 sau o cot\u0103, iar un container ar putea rula sub root\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a6bc5ea45b5749fb4e1038b82374b3c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nExist\u0103 suport de baz\u0103 pentru Helm. De exemplu, po\u021bi vizualiza release-urile implementate \u00een cluster:<\/p>\n<pre><code class=\"bash\">:helm all # toate\n:helm $namespace # \u00een spa\u021biul de nume specific\n<\/code><\/pre>\n<p><\/p>\n<h2>Benchmark<\/h2>\n<p>\n\u00cen K9s a fost integrat chiar \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rakyll\/hey\">hey<\/a><\/noindex> \u2014 un generator simplu de \u00eenc\u0103rcare pentru serverul HTTP, alternativ\u0103 la mai cunoscutul ab (ApacheBench).<\/p>\n<p>Pentru a-l activa, va fi necesar\u0103 activarea port-forward \u00een pod. Pentru aceasta, alegi pod-ul \u0219i ape\u0219i Shift + f, apoi accesezi submeniul port-forward folosind alias-ul \u201epf\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/651f25269c0998c716ab9c0c4b5e0455.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 ce ai ales portul \u0219i ai ap\u0103sat Ctrl + b, benchmark-ul va \u00eencepe. Rezultatele sale sunt salvate \u00een <code>\/tmp<\/code> \u0219i sunt disponibile pentru vizualizare ulterioar\u0103 \u00een K9s. <\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/57b2fe1d078e9aca1c6afccd318094da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3b2bf031e8442e47eb3482187ac5b64d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPentru a modifica configura\u021bia benchmark-ului, trebuie s\u0103 creezi un fi\u0219ier <code>$HOME\/.k9s\/bench-.yml<\/code> (definit pentru fiecare cluster).<\/p>\n<p><i>NB: Este important ca extensia tuturor fi\u0219ierelor YAML din directorul <code>.k9s<\/code> s\u0103 fie exact <code>.yml<\/code> (<code>.yaml<\/code> nu func\u021bioneaz\u0103 corect).<\/i><\/p>\n<p>Exemplu de configurare:<\/p>\n<pre><code class=\"bash\">benchmarks:\n  defaults:\n    # Num\u0103rul de fire\n    concurrency: 2\n    # Num\u0103rul de cereri\n    requests: 1000\n  containers:\n    # Set\u0103ri pentru containerul de benchmark\n    # Containerul este definit ca 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    # Po\u021bi efectua benchmark pe servicii de tip NodePort \u0219i LoadBalancer\n    # Sintaxa: 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>Interfa\u021ba<\/h2>\n<p>\nTipul coloanelor pentru listele de resurse se modific\u0103 prin crearea unui fi\u0219ier <code>$HOME\/.k9s\/views.yml<\/code>. Un exemplu al con\u021binutului s\u0103u:<\/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>Adev\u0103rul este c\u0103 lipse\u0219te o coloan\u0103 pentru etichete, ceea ce este <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/issues\/605\">o problem\u0103 \u00een proiect<\/a><\/noindex>.<\/i><\/p>\n<p>Sortarea pe coloane se face prin combina\u021bii de taste:<\/p>\n<ul>\n<li> Shift + n \u2014 dup\u0103 nume;<\/li>\n<li> Shift + o \u2014 dup\u0103 noduri;<\/li>\n<li> Shift + i \u2014 dup\u0103 IP;<\/li>\n<li> Shift + a \u2014 dup\u0103 timpul de via\u021b\u0103 al containerului;<\/li>\n<li> Shift + t \u2014 dup\u0103 num\u0103rul de restarts;<\/li>\n<li> Shift + r \u2014 dup\u0103 starea de preg\u0103tire;<\/li>\n<li> Shift + c \u2014 dup\u0103 consumul CPU;<\/li>\n<li> Shift + m \u2014 dup\u0103 consumul de memorie.<\/li>\n<\/ul>\n<p>\nDac\u0103 cineva nu \u00eei place schema de culori implicit\u0103, K9s suport\u0103 chiar \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/topics\/skins\/\">teme<\/a><\/noindex>. Exemplele gata f\u0103cute (7 la num\u0103r) sunt disponibile <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/skins\">aici<\/a><\/noindex>. Iat\u0103 un exemplu al uneia dintre aceste teme <i>(in the navy)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/4a4378f2c2d36eb3985e2b71d733c444.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Plugin-uri<\/h2>\n<p>\n\u00cen cele din urm\u0103, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/plugins\">pluginuri<\/a><\/noindex> permit extinderea func\u021bionalit\u0103\u021bilor K9s. Eu personal am folosit doar una dintre ele \u2014 <code>kubectl get all -n $namespace<\/code>.<\/p>\n<p>Arat\u0103 \u00een felul urm\u0103tor. Cre\u0103m un fi\u0219ier <code>$HOME\/.k9s\/plugin.yml<\/code> cu urm\u0103torul con\u021binut:<\/p>\n<pre><code class=\"bash\">plugin:\n get-all:\n   shortCut: g    \n   confirm: false    \n   description: get all\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>\nAcum po\u021bi merge \u00een spa\u021biul de nume \u0219i ap\u0103sa \u00abg\u00bb pentru a executa comanda corespunz\u0103toare:<\/p>\n<p><img decoding=\"async\" alt=\"Prezentare k9s - interfa\u021ba avansat\u0103 de terminal pentru Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c79bbf26b6c321a97cedabf22f1699b9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrintre pluginuri exist\u0103, de exemplu, integrarea cu kubectl-jq \u0219i utilitarul pentru vizualizarea logurilor <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wercker\/stern\">stern<\/a><\/noindex>.<\/p>\n<h2>Concluzie<\/h2>\n<p>\nDin punctul meu de vedere, K9s s-a dovedit foarte convenabil\u0103 \u00een utilizare: este destul de u\u0219or s\u0103 te obi\u0219nuie\u0219ti s\u0103 cau\u021bi tot ce ai nevoie f\u0103r\u0103 a folosi <code>kubectl<\/code>. M-a impresionat vizualizarea logurilor \u0219i salvarea acestora, editarea rapid\u0103 a resurselor, viteza de lucru \u00een general*, modul Popeye s-a dovedit a fi util. Merit\u0103 men\u021bionate capacit\u0103\u021bile de a crea pluginuri \u0219i de a adapta aplica\u021bia la nevoile tale.<\/p>\n<p><i>* De\u0219i am observat, la un volum mare de jurnale, c\u0103 K9s func\u021bioneaz\u0103 lent. \u00cen aceste momente, utilitarul utiliza 2 nuclee de la Intel Xeon E312xx \u0219i putea chiar s\u0103 se blocheze.<\/i><\/p>\n<p>Ce lipse\u0219te \u00een acest moment? O revenire rapid\u0103 la versiunea anterioar\u0103 (vorbim despre RS) f\u0103r\u0103 a accesa directorul. \u00cen plus, restaurarea are loc doar pentru <i>c\u00e2teva secunde<\/i> resursa: dac\u0103 a\u021bi \u0219ters o not\u0103 sau un eticheta, va trebui s\u0103 \u0219terge\u021bi \u0219i s\u0103 restaura\u021bi \u00eentreaga resurs\u0103 (aici va fi necesar s\u0103 accesa\u021bi directorul). Un alt detaliu simplu \u2014 lipsa datei acestor \u201ebackup-uri\u201d salvate.<\/p>\n<h2>P.S.<\/h2>\n<p>\nCiti\u021bi \u0219i \u00een blogul nostru:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/506948\/\">Prezentare general\u0103 a interfe\u021belor grafice pentru Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468041\/\">Anun\u021b privind interfa\u021ba web Kubernetes Web View (\u0219i o scurt\u0103 prezentare a altor interfe\u021be web pentru Kubernetes)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/426985\/\">kubebox \u0219i alte shell-uri console pentru Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Sursa: <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.1 - 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\/ro\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Recenzie k9s \u2014 un interface terminal avansat pentru Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/97736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=97736"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/97736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/97737"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=97736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=97736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=97736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}