From 6bc08c0a7e335bdf685aa3149989b791dd845d85 Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Sun, 7 Feb 2021 21:41:08 +0100 Subject: [PATCH] Add k9s section --- slides/k8s/k9s.md | 141 ++++++++++++++++++++++++++++++++++++++ slides/kube-fullday.yml | 1 + slides/kube-halfday.yml | 1 + slides/kube-selfpaced.yml | 1 + slides/kube-twodays.yml | 1 + 5 files changed, 145 insertions(+) create mode 100644 slides/k8s/k9s.md diff --git a/slides/k8s/k9s.md b/slides/k8s/k9s.md new file mode 100644 index 00000000..9c5174e4 --- /dev/null +++ b/slides/k8s/k9s.md @@ -0,0 +1,141 @@ +# k9s + +- Somewhere in between CLI and GUI (or web UI), we can find the magic land of TUI + + - [Text-based user interfaces](https://en.wikipedia.org/wiki/Text-based_user_interface) + + - often using libraries like [curses](https://en.wikipedia.org/wiki/Curses_%28programming_library%29) and its successors + +- Some folks love them, some folks hate them, some are indifferent ... + +- But it's nice to have different options! + +- Let's see one particular TUI for Kubernetes: [k9s](https://k9scli.io/) + +--- + +## Installing k9s + +- If you are using a training cluster or the [shpod](https://github.com/jpetazzo/shpod) image, k9s is pre-installed + +- Otherwise, it can be installed easily: + + - with [various package managers](https://k9scli.io/topics/install/) + + - or by fetching a [binary release](https://github.com/derailed/k9s/releases) + +- We don't need to set up or configure anything + + (it will use the same configuration as `kubectl` and other well-behaved clients) + +- Just run `k9s` to fire it up! + +--- + +## What kind to we want to see? + +- Press `:` to change the type of resource to view + +- Then type, for instance, `ns` or `namespace` or `nam[TAB]`, then `[ENTER]` + +- Use the arrows to move down to e.g. `kube-system`, and press `[ENTER]` + +- Or, type `/kub` or `/sys` to filter the output, and press `[ENTER]` twice + + (once to exit the filter, once to enter the namespace) + +- We now see the pods in `kube-system`! + +--- + +## Interacting with pods + +- `l` to view logs + +- `d` to describe + +- `s` to get a shell (won't work if `sh` isn't available in the container image) + +- `e` to edit + +- `shift-f` to define port forwarding + +- `ctrl-k` to kill + +- `[ESC]` to get out or get back + +--- + +## Quick navigation between namespaces + +- On top of the screen, we should see shortcuts like this: + ``` + <0> all + <1> kube-system + <2> default + ``` + +- Pressing the corresponding number switches to that namespace + + (or shows resources across all namespaces with `0`) + +- Locate a namespace with a copy of DockerCoins, and go there! + +--- + +## Interacting with Deployments + +- View Deployments (type `:` `deploy` `[ENTER]`) + +- Select e.g. `worker` + +- Scale it with `s` + +- View its aggregated logs with `l` + +--- + +## Exit + +- Exit at any time with `Ctrl-C` + +- k9s will "remember" where you were + + (and go back there next time you run it) + +--- + +## Pros + +- Very convenient to navigate through resources + + (hopping from a deployment, to its pod, to another namespace, etc.) + +- Very convenient to quickly view logs of e.g. init containers + +- Very convenient to get a (quasi) realtime view of resources + + (if we use `watch kubectl get` a lot, we will probably like k9s) + +--- + +## Cons + +- Doesn't promote automation / scripting + + (if you repeat the same things over and over, there is a scripting opportunity) + +- Not all features are available + + (e.g. executing arbitrary commands in containers) + +--- + +## Conclusion + +Try it out, and see if it makes you more productive! + +??? + +:EN:- The k9s TUI +:FR:- L'interface texte k9s diff --git a/slides/kube-fullday.yml b/slides/kube-fullday.yml index 72c9f631..87ba65d0 100644 --- a/slides/kube-fullday.yml +++ b/slides/kube-fullday.yml @@ -58,6 +58,7 @@ content: #- k8s/setup-managed.md #- k8s/setup-selfhosted.md #- k8s/dashboard.md + #- k8s/k9s.md #- k8s/kubectlscale.md - k8s/scalingdockercoins.md - shared/hastyconclusions.md diff --git a/slides/kube-halfday.yml b/slides/kube-halfday.yml index 0aaea969..6f4ed3c6 100644 --- a/slides/kube-halfday.yml +++ b/slides/kube-halfday.yml @@ -58,6 +58,7 @@ content: #- k8s/accessinternal.md #- k8s/kubectlproxy.md - - k8s/dashboard.md + - k8s/k9s.md #- k8s/kubectlscale.md - k8s/scalingdockercoins.md - shared/hastyconclusions.md diff --git a/slides/kube-selfpaced.yml b/slides/kube-selfpaced.yml index 0fe9be4b..90b3d5e3 100644 --- a/slides/kube-selfpaced.yml +++ b/slides/kube-selfpaced.yml @@ -59,6 +59,7 @@ content: - k8s/setup-managed.md - k8s/setup-selfhosted.md - k8s/dashboard.md + - k8s/k9s.md #- k8s/kubectlscale.md - k8s/scalingdockercoins.md - shared/hastyconclusions.md diff --git a/slides/kube-twodays.yml b/slides/kube-twodays.yml index 638bcc26..e52f7eaf 100644 --- a/slides/kube-twodays.yml +++ b/slides/kube-twodays.yml @@ -58,6 +58,7 @@ content: #- k8s/setup-managed.md #- k8s/setup-selfhosted.md - k8s/dashboard.md + - k8s/k9s.md #- k8s/kubectlscale.md - k8s/scalingdockercoins.md - shared/hastyconclusions.md