工欲善其事,必先利其器,K9s比单独使用
kubectl
管理K8s集群要快得多,今天我们就用一篇文章,快速将集群管理效率提升一倍。
用K9s - Kubernetes CLI管理K8s集群
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选项
# k9s help
K9s is a CLI to view and manage your Kubernetes clusters.
Usage:
k9s [flags]
k9s [command]
Available Commands:
help Help about any command
info Print configuration info
version Print version/build info
Flags:
-A, --all-namespaces Launch K9s in all namespaces
--as string Username to impersonate for the operation
--as-group stringArray Group to impersonate for the operation
--certificate-authority string Path to a cert file for the certificate authority
--client-certificate string Path to a client certificate file for TLS
--client-key string Path to a client key file for TLS
--cluster string The name of the kubeconfig cluster to use
-c, --command string Specify the default command to view when the application launches
--context string The name of the kubeconfig context to use
--demo Enable demo mode to show keyboard commands
--headless Turn K9s header off
-h, --help help for k9s
--insecure-skip-tls-verify If true, the server's caCertFile will not be checked for validity
--kubeconfig string Path to the kubeconfig file to use for CLI requests
-l, --logLevel string Specify a log level (info, warn, debug, error, fatal, panic, trace) (default "info")
-n, --namespace string If present, the namespace scope for this CLI request
--readonly Disable all commands that modify the cluster
-r, --refresh int Specify the default refresh rate as an integer (sec) (default 2)
--request-timeout string The length of time to wait before giving up on a single server request
--token string Bearer token for authentication to the API server
--user string The name of the kubeconfig user to use
Use "k9s [command] --help" for more information about a command.
k9s info:获取关于K9s运行时的信息(日志、配置等)
# k9s info
____ __.________
| |/ _/ __ \______
| < \____ / ___/
| | \ / /\___ \
|____|__ \ /____//____ >
\/ \/
Configuration: /root/.k9s/config.yml
Logs: /tmp/k9s-root.log
Screen Dumps: /tmp/k9s-screens-root
k9s version:查看K9s安装版本
# k9s version
____ __.________
| |/ _/ __ \______
| < \____ / ___/
| | \ / /\___ \
|____|__ \ /____//____ >
\/ \/
Version: 0.19.7
Commit: 46c2f31249b3b67a16659614bde179c481a547de
Date: 2020-05-23T17:18:49Z
启动命令
k9s:启动k9s
# 启动k9s
k9s
# 在给定的namespace中运行K9s
k9s -n mycoolns
# 运行K9s并通过`pod命令`在pod视图中启动
k9s -c pod
# 在非默认的KubeConfig上下文中启动K9s
k9s --context coolCtx
# 以只读模式启动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
# 提供shell pod启用自定义gate功能
shellPod:
# 要使用的Shell Pod镜像。
image: killerAdmin
# 要启动到Shell Pod的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作为自定义资源CRD Frederick的别名
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: Viewing pods
command: pods
# 点击Shift-0导航到deployments视图
shift-1:
shortCut: Shift-1
description: View deployments
command: dp
# 点击Shift-0导航到xray deployments视图
shift-2:
shortCut: Shift-2
description: XRay Deployments
command: xray deploy
同样的,后面你可以基于此方法,自定义插件对K9s进行扩展,也是通过在$HOME/.k9s
目录下,创建一个名为plugin.yml
的文件,授人以鱼不如授人以渔,这里我希望你可以参照官方文档自己动手试一试,方法都交给你了,聪明人要学会要”渔“。
Tt's important to work smarter, not harder.
推荐阅读
- 这里是K9s关于RBAC的内容。
- github上的k9s项目,非常全面,质量很高。
- 还有一篇英文的K9s入门篇Speed up administration of Kubernetes clusters with k9s,他阐明了为什么要使用K9s,K9s如何加速Kubernetes的集群管理。