|
|
|
|
移动端

K9s如何加速Kubernetes的集群管理?

K9s是一个基于终端的UI,可以与Kubernetes集群进行交互。K9s的目的是简化导航,观察和管理已部署应用程序的过程。K9s持续监视Kubernetes的变化,并提供后续命令来与所观察到的资源进行交互。

作者:臧远慧来源:51CTO|2020-07-10 09:37

【51CTO.com原创稿件】K9s是一个基于终端的UI,可以与Kubernetes集群进行交互。K9s的目的是简化导航,观察和管理已部署应用程序的过程。K9s持续监视Kubernetes的变化,并提供后续命令来与所观察到的资源进行交互。

特征

  • 跟踪Kubernetes集群中运行的资源的实时活动。
  • 处理Kubernetes标准资源和自定义资源定义。
  • 跟踪与Pod、容器和节点等资源相关的实时指标。
  • 提供标准的集群管理命令,例如log,scaling,port-forward,restart...
  • 通过别名和热键自定义命令快捷方式。
  • 支持扩展K9s插件以创建自己的集群命令。
  • 强大的过滤模式:允许用户向下钻并查看与工作负载相关的资源。
  • 误差放大:直接深入了解群集资源的问题。
  • 外观可定制
    • 通过K9s皮肤定义自己的终端外观。
    • 按资源自定义/安排要显示的列。
  • 提供查看最小或完整资源定义的切换
  • 通过Pulses和XRay视图提供群集资源的概述。
  • RBAC
    • 支持查看RBAC规则,例如群集/角色及其关联的绑定。
    • 反向查找断言用户/组或ServiceAccount可以在集群上做什么。
  • 可以直接从K9s内置的基准测试对HTTP services/pods进行基准测试,以查看应用程序的运行情况,并相应地调整资源请求/限制。
  • K9s提供方便地遍历Kubernetes资源及其相关资源。

安装

K9s可用于Linux、macOS和Windows平台,可直接参考K9s官方文档,因为非常简单这里就不再过多赘述。

命令

K9s是一个用于查看和管理Kubernetes集群的CLI。接下来我们一起学习一下它的使用方法,感受下它的便捷和强大。

帮助命令

k9s help:列出所有可用的CLI选项

  1. # k9s help 
  2. K9s is a CLI to view and manage your Kubernetes clusters. 
  3.  
  4. Usage: 
  5.   k9s [flags] 
  6.   k9s [command] 
  7.  
  8. Available Commands: 
  9.   helpHelp about any command 
  10.   infoPrint configuration info 
  11.   version Print version/build info 
  12.  
  13. Flags: 
  14.   -A, --all-namespaces Launch K9s in all namespaces 
  15.   --as string  Username to impersonate for the operation 
  16.   --as-group stringArray   Group to impersonate for the operation 
  17.   --certificate-authority string   Path to a cert file for the certificate authority 
  18.   --client-certificate string  Path to a client certificate file for TLS 
  19.   --client-key string  Path to a client key file for TLS 
  20.   --cluster string The name of the kubeconfig cluster to use 
  21.   -c, --command string Specify the default command to view when the application launches 
  22.   --context string The name of the kubeconfig context to use 
  23.   --demo   Enable demo mode to show keyboard commands 
  24.   --headless   Turn K9s header off 
  25.   -h, --help   help for k9s 
  26.   --insecure-skip-tls-verify   If true, the server's caCertFile will not be checked for validity 
  27.   --kubeconfig string  Path to the kubeconfig file to use for CLI requests 
  28.   -l, --logLevel stringSpecify a log level (info, warn, debug, error, fatal, panic, trace) (default "info") 
  29.   -n, --namespace string   If present, the namespace scope for this CLI request 
  30.   --readonly   Disable all commands that modify the cluster 
  31.   -r, --refresh intSpecify the default refresh rate as an integer (sec) (default 2) 
  32.   --request-timeout string The length of time to wait before giving up on a single server request 
  33.   --token string   Bearer token for authentication to the API server 
  34.   --user stringThe name of the kubeconfig user to use 
  35.  
  36. Use "k9s [command] --help" for more information about a command. 

k9s info:获取关于K9s运行时的信息(日志、配置等)

  1. # k9s info 
  2.  ____  __.________        
  3. |    |/ _/   __   \______ 
  4. |      < \____    /  ___/ 
  5. |    |  \   /    /\___ \  
  6. |____|__ \ /____//____  > 
  7.         \/            \/  
  8.  
  9. Configuration:   /root/.k9s/config.yml 
  10. Logs:            /tmp/k9s-root.log 
  11. Screen Dumps:    /tmp/k9s-screens-root 

k9s version:查看K9s安装版本

  1. # k9s version 
  2.  ____  __.________        
  3. |    |/ _/   __   \______ 
  4. |      < \____    /  ___/ 
  5. |    |  \   /    /\___ \  
  6. |____|__ \ /____//____  > 
  7.         \/            \/  
  8.  
  9. Version:    0.19.7 
  10. Commit:     46c2f31249b3b67a16659614bde179c481a547de 
  11. Date:       2020-05-23T17:18:49Z 

启动命令

k9s:启动k9s

  1. # 启动k9s 
  2. k9s 
  3. # 在给定的namespace中运行K9s 
  4. k9s -n mycoolns 
  5. # 运行K9s并通过`pod命令`在pod视图中启动 
  6. k9s -c pod 
  7. # 在非默认的KubeConfig上下文中启动K9s 
  8. k9s --context coolCtx 
  9. # 以只读模式启动K9s -禁用所有修改命令(delete,create等) 
  10. k9s --readonly 

快捷键

K9s使用别名来定位到大多数K8s资源。这里贴出K9S官方的按键绑定。

基本所有的东西都在这张图里了,看到了不会用怎么办?别着急,下面我还是和大家一起挨个演示一遍它的用法。

Ctrl a:显示所有可用资源的别名。

上面介绍k9s的特征时提到过,K9s为我们提供很多快捷键和别名,通过这个快捷键我们可以快速查看K8s的资源别名(缩写),帮助我们轻松资源,提高工作效率。

第一列为k8s资源名称,第二列为K9s 控制台对应的资源简称(别名),第三列为该资源所在的组。

?:显示K9s提供的命令控制台的快捷键。

Esc:返回/退出。

我们回到初始pod界面,可以看到在default名称空间下我有两个pod资源:

/:进入过滤模式

输入/custom,对当前视图下的资源进行过滤,查找名称含有custom字符串的所有pod:

::进入命令行模式

允许你输入想要查看的任何资源/资源别名。例如::deploy,:svc......

输入:ns,查看当前集群的所有namespace:

结果视图:

和k8s一样,可以查看指定命名空间的资源,例如::cm namespace,:cj namespace。

输入:cm zhangsan,看一下zhangsan名称空间下的configmap资源如下:

d y l e:分别对应于describe yaml logs edit

即查看资源的描述信息、yaml文件和日志,对资源信息进行修改,大家玩儿k8s的都很熟悉,这里细节没必要再过多展开了。

Ctrl z:快速定位资源错误信息

Ctrl d:删除选中的K8s资源,删除前提示

Ctrl k:直接删除资源,没有提示

:q Ctrl c:退出K9s

简直不要太酷了!你只需要付出很少的学习成本(K9s只要看完我整理的这一篇,在工作中就足够用了),就能大大提高工作效率,一劳永逸。

配置文件

K9s将其配置文件保存在主目录的.k9s目录中$HOME/.k9s/config.yml。我们可以通过修改该文件的字段来存储K9s当前默认启动视图和命名空间信息,下面我列出配置文件中的内容和每一项代表的含义和作用,后面可根据自己的需求对值进行修改即可。

  1. # $HOME/.k9s/config.yml 
  2. k9s: 
  3.   # #表示ui轮询间隔。默认值2secs  
  4.   refreshRate: 2 
  5.   # 设置为true以隐藏K9s标头。默认值false  
  6.   headless: false 
  7.   # 指示是否禁用诸如delete/kill/edit之类的修改命令。默认值为false  
  8.   readOnly: false 
  9.   # 切换图标显示,因为并非所有终端都支持这些字符。 
  10.   noIcons: false 
  11.  
  12.   # 日志配置 
  13.   logger: 
  14.     # 定义要返回的行数。默认100  
  15.     tail: 200 
  16.     # 定义视图中允许的日志行总数。默认值1000  
  17.     buffer: 500 
  18.     # 表示以秒为单位返回日志时间轴的距离。默认值为5分钟(秒) 
  19.     sinceSeconds: 300 
  20.     # 在显示日志时进入全屏模式。默认值false  
  21.     fullScreenLogs: false 
  22.     # 切换日志换行。默认值false  
  23.     textWrap: false 
  24.     # 切换日志行时间戳信息。默认值false  
  25.     showTime: false 
  26.  
  27.   # 指示当前的kube上下文。默认为当前上下文 
  28.   currentContext: minikube 
  29.   # 表示当前的kube集群。默认为当前上下文集群 
  30.   currentCluster: minikube 
  31.   # 根据每个集群的命名空间和视图偏好持久存储。 
  32.   clusters: 
  33.     cluster1: 
  34.       namespace: 
  35.         active: coolio 
  36.         favorites: 
  37.         - cassandra 
  38.         - default 
  39.       view
  40.         active: po 
  41.       featureGates: 
  42.         # 切换nodeshell支持。如果需要,允许K9s封装到节点中。默认为false。 
  43.         nodeShell: false 
  44.       # 提供shell pod启用自定义gate功能 
  45.       shellPod: 
  46.         # 要使用的Shell Pod镜像。 
  47.         image: killerAdmin 
  48.         # 要启动到Shell Pod的namespace。 
  49.         namespace: fred 
  50.         # 在shell容器上设置的资源限制。 
  51.         limits: 
  52.           cpu: 100m 
  53.           memory: 100Mi 
  54.       # 启动端口转发时使用的IP地址。 
  55.       portForwardAddress: 1.2.3.4 
  56.     cluster2: 
  57.       namespace: 
  58.         active: all 
  59.         favorites: 
  60.         - all 
  61.         - kube-system 
  62.         - default 
  63.       view
  64.         active: dp 

自定义命令别名

看到这里了,是时候带大家真正秀一波K9s的”骚操作“了。掌握了K9s的基本用法,我们可以定制自己的K9s命令了!下面我们接着一起定制一个。

在配置文件config.yml同级目录$HOME/.k9s下,创建一个名为alias.yml的文件:

  1. # $HOME/.k9s/alias.yml 
  2. alias: 
  3.   # 使用pp作为Pod的别名 
  4.   pp: v1/pods 
  5.  
  6.   # 使用crb作为 ClusterRoleBinding的缩写 
  7.   crb: rbac.authorization.k8s.io/v1/clusterrolebindings 
  8.  
  9.   # 使用cr作为ClusterRole的简称 
  10.   cr: rbac.authorization.k8s.io/v1/clusterroles 
  11.  
  12.   # 使用dep作为Deployments的别名  
  13.   dep: apps/v1/deployments 
  14.  
  15.   # 使用fred作为自定义资源CRD Frederick的别名 
  16.   fred: acme.io/v1alpha1/fredericks 

别名/简称/缩写是相同的意思,这里只是为了便于大家理解。

自定义快捷键

进入命令模式并输入资源名称或别名对于浏览经常访问的资源可能很麻烦。通过利用hotkeys,可以将K9s配置为快速导航到我们的K8s资源。

同样的,这里我们也可以在$HOME/.k9s目录下创建一个名为/hotkey.yml的文件,来定制我们自己的快捷键:

  1. # $HOME/.k9s/hotkey.yml 
  2. hotKey: 
  3.  
  4.   # 点击Shift-0导航到pod视图 
  5.   shift-0: 
  6.     shortCut:    Shift-0 
  7.     description: Viewing pods 
  8.     command:     pods 
  9.  
  10.   # 点击Shift-0导航到deployments视图  
  11.   shift-1: 
  12.     shortCut:    Shift-1 
  13.     description: View deployments 
  14.     command:     dp 
  15.  
  16.   # 点击Shift-0导航到xray deployments视图   
  17.   shift-2: 
  18.     shortCut:    Shift-2 
  19.     description: XRay Deployments 
  20.     command:     xray deploy 

同样的,后面你可以基于此方法,自定义插件对K9s进行扩展,也是通过在$HOME/.k9s目录下,创建一个名为plugin.yml的文件,授人以鱼不如授人以渔,这里我希望你可以参照官方文档自己动手试一试,方法都交给你了,聪明人要学会要”渔“。

Tt's important to work smarter, not harder.

作者:臧远慧

简介:就职于中科星图股份有限公司(北京),研发部后端技术组。个人擅长 Python/Java 开发,了解前端基础;熟练掌握 MySQL,MongoDB,了解 Redis;熟悉 Linux 开发环境,掌握 Shell 编程,有良好的 Git 源码管理习惯;精通 Nginx ,Flask、Swagger 开发框架;有 Docker+Kubernetes 云服务开发经验。对人工智能、云原生技术有较大的兴趣。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

【编辑推荐】

  1. 如何防止不需要的模块加载以保护Kubernetes集群?
  2. 解决Kubernetes Pod故障的5个简单技巧
  3. Kubernetes中的不足也是好事
  4. 用于监视 Kubernetes 和 Docker 的六大开源工具
  5. 使用Lens管理Kubernetes集群
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

大数据安全运维实战

大数据安全运维实战

CDH+Ambari
共20章 | 大数据陈浩

86人订阅学习

实操案例:Jenkins持续交付和持续部署

实操案例:Jenkins持续交付和持续部署

微服务架构下的自动化部署
共18章 | freshman411

174人订阅学习

思科交换网络安全指南

思科交换网络安全指南

安全才能无忧
共5章 | 思科小牛

105人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微