K9s提供了一个用于与Kubernetes集群交互的终端用户界面。这个开源项目的目标是使在K8s中轻松导航,监视和管理应用程序成为可能。K9s持续监视Kubernetes的变化,并提供快速命令以使用受监视的资源。
该项目是用Go编写的,已经存在一年半了:第一次提交于2019年2月1日进行。在撰写本文时,GitHub上有9000多颗星,约有80位贡献者。让我们看看k9s可以做什么?
安装和启动
这是一个客户端应用程序(相对于Kubernetes集群),最容易作为Docker映像运行:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
对于某些Linux发行版和其他操作系统,也有准备安装的软件包。通常,对于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
。
要搜索标签,可以在正确的名称空间中选择所有窗格,然后输入
/ -l app=whoami
。我们将获得带有以下标签的豆荚列表:
搜索可在所有类型的窗口中运行,包括日志,查看YAML清单和
describe
资源-请参阅以下有关这些功能的详细信息。
整体导航顺序是什么?
使用命令
:ctx
,您可以选择Context:
要选择namespace'a,已经提到了team
:ns
,然后可以搜索所需的空间:/test
。
如果现在选择我们感兴趣的资源(例如,相同的StatefulSet),则将为它显示相应的信息:正在运行多少个Pod,以及有关它们的简要信息。
只有Pod可以很有趣-然后输入
:pod
。如果是ConfigMaps(:cm
-有关这些资源的列表),您可以选择感兴趣的对象并单击“ u”,然后K9s会告诉您确切的使用对象(此CM)。
查看资源的另一个方便功能是XRay视图。这种模式由命令调用,
: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
。
顺便说一句,如果当前的副本集存在问题,您可以随时回滚到以前的副本集。为此,请选择所需的RS(
:rs
作为其列表):
...并使用Ctrl + l回滚。我们应该收到一条通知,说一切进展顺利:
k9s/whoami-5cfbdbb469 successfully rolled back
要缩放副本,只需单击“ s”(缩放)并选择所需的实例数:
您可以使用外壳输入任何容器:为此,转到所需的容器,单击“ s”(外壳)并选择容器...
其他可能性
当然,还支持查看日志(所选资源为“ l”)。而且,要观看新日志,无需不断按Enter键:标记(“ m”),然后仅跟踪新消息就足够了。
同样在同一窗口中,您可以选择显示日志的时间范围:
- 键“ 1”-1分钟内;
- “ 2”-5分钟;
- “ 3”-15分钟;
- “ 4”-30分钟;
- “ 5”-1小时;
- “ 0”-在广告连播的整个生命周期中。
特殊的Pulse操作模式(命令
:pulse
)显示了有关Kubernetes集群的一般信息:
您可以看到资源的数量及其状态(状态为绿色的资源
Running
)。
K9s的另一个很酷的功能是Popeye。它检查所有资源的某些正确性标准,并显示产生的“等级”和解释。例如,您可以看到没有足够的探测或限制,并且某些容器可以root身份运行...
基本的Helm支持。例如,这是您如何查看集群中部署的版本:
:helm all #
:helm $namespace #
基准测试
即使哎被内置到K9s -这是一个简单的HTTP服务器的负载生成器中,另一种比较著名的AB(ApacheBench)。
要启用它,您需要在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甚至支持skins。此处提供了可用的示例(7件)。这是其中一种(在海军中)皮肤的示例:
外挂程式
最后,插件使您可以扩展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
。我对查看日志及其保存,快速编辑资源,总体上的工作速度感到满意,* Popeye模式非常有用。另外要提到的是创建插件和修改应用程序以满足您的需求的能力。
*尽管日志量很大,但我也注意到K9s的工作缓慢。此时,实用程序“吞噬”了英特尔至强E312xx的2个内核,甚至可能冻结。
目前缺少什么?快速回滚到以前的版本(与RS无关)而无需转到目录。此外,恢复仅适用于所有情况。资源:如果删除了注释或标签,则必须删除并还原整个资源(在这里您需要转到目录)。另一个琐事是,没有足够的日期来保存这样的“备份”。
聚苯乙烯
另请参阅我们的博客: