{"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\/nl\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","title":{"rendered":"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor 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> biedt een terminal gebruikersinterface voor interactie met Kubernetes-clusters. Het doel van dit Open Source-project is om een gemakkelijke navigatie door toepassingen in K8s, observatie en beheer ervan te faciliteren. K9s houdt constant veranderingen in Kubernetes in de gaten en biedt snelle commando's voor het werken met de geobserveerde middelen.<\/p>\n<p>Het project is geschreven in Go en bestaat al meer dan anderhalf jaar: de eerste commit werd gemaakt op 1 februari 2019. Bij het schrijven van dit artikel zijn er meer dan 9000 sterren op <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\">GitHub<\/a><\/noindex> en ongeveer 80 bijdragers. Laten we eens kijken wat k9s kan.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Installatie en opstarten<\/h2>\n<p>\nDit is een clienttoepassing (ten opzichte van het Kubernetes-cluster) die het eenvoudigst kan worden gestart als een Docker-image:<\/p>\n<pre><code class=\"bash\">docker run --rm -it -v $KUBECONFIG:\/root\/.kube\/config quay.io\/derailed\/k9s<\/code><\/pre>\n<p>\nVoor sommige Linux-distributies en andere besturingssystemen zijn er ook kant-en-klare installaties beschikbaar. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s#installation\">pakketten<\/a><\/noindex>In het algemeen kan voor Linux-systemen het binaire bestand worden ge\u00efnstalleerd:<\/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>\nEr zijn geen specifieke vereisten voor het K8s-cluster zelf. Uit recensies blijkt dat de applicatie ook werkt met oudere versies van Kubernetes, zoals 1.12.<\/p>\n<p>De applicatie wordt opgestart met de standaardconfiguratie <code>.kube\/config<\/code> \u2014 soortgelijk aan hoe dat gebeurt met <code>kubectl<\/code>.<\/p>\n<h2>Navigatie<\/h2>\n<p>\nStandaard wordt een venster geopend met de standaard namespace die is opgegeven voor de context. Dus, als je hebt ingevoerd <code>kubectl config set-context --current --namespace=test<\/code>, dan wordt ook de namespace geopend <code>test<\/code>. <i>(Voor informatie over het wisselen van contexten\/namespaces, zie hieronder.) <\/i><\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/820fcbdd376abc95d67bf202f34c880c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOvergangen naar <b>commandomode<\/b> wordt gemaakt door op \u201c:\u201d te drukken. Daarna kan het gebruik van k9s beheerd worden met commando's \u2014 bijvoorbeeld, om een lijst van StatefulSets (in de huidige namespace) te bekijken, kan je invoeren <code>:sts<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/840724fc656b22e67519c53983065862.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVoor enkele andere Kubernetes-resources:<\/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>\nOm een volledige lijst van beschikbare resource types te tonen, is er het commando <code>:aliases<\/code>.<\/p>\n<p>Het is handig om ook een lijst van beschikbare commando's te bekijken die via sneltoetscombinaties in het huidige venster beschikbaar zijn: daarvoor is het voldoende om op \u201c?\u201d te drukken.<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/54d329f9eeda2424f457aef6b977ae63.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDaarnaast heeft k9s een <b>zoekmodus<\/b>, waarvoor je eenvoudig \u201c\/\u201d kunt invoeren. Hiermee wordt gezocht naar de inhoud van het huidige \u201cvenster\u201d. Stel je voor, als je eerder invoerde <code>:ns<\/code>, heb je de lijst van namespaces geopend. Als er te veel zijn, hoef je om niet eindeloos naar beneden te scrollen, alleen maar in het venster met namespaces in te voeren <code>\/mynamespace<\/code>.<\/p>\n<p>Voor het zoeken op labels kunt u alle pods in de gewenste namespace selecteren en vervolgens bijvoorbeeld invoeren, <code>\/ -l app=whoami<\/code>. We krijgen een lijst met pods met dit label:<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/88b8e09a5b7819bcf49334bf351b040b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe zoektocht werkt in alle venstertypes, inclusief logs, bekijken van YAML-manifesten en <code>beschrijven<\/code> voor resources \u2014 meer over deze mogelijkheden staat hieronder.<\/p>\n<p>Hoe ziet de algemene volgorde van acties voor navigatie eruit?<\/p>\n<p>Met de opdracht <code>:ctx<\/code> je kunt de context selecteren:<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a5e780a3fc98961913c966222e167d51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVoor het kiezen van de namespace is er de eerder genoemde command <code>:ns<\/code>, en daarna kun je de zoekfunctie gebruiken voor de gewenste ruimte: <code>\/test<\/code>.<\/p>\n<p>Als we nu de resource kiezen die ons interesseert (bijvoorbeeld dezelfde StatefulSet), verschijnt de bijbehorende informatie: hoeveel pods zijn er actief met beknopte gegevens over hen.<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/8e0d8c41b8673b7c29f2605d3ae59503.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet kunnen alleen de pods zijn \u2014 dan is het voldoende om in te voeren <code>:pod<\/code>. In het geval van ConfigMaps (<code>:cm<\/code> \u2014 voor de lijst van deze resources) kun je het interessante object selecteren en op 'u' drukken, waarna K9s zal aangeven wie deze specifieke (CM) gebruikt.<\/p>\n<p>Een andere handige functie voor het bekijken van resources is hun <b>\u2018r\u00f6ntgen\u2019 (XRay view)<\/b>. Deze modus wordt opgeroepen met het commando <code>:xray RESOURCE<\/code> en... het is eenvoudiger om te laten zien hoe het werkt dan om het uit te leggen. Hier is een illustratie voor StatefulSets:<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de40ebfe06ca935d2bc36323b3f16f3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(Elk van deze resources kan worden bewerkt, gewijzigd, gemaakt <code>beschrijven<\/code>.)<\/i><\/p>\n<p>En hier is een Deployment met Ingress:<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/598c1b25b787dcb1cf9660fa730d74c5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Werken met resources<\/h2>\n<p>\nOver elke resource kan informatie worden verkregen in YAML of zijn <code>beschrijven<\/code> door op de bijbehorende sneltoetsen te drukken ('y' en 'd' respectievelijk). Uiteraard zijn er nog meer basisbewerkingen: hun lijst en sneltoetsen staan altijd zichtbaar door de handige 'kop' in de interface (deze wordt verborgen met Ctrl + e).<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/6bbe4ca07442e1e14a462586d14ef98d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBij het bewerken van een resource ('e' na selectie) opent een teksteditor, ingesteld in de omgevingsvariabelen (<code>export EDITOR=vim<\/code>).<\/p>\n<p>Hier is hoe de gedetailleerde beschrijving van de resource eruit ziet (<code>beschrijven<\/code>):<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05fdb57e3b85d1b81c9bfc6414aca117.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDeze output (of de uitvoer van het bekijken van het YAML-manifest van de resource) kan worden opgeslagen met de gebruikelijke sneltoets Ctrl + s. Waar het zal worden opgeslagen, zal blijken uit het bericht van K9s:<\/p>\n<pre><code class=\"plaintext\">Log \/tmp\/k9s-screens-root\/kubernetes\/Describe-1601244920104133900.yml met succes opgeslagen!<\/code><\/pre>\n<p>\nVan de gemaakte back-upbestanden kunnen ook resources worden hersteld, nadat de systeemlabels en annotaties zijn verwijderd. Hiervoor moet je naar de directory gaan met deze bestanden (<code>:dir \/tmp<\/code>), daarna het gewenste bestand selecteren en toepassen. <code>apply<\/code>.<\/p>\n<p>Overigens, op elk moment kan je terugkeren naar een vorige ReplicaSet als er problemen zijn met de huidige. Hiervoor moet je de gewenste RS kiezen (<code>:rs<\/code> voor hun lijst):<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de0ea37d970c51514559288661bdc6f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n... en een rollback uitvoeren met behulp van Ctrl + l. We zouden een melding moeten krijgen dat alles succesvol is verlopen:<\/p>\n<pre><code class=\"plaintext\">k9s\/whoami-5cfbdbb469 succesvol teruggezet<\/code><\/pre>\n<p>\nEn om de replicas te schalen, is het voldoende om op 's' (scale) te drukken en het gewenste aantal instanties te kiezen:<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/145093030db754c9ef85810cbba3ed5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn elk van de containers kun je met shell binnenkomen: ga hiervoor naar de gewenste pod, druk op 's' (shell) en kies de container.<\/p>\n<h2>Andere mogelijkheden<\/h2>\n<p>\nNatuurlijk is het ook mogelijk om logs te bekijken ('l' voor de geselecteerde resource). En om nieuwe logs te zien, is het niet nodig om voortdurend op Enter te drukken: je kunt simpelweg markeren ('m'), waarna je alleen nieuwe berichten volgt.<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05aa9657f744b9e3d09034862e1befe7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOok in dit venster kun je een tijdsinterval voor de logs kiezen:<\/p>\n<ul>\n<li> toets '1' \u2014 voor 1 minuut;<\/li>\n<li> '2' \u2014 5 minuten;<\/li>\n<li> '3' \u2014 15 minuten;<\/li>\n<li> '4' \u2014 30 minuten;<\/li>\n<li> '5' \u2014 1 uur;<\/li>\n<li> \"0\" \u2014 gedurende de levensduur van de pod.<\/li>\n<\/ul>\n<p>\nEen speciale modus van Pulse (commando <code>:pulse<\/code>) toont algemene informatie over de Kubernetes-cluster:<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/413d241ad7518f49c523fa59f51702a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHierin kun je het aantal resources en hun status zien (groen toont diegenen die status hebben) <code>Running<\/code>).<\/p>\n<p>Een andere interessante functie van K9s heet <b>Popeye<\/b>. Het controleert alle resources op bepaalde correctheidcriteria en geeft een 'rating' met uitleg. Bijvoorbeeld, je kunt zien dat er geen probes of limieten ontbreken, en dat een container als root kan draaien...<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a6bc5ea45b5749fb4e1038b82374b3c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEr is basis ondersteuning voor Helm. Bijvoorbeeld, zo kun je de releases bekijken die in de cluster zijn gedeployed:<\/p>\n<pre><code class=\"bash\">:helm all # alles\n:helm $namespace # in een specifieke namespace\n<\/code><\/pre>\n<p><\/p>\n<h2>Benchmark<\/h2>\n<p>\nIn K9s is zelfs een <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rakyll\/hey\">hey<\/a><\/noindex> \u2014 een eenvoudige belastinggenerator voor de HTTP-server, als alternatief voor de meer bekende ab (ApacheBench).<\/p>\n<p>Om het in te schakelen, is activatie van port-forward in de pod vereist. Hiervoor kiezen we een pod en drukken we op Shift + f, gaan naar het sub-menu port-forward via het alias 'pf'.<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/651f25269c0998c716ab9c0c4b5e0455.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa het kiezen van de poort en het drukken op Ctrl + b, start de benchmark zelf. De resultaten worden opgeslagen in <code>\/tmp<\/code> en zijn beschikbaar voor latere weergave in K9s. <\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/57b2fe1d078e9aca1c6afccd318094da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3b2bf031e8442e47eb3482187ac5b64d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVoor het wijzigen van de benchmarkconfiguratie moet je een bestand aanmaken <code>$HOME\/.k9s\/bench-.yml<\/code> (gedefinieerd voor elke cluster).<\/p>\n<p><i>NB: Het is belangrijk dat de extensie van alle YAML-bestanden in de directory <code>.k9s<\/code> precies <code>.yml<\/code> (<code>.yaml<\/code> niet correct werkt).<\/i><\/p>\n<p>Voorbeeldconfiguratie:<\/p>\n<pre><code class=\"bash\">benchmarks:\n  defaults:\n    # Aantal threads\n    concurrency: 2\n    # Aantal aanvragen\n    requests: 1000\n  containers:\n    # Instellingen voor de benchmarkcontainer\n    # Container wordt gedefinieerd als 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    # Benchmarken kan worden gedaan op services van het type NodePort en LoadBalancer\n    # Syntax: 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>\nDe kolomweergave voor resource lijst wordt aangepast door het aanmaken van een bestand <code>$HOME\/.k9s\/views.yml<\/code>. Voorbeeld van de inhoud:<\/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>Echter, de kolom voor labels ontbreekt, waarvoor er is <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/issues\/605\">een issue in het project<\/a><\/noindex>.<\/i><\/p>\n<p>Sorteren op kolommen gebeurt met de sneltoetsen:<\/p>\n<ul>\n<li> Shift + n \u2014 op naam;<\/li>\n<li> Shift + o \u2014 op knooppunten;<\/li>\n<li> Shift + i \u2014 op IP;<\/li>\n<li> Shift + a \u2014 op levensduur van de container;<\/li>\n<li> Shift + t \u2014 op aantal herstarts;<\/li>\n<li> Shift + r \u2014 op gereedstatus;<\/li>\n<li> Shift + c \u2014 op CPU-gebruik;<\/li>\n<li> Shift + m \u2014 op geheugengebruik.<\/li>\n<\/ul>\n<p>\nAls iemand de standaard kleurstelling niet bevalt, ondersteunt K9s zelfs <noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/topics\/skins\/\">thema's<\/a><\/noindex>. Er zijn kant-en-klare voorbeelden (7 stuks) beschikbaar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/skins\">hier<\/a><\/noindex>. Hier is een voorbeeld van zo'n thema <i>(in de marine)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/4a4378f2c2d36eb3985e2b71d733c444.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Plug-ins<\/h2>\n<p>\nTen slotte, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/plugins\">plug-ins<\/a><\/noindex> die de mogelijkheden van K9s uitbreiden. Persoonlijk heb ik er maar \u00e9\u00e9n gebruikt \u2014 <code>kubectl get all -n $namespace<\/code>.<\/p>\n<p>Dit ziet er als volgt uit. Maak een bestand aan <code>$HOME\/.k9s\/plugin.yml<\/code> met de volgende inhoud:<\/p>\n<pre><code class=\"bash\">plugin:\n get-all:\n   shortCut: g    \n   confirm: false    \n   description: haal alles op\n   scopes:\n   - alles\n   command: sh\n   background: false\n   args:\n   - -c\n   - \"kubectl -n $NAMESPACE get all -o wide | less\"<\/code><\/pre>\n<p>\nNu kun je naar de namespace gaan en op 'g' drukken om de overeenkomstige opdracht uit te voeren:<\/p>\n<p><img decoding=\"async\" alt=\"Overzicht van k9s - een geavanceerde terminalinterface voor Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c79bbf26b6c321a97cedabf22f1699b9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOnder de plugins zijn er bijvoorbeeld integraties met kubectl-jq en het logweergavehulpmiddel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wercker\/stern\">stern<\/a><\/noindex>.<\/p>\n<h2>Conclusie<\/h2>\n<p>\nNaar mijn mening is K9s erg handig in gebruik: je raakt vrij snel gewend aan het zoeken naar alles wat je nodig hebt zonder gebruik te maken van <code>kubectl<\/code>. Ik was blij met de logweergave en het opslaan ervan, snelle bewerking van resources, de algemene snelheid*, en de Popeye-modus bleek nuttig te zijn. De mogelijkheden om plugins te maken en de applicatie aan te passen aan je behoeften verdienen aparte vermelding.<\/p>\n<p><i>* Ondanks dat ik bij een grote hoeveelheid logs ook langzame prestaties van K9s heb opgemerkt. In zulke momenten 'verslond' de tool 2 kernen van de Intel Xeon E312xx en kon zelfs vastlopen.<\/i><\/p>\n<p>Wat ontbreekt momenteel? Een snelle terugdraaiing naar de vorige versie (niet over RS) zonder naar de map te hoeven gaan. Bovendien vindt herstel alleen plaats voor <i>de reden zijn waarom<\/i> de resource: als je een annotatie of label hebt verwijderd, moet je de hele resource verwijderen en herstellen (hier moet je wel naar de map gaan). Een ander punt is dat de datum van dergelijke opgeslagen 'back-ups' ontbreekt.<\/p>\n<h2>P.S.<\/h2>\n<p>\nLees ook op onze blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/506948\/\">Overzicht van grafische interfaces voor Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468041\/\">Aankondiging van de Kubernetes Web View webinterface (en een kort overzicht van andere web UI voor Kubernetes)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/426985\/\">kubebox en andere console shells voor Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Bron: <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.4 - 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\/nl\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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\udd47Overzicht van k9s \u2014 een geavanceerde terminalinterface voor Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/97736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=97736"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/97736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/97737"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=97736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=97736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=97736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}