ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

rkt list 命令完全指南:查看与诊断 rkt Pod 的终极工具

rkt list 命令完全指南:查看与诊断 rkt Pod 的终极工具 容器运行时云原生网络【免费下载链接】rkt[Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards.项目地址https://gitcode.com/gh_mirrors/rk/rkt点击查看免费下载rkt list是 rkt 容器引擎中用于列出主机上所有 rkt Pod的核心命令。它以表格形式展示每个 Pod 的 UUID、应用、镜像、运行状态、创建与启动时间以及网络信息是日常运维、故障排查和脚本化集成的第一入口。读完本文你将掌握rkt list的全部输出字段含义、--full/--no-legend/--format等参数用法并深入理解其底层的 Pod 生命周期状态机与数据目录结构。命令概览rkt list通过 rkt/list.go 中的cmdList命令实现其定义如下命令名list功能简介List pods列出 Pod详细描述Displays a table of information about the pods以表格形式显示关于 Pod 的信息该命令会遍历 rkt 数据目录下所有处于可见状态的 Pod详见下文“哪些 Pod 会被列出”并为每个 Pod 内的每个应用app输出一行记录。因此一个包含多个应用的多应用 Pod 会在列表中占据多行这是理解输出格式的关键。基础用法列出所有 Pod直接运行rkt list即可列出当前主机上的全部 rkt Pod$ rkt list UUID APP IMAGE NAME STATE CREATED STARTED NETWORKS 5bc080ca redis redis running 2 minutes ago 41 seconds ago default:ip4172.16.28.7 etcd coreos.com/etcd:v2.0.9 3089337c nginx nginx exited 9 minutes ago 2 minutes ago输出字段逐列解读列名含义UUIDPod 的通用唯一标识符。默认仅显示前 8 个字符短格式使用--full显示完整 UUIDAPPPod 内应用app的 name 字段来自 Pod Manifest 中apps[].nameIMAGE NAME应用所使用镜像的完整名称。若镜像 manifest 带有versionlabel则显示为name:version形式如coreos.com/etcd:v2.0.9STATEPod 的当前状态取值见下文“状态值说明”CREATEDPod 的创建时间即 prepare 阶段完成的时间默认以人类可读的相对时间显示如2 minutes agoSTARTEDPod 的启动时间stage1 进程拉起的时间同样默认为相对时间NETWORKSPod 使用的网络及 IP格式为网络名:ip4IP多个网络用逗号分隔多应用 Pod 的显示规则从源码 rkt/list.go 可以看出对于一个包含多个应用的 Pod第一行输出完整的 UUID、状态、创建/启动时间和网络信息同一 Pod 的后续应用行中UUID、STATE、CREATED、STARTED、NETWORKS 列会被清空源码中专门注释说明这些字段描述的是 Pod 而非应用避免重复打印。因此示例中 redis 与 etcd 属于同一个 PodUUID 均为5bc080ca而5bc080ca只在第一行出现。这一点在解析输出做自动化时务必注意。时间显示规则CREATED与STARTED的显示逻辑位于 rkt/list.go默认非--full使用humanize.Time显示相对时间如2 minutes ago--full模式下使用defaultTimeLayout格式2006-01-02 15:04:05.999 -0700 MST显示完整时间戳该常量定义在 rkt/image_list.go若 Pod 尚未启动started时间为零值STARTED列保持为空。查看完整信息--full 参数使用--full标志可以查看完整 UUID 以及镜像 ID$ rkt list --full UUID APP IMAGE NAME IMAGE ID STATE CREATED STARTED NETWORKS 5bc080cav-9e03-480d-b705-5928af396cc5 redis redis sha512-91e98d7f1679 running 2016-01-25 17:42:32.563 0100 CET 2016-01-25 17:44:05.294 0100 CET default:ip4172.16.28.7 etcd coreos.com/etcd:v2.0.9 sha512-a03f6bad952b 3089337c4-8021-119b-5ea0-879a7c694de4 nginx nginx sha512-32ad6892f21a exited 2016-01-25 17:36:40.203 0100 CET 2016-01-25 17:42:15.1 0100 CET--full带来的变化有三点对应源码 rkt/list.goUUID 显示完整不再截取前 8 位输出完整的 36 字符 UUID新增IMAGE ID列显示应用镜像的哈希 ID取sha512-哈希的前 19 个字符例如sha512-91e98d7f1679时间改为完整格式CREATED、STARTED从相对时间变为精确到毫秒的完整时间戳并带上时区如0100 CET。镜像 ID 与镜像名称的源码依据IMAGE ID取自 Pod Manifest 中apps[].image.idrkt/list.go是 appc spec 规定的镜像内容哈希IMAGE NAME通过getImageName()函数读取应用的 ImageManifest 获得若该镜像的 manifest 带有versionlabel则显示为name:version见 rkt/list.go。这就是coreos.com/etcd:v2.0.9这类带版本号名称的来源。隐藏表头--no-legend 参数--no-legend用于抑制表格顶部的列标题行其 flag 定义与--full一样位于 rkt/list.go$ rkt list --no-legend 5bc080ca redis redis running ...该参数非常适合脚本化场景——直接使用awk、cut等文本工具按列解析 Pod 信息无需跳过首行标题。这一用法在仓库的集成测试中大量出现例如tests/rkt_tests.go 中通过rkt list --full | grep ^[a-f0-9] | awk {print $1}提取 Pod UUID 再传给rkt enter/rkt statustests/rkt_pid_file_test.go 中通过rkt list --full | grep running筛选处于运行态的 Pod。Options 参数总表以下是rkt list的完整参数列表来自原文档表格并补充了源码中实际存在的--format参数Flag默认值可选值说明--fullfalsetrue或false使用长输出格式完整 UUID、增加 IMAGE ID 列、完整时间戳--no-legendfalsetrue或false抑制列表顶部的图例列标题--formattabbed 表格json、json-pretty选择输出格式不指定时输出键值对/表格格式详见下文注--format在 rkt/list.go 中定义虽然未出现在原文档表格中但属于该命令的真实可用参数。json输出紧凑json-pretty输出带缩进的格式化 JSON。JSON 输出--format 参数除表格输出外rkt list还支持结构化 JSON 输出便于与其他工具或语言集成。在源码 rkt/list.go 中runList根据flagFormat选择三种输出方式outputFormatTabbed默认走tabwriter输出对齐表格outputFormatJSONjson.Marshal紧凑输出outputFormatPrettyJSONjson.MarshalIndent带缩进输出。$ rkt list --formatjson [{uuid:5bc080cav-9e03-480d-b705-5928af396cc5,state:running,networks:[{netName:default,ip:172.16.28.7,flags:0}],...}] $ rkt list --formatjson-pretty [ { uuid: 5bc080cav-9e03-480d-b705-5928af396cc5, state: running, ... } ]JSON 对象由 lib/pod.go 中的NewPodFromInternalPod()构造v1.Pod类型定义于 api/v1/json.go包含字段说明uuid完整的 Pod UUIDstatePod 状态字符串networks网络列表网络名、IP 等createdAt/startedAtUnix 时间戳秒appNames/appsPod 中的应用名列表及应用详情userAnnotations等Pod Manifest 中的用户注解等附加信息--format取值解析逻辑位于 rkt/image_list.gooutputFormat.Set方法空字符串或未指定时回退到 tabbed 表格格式json与json-pretty分别对应紧凑与美化 JSON。--formatjson的测试用例可参考 tests/rkt_list_test.go验证 JSON 输出中包含 Pod 的 IP 地址。列出的都是哪些 Pod数据目录与状态目录结构rkt list的数据来源于 rkt 数据目录默认/var/lib/rkt可通过全局选项--dir修改下的pods/子目录。pkg/pod/pods.go 定义了 Pod 在文件系统中按生命周期阶段分布的六个目录目录对应状态pods/embryo胚胎期创建后、进入准备前pods/preparepreparing准备中或 aborted prepare准备中断pods/preparedprepared已准备完成pods/runrunning运行中或 exited已退出pods/exited-garbageexited garbage已退出且被标记为垃圾pods/garbagegarbage从未运行但被标记为垃圾默认包含与排除的目录rkt list通过pkgPod.WalkPods(getDataDir(), pkgPod.IncludeMostDirs, ...)遍历 Podrkt/list.go。IncludeMostDirs掩码定义在 pkg/pod/pods.go包含run运行中/已退出、exited-garbage、prepare、prepared四个目录排除embryo胚胎期尚不可用和garbage垃圾即将被 GC 清理。也就是说运行中、已退出、已准备完成尚未运行以及准备中断的 Pod 都会被列出而胚胎期与已被标记为垃圾的 Pod 不会出现在默认输出中。状态值说明STATE列的取值来自Pod.State()方法pkg/pod/pods.go完整的状态集定义在同一文件的常量区pkg/pod/pods.go状态值含义embryo胚胎期目录已创建但尚未开始准备preparing准备中正在拉取镜像、生成 manifestaborted prepare准备中断prepare 未完成就失败/被打断prepared已准备完成可被run-prepared启动running运行中deleting删除中从未运行的垃圾 Pod 正在被删除exited deleting已退出且正在被删除exited已退出exited garbage已退出且被标记为垃圾garbage从未运行但被标记为垃圾值得注意的是exited与running的区分并非只看目录Pod 的run目录在运行时被排他锁持有解锁即表示退出。WalkPods与refreshState正是通过尝试加共享锁来判断 Pod 究竟是 running 还是 exited见 pkg/pod/pods.go 的锁推断逻辑。整个生命周期状态机的详细说明可参阅 Documentation/devel/pod-lifecycle.md。网络信息 NETWORKS 的获取NETWORKS列由fmtNets()函数格式化rkt/list.go对于 Pod 使用的每个网络输出网络名:ip4IP多个网络以,分隔。网络信息在getPod()时通过netinfo.LoadAt()从 Pod 目录的 netinfo 文件加载pkg/pod/pods.go若 Pod 以--nethost运行则无该文件此时NETWORKS为空。相关网络概念可参考 Documentation/networking/overview.md。使用场景与实战场景一定位运行中的 Pod 并进入结合--no-legend与grep可以快速筛选特定状态的 Pod。仓库测试 tests/rkt_env_test.go 展示了这种典型用法$ UUID$(rkt list --full | grep running | awk {print $1}) $ rkt enter $UUID /inspect --print-envVAR_FROM_MANIFEST场景二验证创建/启动时间rkt list --full输出的时间信息可以被精确解析。集成测试 tests/rkt_list_test.goTestRktListCreatedStarted验证了CREATED对应 prepare 完成的时间在测试中即rkt prepare执行时刻STARTED对应rkt run-prepared启动时刻。两个时间均可通过正则.*imageID\\t.*\\t(.*)\\t(.*)\\t从--full输出中提取并与预期时间做约 2 秒精度的比对。这证明rkt list的时间列可以直接用于自动化校验 Pod 生命周期。场景三确认镜像与应用的对应关系默认输出中IMAGE NAME若带版本则显示为name:version来自镜像 manifest 的 version label--full模式下IMAGE ID给出镜像的sha512-前缀内容哈希。可用于核对 Pod 实际使用的镜像版本排查“Pod 里跑的是不是预期镜像”这类问题。表格对齐的实现细节rkt list的表格列对齐由 Go 标准库的tabwriter完成。getTabOutWithWriter()rkt/rkt.go初始化tabwriter.Writer参数(writer, 0, 8, 1, \t, 0)表示最小宽度 0、tab 宽度 8、padding 1、使用 tab 分隔。这就是输出中列与列之间会有一个空格对齐的原因。全局选项rkt list继承rkt的所有全局选项完整的全局选项表格见 Documentation/commands.md。与rkt list最相关的几个Flag默认值说明--debugfalse输出更多调试信息到 stderr可帮助排查 list 失败原因--dir/var/lib/rkt指定 rkt 数据目录。若使用自定义数据目录rkt list将只列出该目录下的 Pod数据目录路径通过getDataDir()解析--system-config/--local-config/--user-config/usr/lib/rkt//etc/rkt/ 空系统级 / 本地级 / 用户级配置目录用于影响镜像仓库认证、路径等解析例如使用自定义数据目录时$ rkt --dir/data/rkt list常见问题Q1为什么一个 Pod 会在rkt list中显示多行因为输出按应用粒度组织每个应用一行。多应用 Pod如同时运行 redis 和 etcd会占用多行且从第二行起 UUID/STATE 等 Pod 级字段为空。Q2为什么IMAGE ID只有 19 个字符而不是完整哈希这是 rkt/list.go 中的有意截断app.Image.ID.String()[:19]仅显示sha512-前缀加前 12 位哈希共 19 字符便于阅读与 grep。Q3rkt list看不到刚创建的 Pod如果 Pod 正处于embryo状态prepare 前的短暂阶段或已被标记为garbage默认输出不会包含它。需要等待 prepare 完成或排查 Pod 是否因 prepare 失败而进入aborted prepare状态。Q4rkt list与rkt status的区别rkt list提供全局的 Pod 总览表格 JSONrkt status uuid则针对单个 Pod 输出更详细的信息包括各应用的退出码、PIDs、注释等见 rkt/status.go。日常巡检用rkt list深入诊断用rkt status。Q5--full与--no-legend能同时使用吗可以。两者是独立 flag组合使用如rkt list --full --no-legend会输出带完整 UUID/IMAGE ID、无表头的长格式是脚本解析最常用的组合。小结rkt list是 rkt 运维中最高频的命令之一默认输出短格式表格展示 UUID前 8 位、应用、镜像、状态、时间与网络--full提供完整 UUID、镜像 ID 与精确时间戳--no-legend便于脚本解析--formatjson/json-pretty支持结构化输出其数据来自/var/lib/rkt/pods/下按生命周期状态组织的目录通过锁文件区分running与exited默认排除embryo与garbage状态的 Pod相关实现见 rkt/list.go、pkg/pod/pods.go测试见 tests/rkt_list_test.go。赞分享容器运行时云原生网络【免费下载链接】rkt[Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards.项目地址https://gitcode.com/gh_mirrors/rk/rkt点击查看免费下载相关推荐容器调试终极指南rkt诊断工具与日志分析实战容器调试终极指南rkt诊断工具与日志分析实战 你是否还在为容器故障排查耗费数小时本文将系统讲解rkt容器引擎的诊断工具链与日志分析方法帮助你快速定位容容器运行时云原生网络rkt run 命令完全指南以 Pod 为单位运行应用容器rkt run 命令完全指南以 Pod 为单位运行应用容器 rkt run 是 rkt一款面向 Linux 的 pod 原生容器引擎的核心子命令用于将容器运行时云原生网络如何用 Humanizer 把 AI 初稿改出真人腔调如何用 Humanizer 把 AI 初稿改出真人腔调 你用 AI 写完一篇初稿自己念到第二句就开始皱眉serves asvibrantin or容器运行时云原生网络上一篇Lightweight Charts™ iOS 集成指南使用 iOS Wrapper 在 Swift 应用中渲染金融图表v3.8下一篇告别混乱的内部文档用bert-base-multilingual-cased构建下一代企业知识管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表