k9s概述-Kubernetes的高级终端界面





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无关)而无需转到目录。此外,恢复仅适用于所有情况。资源:如果删除了注释或标签,则必须删除并还原整个资源(在这里您需要转到目录)。另一个琐事是,没有足够的日期来保存这样的“备份”。



聚苯乙烯



另请参阅我们的博客:






All Articles