K9s是一个基于终端的UI,可以与Kubernetes集群进行交互。K9s的目的是简化导航,观察和管理已部署应用程序的过程。K9s持续监视Kubernetes的变化,并提供后续命令来与所观察到的资源进行交互。
【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选项
- #k9shelp
- K9sisaCLItoviewandmanageyourKubernetesclusters.
- Usage:
- k9s[flags]
- k9s[command]
- AvailableCommands:
- helpHelpaboutanycommand
- infoPrintconfigurationinfo
- versionPrintversion/buildinfo
- Flags:
- -A,--all-namespacesLaunchK9sinallnamespaces
- --asstringUsernametoimpersonatefortheoperation
- --as-groupstringArrayGrouptoimpersonatefortheoperation
- --certificate-authoritystringPathtoacertfileforthecertificateauthority
- --client-certificatestringPathtoaclientcertificatefileforTLS
- --client-keystringPathtoaclientkeyfileforTLS
- --clusterstringThenameofthekubeconfigclustertouse
- -c,--commandstringSpecifythedefaultcommandtoviewwhentheapplicationlaunches
- --contextstringThenameofthekubeconfigcontexttouse
- --demoEnabledemomodetoshowkeyboardcommands
- --headlessTurnK9sheaderoff
- -h,--helphelpfork9s
- --insecure-skip-tls-verifyIftrue,theserver'scaCertFilewillnotbecheckedforvalidity
- --kubeconfigstringPathtothekubeconfigfiletouseforCLIrequests
- -l,--logLevelstringSpecifyaloglevel(info,warn,debug,error,fatal,panic,trace)(default"info")
- -n,--namespacestringIfpresent,thenamespacescopeforthisCLIrequest
- --readonlyDisableallcommandsthatmodifythecluster
- -r,--refreshintSpecifythedefaultrefreshrateasaninteger(sec)(default2)
- --request-timeoutstringThelengthoftimetowaitbeforegivinguponasingleserverrequest
- --tokenstringBearertokenforauthenticationtotheAPIserver
- --userstringThenameofthekubeconfigusertouse
- Use"k9s[command]--help"formoreinformationaboutacommand.
k9s info:获取关于K9s运行时的信息(日志、配置等)
- #k9sinfo
- ______.________
- ||/_/__\______
- |<\____/___/
- ||\//\___\
- |____|__\/____//____>
- \/\/
- Configuration:/root/.k9s/config.yml
- Logs:/tmp/k9s-root.log
- ScreenDumps:/tmp/k9s-screens-root
k9s version:查看K9s安装版本
- #k9sversion
- ______.________
- ||/_/__\______
- |<\____/___/
- ||\//\___\
- |____|__\/____//____>
- \/\/
- Version:0.19.7
- Commit:46c2f31249b3b67a16659614bde179c481a547de
- Date:2020-05-23T17:18:49Z
启动命令
k9s:启动k9s
- #启动k9s
- k9s
- #在给定的namespace中运行K9s
- k9s-nmycoolns
- #运行K9s并通过`pod命令`在pod视图中启动
- k9s-cpod
- #在非默认的KubeConfig上下文中启动K9s
- k9s--contextcoolCtx
- #以只读模式启动K9s-禁用所有修改命令(delete,create等)
- 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当前默认启动视图和命名空间信息,下面我列出配置文件中的内容和每一项代表的含义和作用,后面可根据自己的需求对值进行修改即可。
- #$HOME/.k9s/config.yml
- k9s:
- ##表示ui轮询间隔。默认值2secs
- refreshRate:2
- #设置为true以隐藏K9s标头。默认值false
- headless:false
- #指示是否禁用诸如delete/kill/edit之类的修改命令。默认值为false
- readOnly:false
- #切换图标显示,因为并非所有终端都支持这些字符。
- noIcons:false
- #日志配置
- logger:
- #定义要返回的行数。默认100
- tail:200
- #定义视图中允许的日志行总数。默认值1000
- buffer:500
- #表示以秒为单位返回日志时间轴的距离。默认值为5分钟(秒)
- sinceSeconds:300
- #在显示日志时进入全屏模式。默认值false
- fullScreenLogs:false
- #切换日志换行。默认值false
- textWrap:false
- #切换日志行时间戳信息。默认值false
- showTime:false
- #指示当前的kube上下文。默认为当前上下文
- currentContext:minikube
- #表示当前的kube集群。默认为当前上下文集群
- currentCluster:minikube
- #根据每个集群的命名空间和视图偏好持久存储。
- clusters:
- cluster1:
- namespace:
- active:coolio
- favorites:
- -cassandra
- -default
- view:
- active:po
- featureGates:
- #切换nodeshell支持。如果需要,允许K9s封装到节点中。默认为false。
- nodeShell:false
- #提供shellpod启用自定义gate功能
- shellPod:
- #要使用的ShellPod镜像。
- image:killerAdmin
- #要启动到ShellPod的namespace。
- namespace:fred
- #在shell容器上设置的资源限制。
- limits:
- cpu:100m
- memory:100Mi
- #启动端口转发时使用的IP地址。
- portForwardAddress:1.2.3.4
- cluster2:
- namespace:
- active:all
- favorites:
- -all
- -kube-system
- -default
- view:
- active:dp
自定义命令别名
看到这里了,是时候带大家真正秀一波K9s的”骚操作“了。掌握了K9s的基本用法,我们可以定制自己的K9s命令了!下面我们接着一起定制一个。
在配置文件config.yml同级目录$HOME/.k9s下,创建一个名为alias.yml的文件:
- #$HOME/.k9s/alias.yml
- alias:
- #使用pp作为Pod的别名
- pp:v1/pods
- #使用crb作为ClusterRoleBinding的缩写
- crb:rbac.authorization.k8s.io/v1/clusterrolebindings
- #使用cr作为ClusterRole的简称
- cr:rbac.authorization.k8s.io/v1/clusterroles
- #使用dep作为Deployments的别名
- dep:apps/v1/deployments
- #使用fred作为自定义资源CRDFrederick的别名
- fred:acme.io/v1alpha1/fredericks
别名/简称/缩写是相同的意思,这里只是为了便于大家理解。
自定义快捷键
进入命令模式并输入资源名称或别名对于浏览经常访问的资源可能很麻烦。通过利用hotkeys,可以将K9s配置为快速导航到我们的K8s资源。
同样的,这里我们也可以在$HOME/.k9s目录下创建一个名为/hotkey.yml的文件,来定制我们自己的快捷键:
- #$HOME/.k9s/hotkey.yml
- hotKey:
- #点击Shift-0导航到pod视图
- shift-0:
- shortCut:Shift-0
- description:Viewingpods
- command:pods
- #点击Shift-0导航到deployments视图
- shift-1:
- shortCut:Shift-1
- description:Viewdeployments
- command:dp
- #点击Shift-0导航到xraydeployments视图
- shift-2:
- shortCut:Shift-2
- description:XRayDeployments
- command:xraydeploy
同样的,后面你可以基于此方法,自定义插件对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】