{"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\/en\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","title":{"rendered":"Review of k9s \u2014 an advanced terminal interface for Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for 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> provides a terminal user interface for interacting with Kubernetes clusters. The goal of this Open Source project is to facilitate easy navigation of applications in K8s, monitoring them, and managing them. K9s continuously tracks changes in Kubernetes and offers quick commands for working with monitored resources.<\/p>\n<p>The project is written in Go and has been around for over a year and a half: the first commit was made on February 1, 2019. At the time of writing, it has over 9000 stars on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\">GitHub<\/a><\/noindex> and about 80 contributors. So, what can k9s do?<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Installation and Launch<\/h2>\n<p>\nThis is a client application (relative to the Kubernetes cluster) that is easiest to run as a 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>\nThere are also installation packages available for some Linux distributions and other operating systems. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s#installation\">packages<\/a><\/noindex>In general, for Linux systems you can install the binary file:<\/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>\nThere are no specific requirements for the K8s cluster itself. According to user reviews, the application works even with older versions of Kubernetes, such as 1.12.<\/p>\n<p>The application starts using the standard config <code>.kube\/config<\/code> \u2014 similar to how it does with <code>kubectl<\/code>.<\/p>\n<h2>Navigation<\/h2>\n<p>\nBy default, it opens a window with the standard namespace specified for the context. That is, if you have set <code>kubectl config set-context --current --namespace=test<\/code>, then the namespace <code>test<\/code>. <i>will open (See below for switching contexts\/namespaces.) <\/i><\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/820fcbdd376abc95d67bf202f34c880c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSwitching to <b>command mode<\/b> is done by pressing \":\". After that, you can manage k9s using commands \u2014 for example, to view the list of StatefulSets (in the current namespace) you can enter <code>:sts<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/840724fc656b22e67519c53983065862.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFor some other 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>\nTo output the full list of resource types available for viewing, there is the command <code>:aliases<\/code>.<\/p>\n<p>It is convenient to view the list of commands available through hotkey combinations within the current window: just press \"?\".<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/54d329f9eeda2424f457aef6b977ae63.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK9s also has a <b>search mode<\/b>, to enter which you simply type \"\/\". This allows you to search within the current \"window\". For example, if you previously typed <code>:ns<\/code>, you will be presented with a list of namespaces. If there are too many, instead of scrolling down long, you can simply enter in the namespaces window. <code>\/mynamespace<\/code>.<\/p>\n<p>To search by labels, you can select all pods in the desired namespace, and then enter, for example, <code>\/ -l app=whoami<\/code>. We will receive a list of pods with this label:<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/88b8e09a5b7819bcf49334bf351b040b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe search works in all types of windows, including logs, viewing YAML manifests, and <code>of the PVC object:<\/code> for resources \u2014 more about these capabilities can be found below.<\/p>\n<p>What does the overall sequence of actions for navigation look like?<\/p>\n<p>Using the command <code>:ctx<\/code> you can select the context:<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a5e780a3fc98961913c966222e167d51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo select a namespace, there is the already mentioned command <code>:ns<\/code>, and then you can use the search for the required space: <code>\/test<\/code>.<\/p>\n<p>If you now select the resource of interest (for example, the same StatefulSet), relevant information will appear for it: how many pods are running with brief details about them.<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/8e0d8c41b8673b7c29f2605d3ae59503.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOnly the pods may be of interest \u2014 then it is enough to enter <code>:pod<\/code>. In the case of ConfigMaps (<code>:cm<\/code> \u2014 for the list of these resources), you can select the object of interest and press \"u\", after which K9s will suggest who specifically is using it (this CM).<\/p>\n<p>Another convenient feature for viewing resources is their <b>\"X-Ray view\"<\/b>. This mode is invoked by the command <code>:xray RESOURCE<\/code> and\u2026 it\u2019s easier to show how it works than to explain. Here\u2019s an illustration for StatefulSets:<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de40ebfe06ca935d2bc36323b3f16f3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>(Each of these resources can be edited, changed, made <code>of the PVC object:<\/code>.)<\/i><\/p>\n<p>Here\u2019s a Deployment with Ingress:<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/598c1b25b787dcb1cf9660fa730d74c5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Working with resources<\/h2>\n<p>\nYou can get information about each resource in YAML or its <code>of the PVC object:<\/code> by pressing the corresponding keyboard shortcuts (\"y\" and \"d\" respectively). There are, of course, many more basic operations: their list and keyboard shortcuts are always visible thanks to a convenient \"header\" in the interface (it hides when pressing Ctrl + e).<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/6bbe4ca07442e1e14a462586d14ef98d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWhen editing any resource (\"e\" after selecting it), a text editor defined in environment variables opens (<code>export EDITOR=vim<\/code>).<\/p>\n<p>Here\u2019s how the detailed description of the resource looks (<code>of the PVC object:<\/code>):<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05fdb57e3b85d1b81c9bfc6414aca117.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSuch output (or the output of the YAML manifest of the resource) can be saved using the familiar keyboard shortcut Ctrl + s. Where it will be saved will be noted in the K9s message:<\/p>\n<pre><code class=\"plaintext\">Log \/tmp\/k9s-screens-root\/kubernetes\/Describe-1601244920104133900.yml saved successfully!<\/code><\/pre>\n<p>\nFrom the created backup files, you can also restore resources, removing system labels and annotations beforehand. To do this, you will need to go to the directory with them (<code>:dir \/tmp<\/code>), after which you can select the desired file and apply it. <code>Apply<\/code>.<\/p>\n<p>By the way, you can revert to any previous ReplicaSet at any moment if there are issues with the current one. To do this, you need to select the desired RS (<code>:rs<\/code> from their list):<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/de0ea37d970c51514559288661bdc6f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 and perform a rollback using Ctrl + l. We should receive a notification that everything was successful:<\/p>\n<pre><code class=\"plaintext\">k9s\/whoami-5cfbdbb469 successfully rolled back<\/code><\/pre>\n<p>\nTo scale the replicas, simply press 's' (scale) and choose the desired number of instances:<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/145093030db754c9ef85810cbba3ed5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nYou can access any of the containers using the shell: navigate to the desired pod, press 's' (shell), and select the container.<\/p>\n<h2>Other capabilities<\/h2>\n<p>\nOf course, log viewing is also supported ('l' for the selected resource). To view new logs, there is no need to keep pressing Enter: just mark the logs ('m'), and then you\u2019ll only track the new messages.<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/05aa9657f744b9e3d09034862e1befe7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn this same window, you can select a time range for log output:<\/p>\n<ul>\n<li> key '1' \u2014 for 1 minute;<\/li>\n<li> '2' \u2014 for 5 minutes;<\/li>\n<li> '3' \u2014 for 15 minutes;<\/li>\n<li> '4' \u2014 for 30 minutes;<\/li>\n<li> '5' \u2014 for 1 hour;<\/li>\n<li> \"0\" \u2014 for the entire lifespan of the pod.<\/li>\n<\/ul>\n<p>\nThe special Pulse mode (command <code>:pulse<\/code>) shows general information about the Kubernetes cluster:<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/413d241ad7518f49c523fa59f51702a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn it, you can see the number of resources and their status (those with a status are shown in green. <code>Running<\/code>).<\/p>\n<p>Another interesting feature of K9s is called <b>Popeye<\/b>. It checks all resources against certain correctness criteria and outputs the resulting 'rating' with explanations. For example, you can see that there are missing requests or limits, and some container may be running under root\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/a6bc5ea45b5749fb4e1038b82374b3c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThere is basic support for Helm. For example, you can view the releases deployed in the cluster:<\/p>\n<pre><code class=\"bash\">:helm all # all\n:helm $namespace # in a specific namespace\n<\/code><\/pre>\n<p><\/p>\n<h2>Benchmark<\/h2>\n<p>\nK9s even includes a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rakyll\/hey\">hey<\/a><\/noindex> \u2014 this is a simple load generator for an HTTP server, an alternative to the more well-known ab (ApacheBench).<\/p>\n<p>To enable it, port-forwarding in the pod needs to be activated. To do this, select the pod and press Shift + f, then access the port-forward submenu using the alias 'pf'.<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/651f25269c0998c716ab9c0c4b5e0455.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAfter selecting the port and pressing Ctrl + b, the benchmark will start. The results will be saved in <code>\/tmp<\/code> and available for later viewing in K9s. <\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/57b2fe1d078e9aca1c6afccd318094da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/3b2bf031e8442e47eb3482187ac5b64d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo change the benchmark configuration, you need to create a file <code>$HOME\/.k9s\/bench-.yml<\/code> (defined for each cluster).<\/p>\n<p><i>NB: It is important that the extension of all YAML files in the directory <code>.k9s<\/code> is exactly <code>.yml<\/code> (<code>.yaml<\/code> (it doesn't work correctly).<\/i><\/p>\n<p>Configuration example:<\/p>\n<pre><code class=\"bash\">benchmarks:\n  defaults:\n    # Number of threads\n    concurrency: 2\n    # Number of requests\n    requests: 1000\n  containers:\n    # Settings for the benchmarking container\n    # The container is defined as 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    # You can conduct benchmarks on services like NodePort and 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>The PerformanceResourceTiming<\/h2>\n<p>\nThe view of columns for resource lists is modified by creating a file <code>$HOME\/.k9s\/views.yml<\/code>. An example of its content:<\/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>However, the column for labels is missing, which has an <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/issues\/605\">issue in the project<\/a><\/noindex>.<\/i><\/p>\n<p>Sorting by columns is done using keyboard shortcuts:<\/p>\n<ul>\n<li> Shift + n \u2014 by name;<\/li>\n<li> Shift + o \u2014 by nodes;<\/li>\n<li> Shift + i \u2014 by IP;<\/li>\n<li> Shift + a \u2014 by container lifespan;<\/li>\n<li> Shift + t \u2014 by number of restarts;<\/li>\n<li> Shift + r \u2014 by readiness status;<\/li>\n<li> Shift + c \u2014 by CPU usage;<\/li>\n<li> Shift + m \u2014 by memory usage.<\/li>\n<\/ul>\n<p>\nIf someone is not satisfied with the default color scheme, K9s even supports <noindex><a rel=\"nofollow\" href=\"https:\/\/k9scli.io\/topics\/skins\/\">skins<\/a><\/noindex>. Ready-made examples (7 total) are available <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/skins\">here<\/a><\/noindex>. Here\u2019s an example of one of those skins <i>(in the navy)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/4a4378f2c2d36eb3985e2b71d733c444.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Plugins<\/h2>\n<p>\nFinally, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/derailed\/k9s\/tree\/master\/plugins\">plugins<\/a><\/noindex> allow for extending K9s capabilities. Personally, I have only used one of them \u2014 <code>kubectl get all -n $namespace<\/code>.<\/p>\n<p>It looks like this. We create a file <code>$HOME\/.k9s\/plugin.yml<\/code> with the following content:<\/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>\nNow you can switch to the namespace and press 'g' to execute with the corresponding command:<\/p>\n<p><img decoding=\"async\" alt=\"Review of k9s \u2014 an advanced terminal interface for Kubernetes\" src=\"\/wp-content\/uploads\/2020\/10\/c79bbf26b6c321a97cedabf22f1699b9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAmong the plugins, there are integrations with kubectl-jq and the log viewing utility <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wercker\/stern\">stern<\/a><\/noindex>.<\/p>\n<h2>Conclusion<\/h2>\n<p>\nIn my opinion, K9s has proven to be very convenient to work with: it is quite fast to get used to searching for everything you need without using <code>kubectl<\/code>. I was pleased with the log viewing and saving, quick resource editing, overall speed*, and the Popeye mode turned out to be useful. The ability to create plugins and customize the application to your needs deserves a separate mention.<\/p>\n<p><i>* While dealing with large volumes of logs, I also noticed that K9s could be slow. During those times, the utility would consume 2 cores from the Intel Xeon E312xx and could even hang.<\/i><\/p>\n<p>What is currently lacking? A quick rollback to the previous version (not referring to RS) without switching to the directory. Furthermore, restoration only occurs for <i>\u2013 this can already be a<\/i> the resource: if you deleted an annotation or label, you'll need to delete and restore the entire resource (this is where directory access becomes necessary). Another minor issue is the absence of a date for such saved 'backups.'<\/p>\n<h2>P.S.<\/h2>\n<p>\nAlso read in our blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/506948\/\">Overview of graphical interfaces for Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468041\/\">Announcement of the Kubernetes Web View web interface (and a brief overview of other web UIs for Kubernetes)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/426985\/\">kubebox and other console shells for Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/524196\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>K9s \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c\u0438 Kubernetes. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0432 K8s, \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u043d\u0438\u043c\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043c\u0438. K9s \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 Kubernetes \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Go, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u043b\u0435\u0442: \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97737,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97736","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\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\/en\/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\udd47Overview of k9s \u2014 an advanced terminal interface for Kubernetes | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/obzor-k9s-prodvinutogo-terminalnogo-interfejsa-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","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\/en\/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\/en\/wp-json\/wp\/v2\/posts\/97736","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=97736"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/97736\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/97737"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=97736"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=97736"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=97736"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}