ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

K9s v0.20.1 特性解读:可配置的端口转发地址与资源引用溯源(UsedBy)

K9s v0.20.1 特性解读:可配置的端口转发地址与资源引用溯源(UsedBy) 云原生容器编排CLI运维【免费下载链接】k9s Kubernetes CLI To Manage Your Clusters In Style!项目地址https://gitcode.com/GitHub_Trending/k9s/k9s点击查看免费下载K9s 是用于以终端 TUI 方式管理 Kubernetes 集群的 CLI 工具。本文以 release_v0.20.1.md 发布说明为主体深入讲解该版本引入的两项核心能力支持按集群指定端口转发监听地址portForwardAddress以及新增的 UsedBy 资源引用溯源功能——在 ConfigMap、Secret、ServiceAccount 视图中一键查询谁在引用我。读完本文你将掌握这两项特性的完整配置方法、操作流程以及它们背后的源码实现原理。版本概览v0.20.1 是一次以稳定性收尾与实用功能落地的发布。除常规缺陷修复外本次最值得关注的两处变化是PortForward 配置化为端口转发对话框引入可配置的宿主机监听 IP默认仍为localhost引用溯源UsedBy在 ConfigMap 视图按下u键即可列出所有引用该 ConfigMap 的资源首轮支持 ConfigMap、Secret、ServiceAccount 三类对象。此外发布说明还列出该版本解决的 4 个 issue#734、#733、#716、#693见文末版本修复清单一节。端口转发地址可配置化为什么需要自定义转发地址K9s 执行port-forward时默认把本地监听地址绑定在localhost上。但对于部分场景如容器内运行 K9s、需要跨主机访问、或在特定网络环境下通过指定 IP 转发绑定固定回环地址并不方便。为此 v0.20.1 引入了portForwardAddress配置项允许用户为转发会话指定一个具体的宿主 IP 地址。配置文件写法编辑 K9s 配置文件在对应集群配置段加入该字段。发布说明给出的示例结构如下k9s: ... clusters: blee: namespace: active: favorites: - fred - default view: active: po portForwardAddress: 1.2.3.4字段含义配置项类型说明portForwardAddressstring端口转发时本地监听的 IP 地址未配置时默认为localhost源码实现细节从当前仓库源码看该配置项在 K9s 配置结构中对应字段PortForwardAddress字段声明位于 internal/config/k9s.go#L45tag 为json:portForwardAddress yaml:portForwardAddress默认值与优先级逻辑集中在 internal/config/helpers.go#L15-L18默认地址常量defaultPortFwdAddress localhost同时支持通过环境变量K9S_DEFAULT_PF_ADDRESS在全局层面预设默认地址配置校验逻辑位于 internal/config/k9s.go#L436-L449Validate()会先检查环境变量K9S_DEFAULT_PF_ADDRESS是否设置若设置则覆盖配置文件中的取值若最终值为空则回落到defaultPFAddress()即环境变量优先、否则localhostJSON Schema 校验定义见 internal/config/json/schemas/k9s.json#L31类型为 string。需要说明的是v0.20.1 发布说明以按集群per cluster的形式给出配置示例而在当前仓库实现中PortForwardAddress位于 K9s 顶层配置结构中见 internal/config/k9s.go#L36-L66 的K9s结构体并通过Merge与Validate在全局生效环境变量可作兜底覆盖。配置的生效路径该地址在两条端口转发路径上被读取交互式转发对话框在 internal/view/pf_dialog.go#L58-L61 中ShowPortForwards以v.App().Config.K9s.PortForwardAddress作为 Address: 输入框的默认值用户仍可在对话框中临时修改注解驱动的自动转发在 internal/view/pf_extender.go#L193-L205 中当 Pod 带有k9s.io/auto-port-forwards注解时pfs.ToTunnels(v.App().Config.K9s.PortForwardAddress, ...)直接以该地址建立隧道不再弹窗。配置文件本身的路径解析可参考 internal/config/files.go#L166-L216K9s 通过K9S_CONFIG_DIR环境变量或 XDG 规范定位配置目录主配置文件为其中的config.yaml按集群划分的上下文数据则存于数据目录下的clusters/子目录。UsedBy资源引用溯源功能定位在排查问题时开发者常想知道集群里到底哪些资源在用 ConfigMapfred。对磁盘上的 Manifest 做 grep 只能覆盖未部署的定义无法反映集群真实状态。K9s 的 UsedBy 功能正是为了解决这个问题在 ConfigMap 视图中选中目标资源并按下u键K9s 会实时扫描集群中的管理类资源找出所有引用该对象的资源并跳转到专用引用视图。支持范围v0.20.1 首轮支持的对象为ConfigMap通过环境变量env/envFrom或卷Volume引用Secret通过环境变量或卷引用ServiceAccount通过 Pod 模板的serviceAccountName引用。从当前仓库源码看该能力后续已扩展除了 internal/view/cm.go#L33-L39ConfigMap、internal/view/secret.go#L33Secret、internal/view/sa.go#L34ServiceAccount外PVCinternal/view/pvc.go#L29与 PriorityClassinternal/view/priorityclass.go#L28视图也已支持u键的 UsedBy 操作。操作流程进入 ConfigMap 视图:后输入cm并回车或使用别名cm选中目标 ConfigMap按u键菜单中对应动作名为UsedBy见 internal/view/cm.go#L33-L39 的按键绑定aa.Add(ui.KeyU, ui.NewKeyAction(UsedBy, s.refCmd, true))K9s 弹出新的引用视图列出所有引用该资源的对象结果按Namespace / Name / GVR三列渲染见 internal/render/reference.go#L29-L35。具体调用链为refCmd→scanRefsinternal/view/cm.go#L41-L65→dao.ScanForRefs(...)。扫描完成后若没有任何命中界面会通过 Flash 提示 No references found at this time若有结果则注入NewReference视图展示引用列表。底层扫描机制引用扫描由 internal/dao/reference.go 中的Reference访问器统一收口List方法按目标 GVR 分流ServiceAccount 走ScanSA其余走Scan。真正的并发扫描在 internal/dao/cluster.go#L57-L106ScanForRefs与 internal/dao/cluster.go#L108-L153ScanForSARefs中实现扫描对象默认对 Deployment、DaemonSet、StatefulSet、CronJob、Job 五类管理资源执行scanners()注册表见 internal/dao/cluster.go#L47-L55Pod 视图的独立实现见 internal/dao/pod.go#L289并发模型每个扫描器在一个 goroutine 中执行通过sync.WaitGroup等待全部完成结果经 channel 汇聚合成为RefsRef由GVR与FQN组成见 internal/dao/cluster.go#L30-L37上下文传递选中资源的 FQN、目标 GVR 与是否等待标志通过context传入refContext见 internal/view/cm.go#L67-L72。引用判定规则以 Deployment 为例判定逻辑位于 internal/dao/dp.go#L128-L188ConfigMaphasConfigMap遍历 Pod 模板中 InitContainer、Container、EphemeralContainer 的envFromConfigMapRef与envvalueFrom.configMapKeyRef以及volumes[].configMap实现见 internal/dao/dp.go#L343-L359SecrethasSecret以同样方式检查envFromSecretRef与envvalueFrom.secretKeyRef并额外处理 volume 引用的查询internal/dao/dp.go#L325-L341PVC / PriorityClass分别匹配volumes[].persistentVolumeClaim与priorityClassName。ServiceAccount 的判定则统一走serviceAccountMatchesinternal/dao/helpers.go#L106-L115若 Pod 模板未显式指定serviceAccountNameKubernetes 会默认注入名为default的 ServiceAccount因此空值与default视为匹配。使用注意事项发布说明对此功能给出了两条明确的提醒需在实战中留意开销较大该功能需要对集群中大量资源逐一扫描比对在大集群上执行时可能耗时较长界面会短暂等待并非穷举引用扫描当前并不保证 100% 覆盖所有引用形态例如跨资源动态引用且功能尚新建议结合kubectl或 Manifest 检索交叉验证结果。版本修复清单v0.20.1 同时修复/合并了以下 issueIssue #734Issue #733Issue #716Issue #693发布说明同时提示本轮改动幅度较大该版本可能存在一定的不稳定性升级后建议留意异常行为。小结v0.20.1 的价值在于把两条高频操作路径变得更可控portForwardAddress让端口转发不再局限于localhost可通过配置文件或K9S_DEFAULT_PF_ADDRESS环境变量统一管理而 UsedBy 则将资源引用关系查询从磁盘 Manifest 提升到集群实时状态层面并为此设计了并发扫描、按资源类型分流判定的可扩展架构从最初的 ConfigMap/Secret/ServiceAccount 逐步扩展到 PVC、PriorityClass 即可见一斑。对于日常巡检与排障这两项能力分别解决了转发到哪与谁在用我两个高频问题。赞分享云原生容器编排CLI运维【免费下载链接】k9s Kubernetes CLI To Manage Your Clusters In Style!项目地址https://gitcode.com/GitHub_Trending/k9s/k9s点击查看免费下载相关推荐k9s v0.20.0 实战解析portForwardAddress 自定义转发地址与 UsedBy 资源反向引用k9s v0.20.0 实战解析portForwardAddress 自定义转发地址与 UsedBy 资源反向引用 导读 本篇以 k9s 仓库的 v0.20.云原生容器编排CLI运维K9s v0.20.4 实战解析PVC UsedBy 引用追踪与 K9SCONFIG 配置目录重定位K9s v0.20.4 实战解析PVC UsedBy 引用追踪与 K9SCONFIG 配置目录重定位 导读 本指南围绕 K9s v0.20.4 版本的两个核心云原生容器编排CLI运维K9s v0.25.0 发布解读用注解驱动 FastForwards一键直达默认端口转发K9s v0.25.0 发布解读用注解驱动 FastForwards一键直达默认端口转发 导读本篇围绕 K9s v0.25.0 版本发布说明展开核心讲解云原生容器编排CLI运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表