k9s入门及实战
概述
k9s,GitHub,是用于管理k8s集群的CLI,提供一个终端UI来与k8s集群进行交互。通过封装kubectl功能,k9s会以特定时间间隔监控k8s的变化,默认为2秒,并提供后续命令来与k8s资源进行交互,k9s可让开发者快速查看并解决运行k8s时的日常问题。k9s操作逻辑基于Vim。
功能特性:
- 跟踪在k8s集群运行的资源的实时活动
- 处理k8s标准资源和自定义资源
- 跟踪与资源相关联的实时指标,如pods、容器和节点
- 支持定制外观、皮肤
- 支持多资源视图
- 支持查看RBAC规则
- 支持遍历k8s资源及其相关资源
- 支持插件扩展k9s来创建个性化的集群操作管理命令
- 强大的过滤模式,允许用户向下钻取并查看与工作负载相关的资源
安装
k9s采用Go语言开发,支持Linux,macOS和Windows平台。
Mac:brew install derailed/k9s/k9s
Linux:pacman -S k9s
Build:
git clone https://github.com/derailed/k9s.git
make build && ./execs/k9s
Docker:
# 指定k8s的配置文件路径
$ docker run --rm -it -v $KUBECONFIG:/root/.kube/config derailed/k9s
# k8s配置文件的默认路径
$ docker run --rm -it -v ~/.kube/config:/root/.kube/config derailed/k9s
和kubectl一样,默认使用环境变量KUBECONFIG指定的k9s配置,支持指定:kubeconfig k9s --kubeconfig=xx。
命令行
命令行,按照个人理解,可分为两类,一类是不进入交互式终端UI的,比如:
k9s help
k9s info
k9s info logs
k9s info configs
k9s 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 -n observe
# 以只读模式启动k9s,禁用所有修改命令
k9s --readonly
# 进入k9s的调试模式
k9s -l debug
基本使用
输入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:退出k9s;ctrl-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: '#ffffff'logoColor: '#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: '#00ff00'modifyColor: 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.yaml
plugin: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-IP
nodeShell
通过在给定集群上启用nodeShell功能门,k9s允许您在集群节点中进行shell:
k9s: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: 100Mi
XRay
Pulses
集群事务状态的顶级仪表板。
RBAC
查看您的集群上的授权的用户、方式等。
相关文章:
k9s入门及实战
概述 k9s,GitHub,是用于管理k8s集群的CLI,提供一个终端UI来与k8s集群进行交互。通过封装kubectl功能,k9s会以特定时间间隔监控k8s的变化,默认为2秒,并提供后续命令来与k8s资源进行交互,k9s可让…...
嵌入式硬件篇---手柄控制控制麦克纳姆轮子
文章目录 前言1. 变量定义2. 摇杆死区设置3. 模式检查4. 摇杆数据处理4.1 右摇杆垂直值(psx_buf[7])4.2 右摇杆水平值(psx_buf[8])4.3 左摇杆水平值(psx_buf[5])4.4 左摇杆垂直值(psx_buf[6]&am…...
redis增加ip白名单
Redis增加IP白名单 随着互联网的快速发展,网络安全问题也日益凸显。为了保护服务器安全,我们常常需要对访问服务器的IP地址进行限制。而Redis作为一种高性能的缓存数据库,可以用来实现IP白名单功能。本文将介绍如何使用Redis来增加IP白名单&…...
git commit messege 模板设置 (规范化管理git)
配置方法 git config --global core.editor vim (设置 Git 的默认编辑器为 Vim)在用户根目录下(~),创建一个.git_commit_msg文件,然后把下面的内容拷贝到文件中并保存。 [version][模块][类型]{解决xxx问题…...
Franka机器人ROS 2 发布:赋能机器人研究和行业应用
Franka机器人 ROS 2 发布:赋能机器人研究和行业应用 Franka ROS 2 发布:赋能机器人研究和行业应用 由zlem Odeh 于Franka Robotics 发布 在机器人操作系统 (ROS) 等技术和生态系统的推动下,机器人世界正以前所未有的速度发展。ROS 2 是广受…...
docker部署jenkins,安装使用一条龙教程
Jenkins k8s 实现CI/CD 一、简介 1. JenKins是什么? Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 2. 什么是CI / CD…...
短视频下载去水印,用什么工具好?
去除视频和图片水印是许多用户的需求,尤其是在分享或保存内容时。以下是6款超好用的工具,帮助你轻松去除水印,享受纯净的视觉体验: 1. 易下载去水印小程序 特点: 操作简单,支持抖音、快手、小红书、哔哩哔哩…...
达梦数据库中插入导出图片的方法与应用
达梦数据库中插入导出图片的方法与应用 在数据库的实际应用场景中,图片存储是一项常见且重要的需求。以电商平台为例,商品展示图片是吸引消费者的关键元素;而在社交软件里,用户头像更是个人形象的直观体现。针对达梦数据库&#…...
推理大模型时代,TextIn ParseX助力出版业知识资产重构
在大语言模型(LLM)与推理能力快速进化的技术浪潮下,出版机构沉淀数十年的非结构化数据资产,包括书籍、期刊、手稿及历史档案,正在焕发新的机遇。基于文档解析、NLP与大模型的推理生成能力,我们在图书馆层层…...
怎么删除百度搜索下拉框里的搜索引导词
搜索引擎已成为我们获取信息的主要渠道之一。百度,作为中国最大的搜索引擎,其下拉框中的搜索引导词(也称联想词或推荐词)不仅提升了搜索效率,还常常反映了用户的搜索习惯和热门话题。然而,当这些下拉词包含…...
网络爬虫-1:发送请求+维持会话+代理设置/超时设置
1.基于get发送请求 2.基于post发送请求 3.维持会话 4.代理设置/超时设置 一.基于get发送请求 1.获取网页源码1 使用json库中的json.loads(),将json格式的字符串变为Python的字典形式 以下通过http://httpbin.org/get网址进行基本练习操作 import requests import json urlh…...
GPU加速的国密SM2算法实现
目录 GPU加速的国密SM2算法实现一、前言二、国密SM2算法概述2.1 国密SM2算法背景2.2 SM2的数学基础2.3 SM2数字签名流程三、GPU加速在SM2算法中的应用3.1 高性能运算需求3.2 GPU加速优势3.3 加速实现思路四、基于Python的SM2算法实现与GPU加速4.1 算法模块设计4.2 主要数学公式…...
Redis 2025/3/9
Redis主从集群 搭建主从集群 Redis并发能力非常强,单节点能够达到数万的并发。 不过对一些用户规模大,并发量比较高的应用来讲,数万并发不太够。这时候就用到redis的集群了。因为Redis中的数据通常读多写少,所以最常用的集群方…...
2min搞定~Mac Pro 编译安装 Nginx 1.8.1
2min搞定~Mac Pro 编译安装 Nginx 1.8.1 一安装流程简述1、编译源码前,获取要依赖的源码包2、进行编译、安装nginx3、启动 二、实战部分:测试demo1、nginx.conf改动2、代码改动3、访问 一安装流程简述 阿哟啊哟老铁,别嫌我啰嗦奥…...
要在Unreal Engine 5(UE5)中实现角色打击怪物并让怪物做出受击反应,
UE5系列文章目录 文章目录 UE5系列文章目录前言一、实现思路二、最终效果 前言 ue5角色受击没有播放受击动画,主角达到怪物身上没有反应 一、实现思路 要在Unreal Engine 5(UE5)中实现角色打击怪物并让怪物做出受击反应,你需要…...
C++蓝桥杯基础篇(十一)
片头 嗨~小伙伴们,大家好!今天我们来学习C蓝桥杯基础篇(十一),学习类,结构体,指针相关知识,准备好了吗?咱们开始咯~ 一、类与结构体 类的定义:在C中&#x…...
【贪心算法4】
力扣452.用最少数量的剪引爆气球 链接: link 思路 这道题的第一想法就是如果气球重叠得越多那么用箭越少,所以先将气球按照开始坐标从小到大排序,遇到有重叠的气球,在重叠区域右边界最小值之前的区域一定需要一支箭,这道题有两…...
Leetcode 698-划分为k个相等的子集
给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。 示例 1: 输入: nums [4, 3, 2, 3, 5, 2, 1], k 4 输出: True 说明: 有可能将其分成 4 个子集&#…...
Word 小黑第2套
对应大猫42 Word1 从文件中导入新样式 样式组 -管理样式 -导入导出 -关闭Normal文件 -打开文件 -修改文件 -选中所需 -复制 调整字符宽度 调整字符间距 -字体组 加宽 适当修改磅值 文字效果通过文字组修改 另起一页,分隔符(布局 -分隔符 -分节符 -下一…...
【最后203篇系列】014 AI机器人-1
说明 终于开张了,我觉得AI机器人是一件真正正确,具有商业价值的事。 把AI机器人当成一笔生意,我如何做好这笔生意?一端是业务价值,另一端是技术支撑。如何构造高质量的内容和服务,如何确保技术的广度和深度…...
沉浸式CSS学习路径
好的!我将以魔法学院成长故事为框架,为您设计一套沉浸式CSS学习路径。以下是叙事化学习提纲: 第一卷:像素学徒的觉醒 章节1:被封印的魔法书 发现HTML的"素颜"本质,通过<!DOCTYPE html>解除网页封印用style标签打开CSS魔法书,学会给文字穿上color斗篷和…...
ctfshow做题笔记—栈溢出—pwn69~pwn72
目录 前言 一、pwn69(可以尝试用ORW读flag flag文件位置为/ctfshow_flag) 二、pwn70(可以开始你的个人秀了 flag文件位置为/flag) 三、pwn71(32位的ret2syscall) 四、pwn72 前言 学了一些新的东西,pwn69的文档忘保存了(悲),…...
重要!!! 改进 梯度方差(Fisher 信息近似) 指数移动平均
改进 梯度方差(Fisher 信息近似) 指数移动平均 目录 改进 梯度方差(Fisher 信息近似) 指数移动平均1. 指数移动平均(Exponential Moving Average, EMA)2. 引入正则化项3. 分簇加权计算一、指数移动平均(EMA)概述二、EMA 公式参数作用三、举例说明场景 1:股票价格波动分…...
同盾v2 2025版 blackbox , wasm加解密,逆向协议算法生成,小盾安全
声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! # 欢迎交流 wjxch1004...
c++领域展开第十六幕——STL(vector容器的了解以及模拟实现、迭代器失效问题)超详细!!!!
文章目录 前言一、vector的介绍和使用1.1 vector的介绍1.2 vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector的空间增长问题1.2.4 vector的增删改查 二、vector在 oj 中的使用只出现一次的数删除有序数组中的重复项杨辉三角 总结 前言 在c专栏的上一篇…...
ubuntu2404 安装 过程中 手动设置网络
ubuntu2404 安装 过程中 手动设置网络 https://blog.csdn.net/2401_83947353/article/details/138454379 6.1 可以直接Done(不配置P) 6.2 可以配置ip地址,选择manual 6.2.1 search domains填 6.2.2 search domains不填 6.3 更深层次的…...
去北京的前端实习经历
趁现在对这部分还有深刻的感受记忆,赶紧记录下来。因为工作久了会发现真的对以前的事记不起来了。 公司: 北京的实习公司首先有学长学姐在,而且这个公司知名度还挺高的,但是工资比较低,3k左右吧,但是管2顿…...
QT创建项目(项目模板、构建系统、选择类、构建套件)
1. 项目模版 项目类型界面技术适用场景核心依赖模块开发语言Qt Widget ApplicationC Widgets传统桌面应用(复杂控件)Qt WidgetsCQt Console Application无 GUI命令行工具、服务Qt CoreCQt Quick ApplicationQML/Quick现代跨平台应用(动画/触…...
力扣热题 100:动态规划专题经典题解析
系列文章目录 力扣热题 100:哈希专题三道题详细解析(JAVA) 力扣热题 100:双指针专题四道题详细解析(JAVA) 力扣热题 100:滑动窗口专题两道题详细解析(JAVA) 力扣热题 100:子串专题三道题详细解析(JAVA) 力…...
变量赋值汇编
一、核心概念 寄存器:CPU内部的高速存储单元(如EAX、EBX、x86中的RAX、ARM中的R0等) 内存地址:变量存储在内存中的位置(如 0x1000) 指令:操作寄存器和内存的命令(如 MOV, STR, LDR…...
