如何获取Kubernetes资源YAML结构中指定字段的自上而下层级路径?
不用手动翻kubectl explain的输出,下面几个方法可以直接拿到你要的父级 > 子级格式路径:
自定义shell函数(最推荐,零额外依赖,一次配置永久用)
把下面的函数代码追加到你的shell配置文件(bash用户写到~/.bashrc,zsh用户写到~/.zshrc),执行source ~/.bashrc或者source ~/.zshrc让配置生效:kexplain-path() { if [ $# -lt 2 ]; then echo "使用方式: kexplain-path <资源类型> <目标字段名>" echo "示例: kexplain-path pod capabilities" return 1 fi local res=$1 local target=$2 kubectl explain "$res" --recursive | awk -v tgt="$target" -v root="$res" ' BEGIN { path[0] = root d = 0 } { indent = length($0) - length(ltrim($0)) cur_d = indent / 2 f = ltrim($0) sub(/ .*/, "", f) while (d >= cur_d) delete path[d--] path[++d] = f if (f == tgt) { p = path[0] for (i=1; i<=d; i++) p = p " > " path[i] print p } } function ltrim(s) { sub(/^[[:space:]]+/, "", s); return s }' }之后要查字段直接调用就行,比如查pod里的capabilities字段,执行
kexplain-path pod capabilities,终端直接输出:pod > spec > containers > securityContext > capabilities所有K8s标准资源、CRD资源只要你的kubectl能识别,都可以用这个方法查,比如查deploy里的pvc字段,执行
kexplain-path deployment persistentVolumeClaim就能直接出对应路径。原生命令快速定位(不想改配置可以临时用)
不想加自定义函数的话,可以用grep的上下文参数拉取目标字段前面的内容,快速核对层级:kubectl explain pod --recursive | grep -B 50 "capabilities"这个命令会把capabilities字段所在行之前的50行内容都打出来,你只要顺着缩进从目标字段往上找非缩进的顶级字段就行,比开less手动翻效率高很多。
IDE自动补全(日常写YAML最方便)
日常写配置的时候,只要装了对应编辑器的Kubernetes插件(比如VS Code的官方Kubernetes插件、JetBrains系列IDE自带的K8s支持),写YAML时会自动做字段校验和补全,光标放在对应字段上就能看到完整路径,不用敲命令查。
内容的提问来源于stack exchange,提问作者Akshay Lokur

