该项目是用 Go 编写的,已经存在了一年半多:第一次提交是在 1 年 2019 月 9000 日进行的。 在撰写本文时,有 XNUMX 多颗星星
安装和启动
这是最容易作为 Docker 镜像运行的客户端(相对于 Kubernetes 集群)应用程序:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
对于某些 Linux 发行版和其他操作系统,也有即装即用的
sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf - -C /tmp/
sudo mv /tmp/k9s /usr/local/bin
K8s 集群本身没有具体要求。 从评论来看,该应用程序还适用于旧版本的 Kubernetes,例如 1.12。
该应用程序使用标准配置启动 .kube/config
- 类似于它是如何做的 kubectl
.
导航
默认情况下,将打开一个窗口,其中包含为上下文指定的默认命名空间。 也就是说,如果你写 kubectl config set-context --current --namespace=test
,然后命名空间将打开 test
. (有关更改上下文/名称空间的信息,请参见下文。)
去 命令模式 通过按“:”完成。 之后就可以通过命令控制k9s的运行——比如查看StatefulSets列表(在当前命名空间下),可以输入 :sts
.
对于其他一些 Kubernetes 资源:
-
:ns
——命名空间; -
:deploy
——部署; -
:ing
— 入口; -
:svc
- 服务。
要显示可供查看的资源类型的完整列表,有一个命令 :aliases
.
在当前窗口中通过热键组合查看可用命令列表也很方便:为此,只需单击“?”。
在k9s中也有 搜索模式, 去那里输入“/”就足够了。 使用它,对当前“窗口”的内容进行搜索。 假设您之前输入过 :ns
,您打开了一个命名空间列表。 如果它们太多,那么为了不向下滚动很长时间,在带有名称空间的窗口中输入就足够了 /mynamespace
.
要按标签搜索,您可以选择所需命名空间中的所有 pod,然后输入,例如, / -l app=whoami
. 我们将获得带有此标签的 pod 列表:
搜索适用于各种窗口,包括日志、查看 YAML 清单和 describe
有关资源 - 有关这些功能的更多详细信息,请参见下文。
整体导航流程是什么样的?
使用命令 :ctx
你可以选择一个上下文:
要选择命名空间,有已经提到的命令 :ns
, 然后您可以使用搜索来搜索所需的空间: /test
.
如果我们现在选择我们感兴趣的资源(例如,同一个 StatefulSet),则会为其显示相应的信息:有多少个 Pod 正在运行以及有关它们的简要信息。
可能只对 pod 感兴趣 - 然后输入就足够了 :pod
. 对于 ConfigMaps (:cm
- 对于这些资源的列表),你可以选择感兴趣的对象并点击“u”,之后K9s会告诉你具体是谁使用它(这个CM)。
查看资源的另一个方便的功能是他们的 “x-ray”(X 射线视图). 该模式由命令调用 :xray RESOURCE
并且......展示它是如何工作的比解释更容易。 这是 StatefulSets 的示例:
(这些资源中的每一个都可以编辑、更改、制作 describe
.)
这是使用 Ingress 的部署:
使用资源
您可以获取有关 YAML 或其中每个资源的信息 describe
通过按相应的键盘快捷键(分别为“y”和“d”)。 当然,还有更多基本操作:由于界面中方便的“标题”(按 Ctrl + e 隐藏),它们的列表和键盘快捷键始终可见。
编辑任何资源(选择后为“e”)时,将打开环境变量中定义的文本编辑器(export EDITOR=vim
).
这是资源的详细描述(describe
):
可以使用熟悉的 Ctrl + s 键盘快捷键保存此输出(或查看 YAML 资源清单的输出)。 从K9s消息中可以知道它会被保存在哪里:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!
在删除系统标签和注释后,您还可以从创建的备份文件中恢复资源。 为此,您需要与他们一起进入目录(:dir /tmp
), 然后选择所需的文件并应用 apply
.
顺便说一句,如果当前 ReplicaSet 出现问题,您可以随时回滚到之前的 ReplicaSet。 为此,选择所需的 RS (:rs
他们的名单):
... 并使用 Ctrl + l 回滚。 我们应该得到一个一切顺利的通知:
k9s/whoami-5cfbdbb469 successfully rolled back
要缩放副本,只需单击“s”(缩放)并选择所需的实例数:
您可以使用 shell 输入任何容器:为此,转到所需的 pod,单击“s”(shell)并选择容器。
其他功能
当然,也支持查看日志(“l”代表选择的资源)。 并且为了查看新日志,无需不断按 Enter:标记(“m”)就足够了,然后只跟踪新消息。
同样在同一窗口中,您可以选择日志输出的时间范围:
- 键“1” - 1分钟;
- “2”——5分钟;
- “3”——15分钟;
- “4”——30分钟;
- “5”——1 小时;
- “0”——在 pod 的整个生命周期内。
特殊操作模式脉冲(命令 :pulse
) 显示有关 Kubernetes 集群的一般信息:
在其中您可以看到资源的数量及其状态(绿色显示那些具有状态 Running
).
K9s 的另一个很酷的特性叫做 大力水手. 它会根据某些正确性标准检查所有资源,并显示带有解释的结果“评级”。 例如,您可以看到没有足够的试用或限制,并且某些容器可以以 root 身份运行...
有基本的 Helm 支持。 例如,您可以通过以下方式查看集群中部署的版本:
:helm all # все
:helm $namespace # в конкретном пространстве имен
基准
甚至内置于 K9s 中
要启用它,您需要在 pod 中启用端口转发。 为此,请选择 pod 并按 Shift + f,使用“pf”别名转到端口转发子菜单。
选择端口并按 Ctrl + b 后,基准测试本身将开始。 他的工作结果存储在 /tmp
并可供以后在 K9s 中查看。
要更改基准测试的配置,您需要创建一个文件 $HOME/.k9s/bench-<my_context>.yml
(为每个集群确定)。
注意:目录中所有 YAML 文件的扩展名很重要 .k9s
正是 .yml
(.yaml
无法正常工作)。
配置示例:
benchmarks:
defaults:
# Количество потоков
concurrency: 2
# Количество запросов
requests: 1000
containers:
# Настройки для контейнера с бенчмарком
# Контейнер определяется как namespace/pod-name:container-name
default/nginx:nginx:
concurrency: 2
requests: 10000
http:
path: /
method: POST
body:
{"foo":"bar"}
header:
Accept:
- text/html
Content-Type:
- application/json
services:
# Можно проводить бенчмарк на сервисах типа NodePort и LoadBalancer
# Синтаксис: namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
接口
通过创建文件修改资源列表列的外观 $HOME/.k9s/views.yml
. 其内容示例:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
是的,没有足够的标签列,有
按列排序是通过键盘快捷键进行的:
- Shift + n - 按名称;
- Shift + o - 按节点;
- Shift + i - 按IP;
- Shift + a - 按容器的生命周期;
- Shift + t - 按重启次数;
- Shift + r - 按准备状态;
- Shift + c - 按 CPU 消耗;
- Shift + m - 按内存消耗。
如果有人不喜欢默认的配色方案,K9s 甚至支持
插件
最后,该 kubectl get all -n $namespace
.
看起来像这样。 创建一个文件 $HOME/.k9s/plugin.yml
内容如下:
plugin:
get-all:
shortCut: g
confirm: false
description: get all
scopes:
- all
command: sh
background: false
args:
- -c
- "kubectl -n $NAMESPACE get all -o wide | less"
现在您可以转到命名空间并按“g”以执行相应的命令:
例如,在插件中有与 kubectl-jq 的集成和用于查看日志的实用程序
结论
就我的口味而言,事实证明 K9s 使用起来非常方便:你可以很快习惯于在不使用它的情况下寻找你需要的一切。 kubectl
. 我对日志的视图及其保存、资源的快速编辑、总体工作速度*感到满意,事实证明大力水手模式很有用。 特别值得一提的是创建插件和修改应用程序以满足您的需求的能力。
* 虽然,日志量很大,我也注意到K9s运行缓慢。 在这种情况下,该实用程序会“吃掉”Intel Xeon E2xx 的 312 个内核,甚至可能会死机。
目前缺少什么? 无需转到目录即可快速回滚到以前的版本(我们不是在谈论 RS)。 此外,恢复仅发生在 只 资源:如果删除注释或标签,则必须删除并恢复整个资源(这是您需要转到目录的地方)。 另一件小事 - 此类保存的“备份”没有足够的日期。
PS
另请阅读我们的博客:
- «
Kubernetes 的 GUI 概述 “; - «
Kubernetes Web View 的公告(以及 Kubernetes 的其他 Web UI 的简要概述) “; - «
kubebox 和 Kubernetes 的其他 shell “。
来源: habr.com