k9s入门及实战
概述官网是用于管理k8s集群的开源GitHub34.3K Star2.2K ForkCLI提供一个终端UI来与k8s集群进行交互。通过封装kubectl功能k9s会以特定时间间隔监控k8s的变化默认为2秒并提供后续命令来与k8s资源进行交互k9s可让开发者快速查看并解决运行k8s时的日常问题。k9s操作逻辑基于Vim。功能特性跟踪在k8s集群运行的资源的实时活动处理k8s标准资源和自定义资源跟踪与资源相关联的实时指标如pods、容器和节点支持定制外观、皮肤支持多资源视图支持查看RBAC规则支持遍历k8s资源及其相关资源支持插件扩展k9s来创建个性化的集群操作管理命令强大的过滤模式允许用户向下钻取并查看与工作负载相关的资源安装k9s采用Go语言开发支持LinuxmacOS和Windows平台。Macbrew install derailed/k9s/k9sLinuxpacman -S k9sBuildgitclone https://github.com/derailed/k9s.gitmakebuild./execs/k9sDocker# 指定k8s的配置文件路径$dockerrun--rm-it-v$KUBECONFIG:/root/.kube/config derailed/k9s# k8s配置文件的默认路径$dockerrun--rm-it-v~/.kube/config:/root/.kube/config derailed/k9s和kubectl一样默认使用环境变量KUBECONFIG指定的k9s配置支持指定kubeconfig k9s --kubeconfigxx。命令行命令行按照个人理解可分为两类一类是不进入交互式终端UI的比如k9shelpk9s info k9s info logs k9s info configsk9s info输出Version: v0.32.5 Config: /root/.config/k9s/config.yaml Custom Views: /root/.config/k9s/views.yaml Plugins: /root/.config/k9s/plugins.yaml Hotkeys: /root/.config/k9s/hotkeys.yaml Aliases: /root/.config/k9s/aliases.yaml Skins: /root/.config/k9s/skins Context Configs: /root/.local/share/k9s/clusters Logs: /root/.local/state/k9s/k9s.log Benchmarks: /root/.local/state/k9s/benchmarks ScreenDumps: /root/.local/state/k9s/screen-dumps另一类是进入交互式终端的用得较少最后还是会变成终端UI方式k9s-nobserve# 以只读模式启动k9s禁用所有修改命令k9s--readonly# 进入k9s的调试模式k9s-ldebug基本使用输入k9s命令进入终端UI快捷键enter进入执行等多种含义和用途esc退出:ctx选择k8s集群即上面截图左上角最上面的Context点击enter键进入到Pods页:pod类似于k8s命令行下pod等同于pods输入:pods也能进入Pods页其他资源类似不再赘述:deploy进入Deployments终端页k9s内置命令补全输入:de后按Tab即可自动补全其他资源类似:svc进入Services终端页:statefulset进入Statefulsets终端页y选中某个Pod、Deployment、Service、DaemonSet后y可查看该资源的YAML描述文件d同上选择某个资源后d可查看该资源的详细信息类似于kubectl describe命令e进入Vim来修改资源的Yaml定义退出命令则是Vim的:q或:wq等几乎所有资源类型都能进行编辑。如果修改后的语法不正确k9s会提示修改失败修改不会生效l即log在任何资源页都可使用该命令顶多是没有日志输出。在查看容器日志时按0代表查看日志的尾部即最新日志按w代表日志自动换行。s在Deployments页面s表示Scale触发修改副本数操作即Replicas在Pods页面s表示Shell会进入到容器的Shell命令行输入exit或ctrl-d退出注意ctrl-c并不能退出容器如果一个Pod包含多个Container则会进入Container界面让你选择要进入的Container数字如上截图所示在任何一个终端页输入数字则仅展示该数字对应的命名空间下的资源:ns切换命名空间/filter如果指定命名空间后Pod还是太多可类似于Vim编辑器里输入/进行过滤可过滤命名空间、资源名称和状态/!filter逆过滤器去除所有匹配的资源。不支持日志过滤/-f filter模糊匹配过滤j等同于方向键↓向下移到被选择的资源k等同于方向键↑向上移到被选择的资源p查看之前的Container的日志这个功能貌似没啥用Container重启后日志丢失看不到日志ctrl-d删除某个资源有弹窗二次确认选择OK后执行删除触发自动重启ctrl-k删除某个Pod没有二次弹窗确认自动触发重启:rb进入Rolebindings角色绑定视图用于基于角色的访问控制(RBAC)管理:cj跳转到Cronjobs视图查看集群中的计划作业:q退出k9sctrl-c退出k9s总结充分利用Tab补全PortForward别名编辑/root/.config/k9s/aliases.yaml文件aliases:dp:deploymentssec:v1/secretsjo:jobscr:clusterrolescrb:clusterrolebindingsro:rolesrb:rolebindingsnp:networkpolicies热键允许用户定义自己的热键来激活他们最喜欢的资源视图。编辑/root/.config/k9s/hotkeys.yaml文件hotKey:# Hitting Shift-0 navigates to your pod viewshift-0:shortCut:Shift-0description:Viewing podscommand:pods# Hitting Shift-1 navigates to your deploymentsshift-1:shortCut:Shift-1description:View deploymentscommand:dp进阶配置文件编辑/root/.config/k9s/config.yaml文件k9s:liveViewAutoRefresh:falsescreenDumpDir:/root/.local/state/k9s/screen-dumpsrefreshRate:2# Set to true to hide K9s header. Default falseheadless:false# Toggles icons display as not all terminal support these chars.noIcons:falsemaxConnRetry:5readOnly:falsenoExitOnCtrlC:falseui:enableMouse:falseheadless:falselogoless:falsecrumbsless:falsereactive:falsenoIcons:falsedefaultsToFullScreen:falseskipLatestRevCheck:falsedisablePodCounting:falseshellPod:image:busybox:1.35.0namespace:defaultlimits:cpu:100mmemory:100MiimageScans:enable:falseexclusions:namespaces:[]labels:{}logger:tail:100buffer:5000sinceSeconds:-1textWrap:false# Go full screen while displaying logs. Default falsefullScreenLogs:falseshowTime:falsethresholds:cpu:critical:90warn:70memory:critical:90warn:70皮肤可根据自己的外观和风格来配置k9s放在/root/.config/k9s/skins目录下# Skin InTheNavy...k9s:# General K9s stylesbody:fgColor:dodgerbluebgColor:#fffffflogoColor:#0000ff# ClusterInfoView styles.info:fgColor:lightskybluesectionColor:steelblue# Help panel styleshelp:fgColor:whitebgColor:blackkeyColor:cyannumKeyColor:bluesectionColor:grayframe:# Borders styles.border:fgColor:dodgerbluefocusColor:aliceblue# MenuView attributes and styles.menu:fgColor:darkbluekeyColor:cornflowerblue# Used for favorite namespacesnumKeyColor:cadetblue# CrumbView attributes for history navigation.crumbs:fgColor:whitebgColor:steelblueactiveColor:skyblue# Resource status and update stylesstatus:newColor:#00ff00modifyColor:powderblueaddColor:lightskyblueerrorColor:indianredhighlightcolor:royalbluekillColor:slategraycompletedColor:gray# Border title styles.title:fgColor:aquabgColor:whitehighlightColor:skybluecounterColor:slatebluefilterColor:slategrayviews:# TableView attributes.table:fgColor:bluebgColor:darkbluecursorColor:aqua# Header row styles.header:fgColor:whitebgColor:darkbluesorterColor:orange# YAML info styles.yaml:keyColor:steelbluecolonColor:bluevalueColor:royalblue# Logs styles.logs:fgColor:whitebgColor:black插件k9s允许您通过插件定义集群命令来扩展您的命令行和工具。# k9s目前提供额外的环境变量来自定义您的插件参数可用的环境变量如下$RESOURCE_GROUP--选定的资源组 $RESOURCE_VERSION--选择的资源api版本 $RESOURCE_NAME--选择的资源名称 $NAMESPACE--选择的资源命名空间 $NAME--选择的资源名称 $CONTAINER--当前容器如果适用 $FILTER--当前过滤器如果有 $KUBECONFIG--KubeConfig 位置。 $CLUSTER--活动集群名称 $CONTEXT--活动上下文名称 $USER--活跃用户 $GROUPS--活跃的群体 $POD--在容器视图中 $COL-RESOURCE_COLUMN_NAME--为查看的资源使用给定的列名。 必须以 COL-!# 例如, 此处定义一个插件实现 ctrl-l 快捷方式来在 pod 视图中跟踪日志。# /root/.config/k9s/views.yamlplugin:fred:shortCut:Ctrl-Lconfirm:falsedescription:Pod logsscopes:-podscommand:kubectlbackground:falseargs:-logs--f-$NAME--n-$NAMESPACE---context-$CONTEXT视图编辑/root/.config/k9s/views.yaml文件自定义资源的显示列和先后顺序k9s:views:v1/pods:columns:-AGE-NAMESPACE-NAME-IP-NODE-STATUS-READYv1/services:columns:-AGE-NAMESPACE-NAME-TYPE-CLUSTER-IPnodeShell通过在给定集群上启用nodeShell功能门k9s允许您在集群节点中进行shellk9s:clusters:# Configures node shell on cluster bleeblee:featureGates:# You must enable the nodeShell feature gate to enable shelling into nodesnodeShell:true# You can also further tune the shell pod specificationshellPod:image:demo-demo:01namespace:test-namespacelimits:cpu:100mmemory:100MiXRayPulses集群事务状态的顶级仪表板。RBAC查看您的集群上的授权的用户、方式等。问题资源占用收到Prometheus告警邮件内存紧张试图执行如下几个命令# 清除PageCache页面缓存echo1/proc/sys/vm/drop_caches# 清除dentries和inodes目录项和索引节点缓存echo2/proc/sys/vm/drop_caches# 清除PageCache、dentries和inodesecho3/proc/sys/vm/drop_caches通过free -h命令查看free那一列数值确实稍微有所提升可是不过几分钟后再次告警还是内存不足。此时才使用top命令查看到底是哪些资源在占用内存上面截图是在执行两个kill -9 pid命令后的截图忘记第一时间保留现场不难发现几个问题k9s命令出现数量过多k9s命令运行时间长达617小时有个k9s命令占用CPU 100%有几个k9s命令占用内存100%截图无法体现通过多次执行kill -9 pid后再使用free -h命令发现内存得到释放不再告警。