Kubectl命令行jsonpath的使用

本篇文章主要介绍了jsonpath的语法和使用。

jsonpath的语法介绍

Kubectl 支持 JSONPath 模板。

JSONPath 模板由 {} 包起来的 JSONPath 表达式组成。Kubectl 使用 JSONPath 表达式来过滤 JSON 对象中的特定字段并格式化输出。除了原始的 JSONPath 模板语法,以下函数和语法也是有效的:

  1. 使用双引号将 JSONPath 表达式内的文本引起来。

  2. 使用 range,end 运算符来迭代列表。

  3. 使用负片索引后退列表。负索引不会"环绕"列表,并且只要 -index + listLength> = 0 就有效。

函数

描述

示例

结果

text

纯文本

kind is {.kind}

kind is List

@

当前对象

{@}

与输入相同

. or []

子运算符

{.kind} or {['kind']}

List

..

递归下降

{..name}

127.0.0.1 127.0.0.2 myself e2e

*

通配符。获取所有对象

{.items[*].metadata.name}

[127.0.0.1 127.0.0.2]

[start:end :step]

下标运算符

{.users[0].name}

myself

[,]

并集运算符

{.items[*]['metadata.name', 'status.capacity']}

127.0.0.1 127.0.0.2 map[cpu:4] map[cpu:8]

?()

过滤

{.users[?(@.name=="e2e")].user.password}

secret

range, end

迭代列表

{range .items[*]}[{.metadata.name}, {.status.capacity}] {end}

[127.0.0.1, map[cpu:4]] [127.0.0.2, map[cpu:8]]

''

引用解释执行字符串

{range .items[*]}{.metadata.name}{'\t'}{end}

127.0.0.1 127.0.0.2

下面我们在k8s中使用jsonpath来获取我们想要的内容

通过jsonpath获取信息示例

纯文本方式

获取当前对象

获取pod的apiversion

获取pod的name

递归获取yaml所有的name

获取所有状态条件中的类型

获取状态第一个条件的类型

从第一个状态条件开始到最后一个结束,每隔2个获取一次

获取状态条件中的状态和类型

空格和换行符的引用

获取request中的cpu值

获取request中的cpu和memory

获取promotheus这个pod中alertmanage的容器端口

prometheus的yaml文件只截取部分

参考文档

https://kubernetes.io/zh/docs/reference/kubectl/jsonpath/

最后更新于

这有帮助吗?