kubectl get -o jsonpath使用

【说明】
(1)本篇讲解kubectl get命令的输出格式化,即-o jsonpath=参数的使用格式(-o jsonpath= 与 -ojsonpath= 与 -o=jsonpath= 与 --output=jsonpath= 四者写法不一样,效果一样)
(2)官网:https://kubernetes.io/zh-cn/docs/reference/kubectl/jsonpath/

1. jsonpath语法讲解

jsonpath是一种用于从json数据中提取数据的查询语言,通过jsonpath表达式从json数据中选择和提取数据,jsonpath表达式就是由一系列操作符和表达式组成的【jsonpath表达式的基本操作符】
(1)$ 		根节点(2)@ 		当前节点,一般用于【子表达式】或者【过滤表达式】(3.[] 	用于连接父节点, .点要求value本身是一个json对象才可以进行往下连接。[] 也可以用于连接父节点,语法:$["data"]["studnet"]、$["name"] 等价于 $.name
【示例】$.name则表示提取根节点下的name节点的值$.data.student则表示提取根节点下的data节点下的student数组的值(student假设是一个数组的话则返回整个数组)$.data.student[0]则表示提取根节点下的data节点下的student数组中的第1个值(student是一个数组的话则返回整个数组中第1个值)$.data.student[0].name则表示提取根节点下的data节点下的student数组中的第1个值的name值(4*号		通配符星号表示所有
【示例】$.* 表示提取根节点下的所有节点的值$.data.student[*].name则表示提取根节点下的data节点下的student数组中的所有节点的name值(5.. 	表示深层递归
【示例】$.name表示提取根节点下的name节点的值$..name则表示提取根节点及其下所有子节点中的name节点的值(递归提取)$.data..name则表示提取data节点及其data节点下边的所有节点的name节点的值(递归提取data节点所有name节点值)。针对数组节点的处理:
一般来说,整对数组节点的提取,我们主要采用的方式有这么几种:【下标提取】、【过滤表达式】
【下标提取】又可以有3个方式,如下:(1)提取单个元素:【语法】array[index] --> 表示提提数组中指定的index下标的值(2)枚举方式:【语法】array[index1,index2,index3] --> 表示同时提取数组中的多个index下标元素值,使用逗号分隔index即可(3)分片:【语法】array[start:end] --> 表示提取数组中半闭半开区间的值,即包含start,不包含end的下标元素值,start可以省略,省略时默认是0,end亦可省略,省略时默认是最后一个index下标
【示例】:$.data.student[0]	 提取student数组中第1个元素的值$.data.student[1]	 提取student数组中第2个元素的值$.data.student[0,3]	 提取student数组中第1个元素和第4个元素的值$.data.student[*]	 使用*号通配符表示提取student数组中全部元素的值$.data.student[0:3]	 提取student数组中[0,3)元素的值,换句话说就是012元素的值,不含元素3的值$.data.student[:3]   省略start,start默认是0,则等价于$.data.student[0:3]$.data.student[1:]	 省略end,则表示到最后一个index,即提取数组中从下标1开始到最后一个元素的值【过滤表达式】:对于复杂的业务需求,可以通过过滤表达式对数组中的元素进行过滤。==!=<<=>>=    等于、不等于、小于、小于等于、大于、大于等于=~	                    正则匹配in	                    存在于nin	                    不存在于subsetof	            子集||&&                      与基本格式:$.data.studnet[?(表达式)]@表示正在处理的当前节点
【示例】:$.data.studnet[?(@.isVIP==true)]			 提取data节点下student节点下isVIP=true的元素$.data.studnet[?(@.isVIP==true)].name		 提取data节点下student节点下isVIP=true的元素的name值$.data.studnet[?(@.age>=20)]				 提取data节点下student节点下年龄大于20的元素$.data.studnet[?(@.age>=20 && @.sex=="man")] 提取data节点下student节点下年龄大于等于20并且性别是男生的元素$.data.studnet[?(@.age==20 || @.age==25 )]	 等价于 $.data.studnet[?(@.age in [20,25])]$.data.studnet[?(@.age nin [20,25])]

2. kubectl get命令

Usage:kubectl get
[(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...]
(TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]Use "kubectl options" for a list of global command-line options (applies to all commands).

3. -o jsonpath= 讲解

jsonpath模板由 {} 包起来的 jsonpath表达式组成。kubectl 使用 jsonpath表达式来过滤 json对象中的特定字段并格式化输出。

kubectl 的 jsonpath 输出不支持正则表达式

3.1 测试数据

[root@k8s-node-32 ~]# kubectl get nodes -o wide
NAME               STATUS   ROLES    AGE    VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8s-master-31      Ready    master   683d   v1.17.9   192.168.20.31   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://19.3.12
k8s-node-32        Ready    node     683d   v1.17.9   192.168.20.32   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://19.3.12
k8s-node-33        Ready    node     683d   v1.17.9   192.168.20.33   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://19.3.12
vm.k8s-master-31   Ready    <none>   683d   v1.16.2   192.168.20.31   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   QEMU-KVM://4.2.0
vm.k8s-node-32     Ready    <none>   683d   v1.16.2   192.168.20.32   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   QEMU-KVM://4.2.0
vm.k8s-node-33     Ready    <none>   683d   v1.16.2   192.168.20.33   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   QEMU-KVM://4.2.0

3.2 提取单个元素

# 获取根节点下items数组中第1个元素的metadata节点下的name的值
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{.items[0].metadata.name}"
k8s-master-31
# 获取根节点下items数组中第2个元素的metadata节点下的name的值
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{.items[1].metadata.name}"
k8s-node-32
# 获取根节点下items数组中第3个元素的metadata节点下的name的值
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{.items[2].metadata.name}"
k8s-node-33# 获取根节点下items数组中所有元素的metadata节点下的name的值
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{.items[*].metadata.name}"
k8s-master-31 k8s-node-32 k8s-node-33 vm.k8s-master-31 vm.k8s-node-32 vm.k8s-node-33# 获取根节点下items数组中所有元素下status节点下capacity节点下的availPhysicalMemory值
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{.items[*].status.capacity.availPhysicalMemory}"
39946Mi 125171Mi 32497Mi

3.2 枚举元素

# 同时获取多个值,使用['n1','n2',..]即可
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{.items[*]['.metadata.name', '.status.capacity.availPhysicalMemory']}"
k8s-master-31 k8s-node-32 k8s-node-33 vm.k8s-master-31 vm.k8s-node-32 vm.k8s-node-33 39947Mi 125172Mi 32485Mi

3.3 分片

range, end	迭代列表
range, end	迭代列表可以进行常量的输出,还可以使用制表符换行符进行格式化,语法格式如下:
【语法格式】:{range .items[*]}{.metadata.name},{xxx},{xxx} {end}  
-o jsonpath="{range .items[*]}{.metadata.name} {end}"
-o jsonpath="{range .items[*]}{.metadata.name}, {.status.capacity.availPhysicalMemory} {end}"
-o jsonpath="{range .items[*]}{.metadata.name}, {.status.capacity.availPhysicalMemory}{'\n'}{end}"# 输出容器名字和容器容量,并使用制表符换行符进行格式化
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.capacity.availPhysicalMemory}{'\n'}{end}"
k8s-master-31
k8s-node-32
k8s-node-33
vm.k8s-master-31        39Gi
vm.k8s-node-32  125166Mi
vm.k8s-node-33  32487Mi#{end}前面没有空格,输出结果都连接到一起了
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{range .items[*]}{.metadata.name}{end}"
k8s-master-31k8s-node-32k8s-node-33vm.k8s-master-31vm.k8s-node-32vm.k8s-node-33#{end}前面加了个空格
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{range .items[*]}{.metadata.name} {end}"
k8s-master-31 k8s-node-32 k8s-node-33 vm.k8s-master-31 vm.k8s-node-32 vm.k8s-node-33#同时输出容器name和容器IP
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{range .items[*]}{.metadata.name}, {.status.capacity.availPhysicalMemory} {end}"
k8s-master-31,  k8s-node-32,  k8s-node-33,  vm.k8s-master-31, 39888Mi vm.k8s-node-32, 125141Mi vm.k8s-node-33, 32499Mi #使用换行符美化结果
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{range .items[*]}{.metadata.name}, {.status.capacity.availPhysicalMemory}{'\n'}{end}"
k8s-master-31,
k8s-node-32,
k8s-node-33,
vm.k8s-master-31, 39923Mi
vm.k8s-node-32, 125132Mi
vm.k8s-node-33, 32500Mi#输出结果拼接其他信息
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{range .items[*]}avail:{.status.capacity.availPhysicalMemory}{'\n'}{end}"
avail:
avail:
avail:
avail:39925Mi
avail:125138Mi
avail:32507Mi

3.4 过滤

对于kubectl get 过滤符合条件的有以下方式

1】使用标签
[root@k8s-node-32 ~]# kubectl get nodes -l asState=active,cpuShared='1' -o jsonpath="{.items[*].metadata.name}"
vm.k8s-node-322】使用grep
[root@k8s-node-32 ~]# kubectl get nodes -o jsonpath="{.items[*].metadata.name}" | grep node-32
k8s-node-32 vm.k8s-node-323】使用过滤表达式
kubectl get vm -o jsonpath="{range .items[?(@.spec.nodeName=='vm.k8s-node-32')]}name={.metadata.name},status={.spec.powerstate}}{'\n'}{end}"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全新升级,三坐标CMM测量报告工具,助您轻松掌握精度

随着制造业的不断发展&#xff0c;产品质量和精度要求越来越高&#xff0c;而三坐标测量技术在保证产品质量方面发挥着不可替代的作用。为了更好地满足您的测量需求&#xff0c;我们自豪地推出全新升级的三坐标CMM测量报告工具&#xff0c;助您轻松掌握精度&#xff0c;提升生产…

C语言进阶之笔试题详解(2)

前言 这里的内容包括二维数组笔试题和指针笔试题&#xff0c;供给读者对这部分知识进行加深和巩固。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 前言 笔试题 二维数组 题目…

深入浅出:Presto查询引擎全解析

深入浅出&#xff1a;Presto查询引擎全解析 引言 在大数据时代&#xff0c;企业和组织积累了海量的数据。为了从这些数据中提取有价值的信息&#xff0c;需要使用高效的数据查询工具。Presto是一个开源的分布式SQL查询引擎&#xff0c;专为高速大数据分析设计。本文将详细介绍…

自定义Windows服务启动失败

文章目录 自定义Windows服务启动失败报错内容解决方案管理员身份运行cmd进入到InstallUtil.exe的路径&#xff0c;使用cd命令。使用InstallUtil.exe工具安装服务。 自定义Windows服务启动失败 报错内容 “无法从命令行或调试器启动服务&#xff0c;必须首先安装Windows服务(使…

【python+Excel】读取和存储测试数据完成接口自动化测试

http_request2.py用于发起http请求 #读取多条测试用例 #1、导入requests模块 import requests #从 class_12_19.do_excel1导入read_data函数 from do_excel2 import read_data from do_excel2 import write_data from do_excel2 import count_case #定义http请求函数COOKIENon…

docker搭建node环境开发服务器

docker搭建node环境开发服务器 本文章是我自己搭建node环境开发服务器的过程记录&#xff0c;不一定完全适用所有人。根据个人情况&#xff0c;按需取用。 命名项目路径 为了方便cd到项目路径&#xff0c;将项目路径重命名&#xff0c;方便输入。 vim /etc/profile # 修改p…

展开运算符(...)

假如我们有一个数组&#xff1a; const arr [7,8,9];● 我们如果想要数组中的元素&#xff0c;我们必须一个一个手动的去获取&#xff0c;如下&#xff1a; const arr [7,8,9]; const badNewArr [5, 6, arr[0], arr[1],arr[2]]; console.log(badNewArr);● 但是通过展开运…

回归预测 | MATLAB实现基于LightGBM算法的数据回归预测(多指标,多图)

回归预测 | MATLAB实现基于LightGBM算法的数据回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现基于LightGBM算法的数据回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLA…

Linux系统编程--文件操作函数

一.常见IO函数 fopen fclose fread fwrite fseek fflush fopen 运行过程 &#xff1a;打开文件 写入数据 数据写到缓冲区 关闭文件后 将数据刷新入磁盘 1.fopen 返回文件类型的结构体的指针 包括三部分 1).文件描述符&#xff08;整形值 索引到磁盘文件&#xff09;…

PGSQL(PostgreSQL)数据库安装教程

安装包下载 下载地址 下载后点击exe安装包 设置的data存储路径 设置密码 设置端口 安装完毕&#xff0c;配置PGSQL的ip远程连接&#xff0c;pg_hba.conf&#xff0c;postgresql.conf&#xff0c;需要更改这两个文件 pg_hba.conf 最后增加一行 host all all …

Maven——仓库

Maven坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式&#xff1b;而构件的物理表示方式是文件&#xff0c;Maven通过仓库来统一管理这些文件。 1、何为Maven仓库 在Maven世界中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称为构件。例如&…

TCP/IP封装

数据如何通过网络发送&#xff1f;为什么 OSI 模型需要这么多层&#xff1f; 下图显示了数据在网络传输时如何封装和解封装。 步骤1&#xff1a;当设备A通过HTTP协议通过网络向设备B发送数据时&#xff0c;首先在应用层添加HTTP头。 步骤2&#xff1a;然后将TCP或UDP标头添加…

WIFI7:开启无线通信新纪元

在数字化时代&#xff0c;无线通信是我们生活中不可或缺的一部分。随着Wi-Fi 7的到来&#xff0c;我们迎来了无线连接的全新时代&#xff0c;这一标准的升级彻底颠覆了我们对速度、效率和连接性的期望。WIFI 7&#xff08;WIFI7&#xff09;是下一代WIFI7标准&#xff0c;对应的…

51综合程序01-DAC转换输出波形

文章目录 DAC转换输出波形使用DA转换输出正弦波&#xff0c;三角波&#xff0c;锯齿波&#xff08;1&#xff09;仿真电路图&#xff08;2&#xff09;源代码&#xff08;3&#xff09;实验结果 DAC转换输出波形 使用DA转换输出正弦波&#xff0c;三角波&#xff0c;锯齿波 &…

element table滚动到底部加载数据(vue3)

效果图 使用插件el-table-infinite-scroll npm install --save el-table-infinite-scroll局部导入 <template><div class"projectTableClass"><el-table v-el-table-infinite-scroll"load"></el-table></div> </temp…

立刻解决缺少msvcp140_1.dll解决方法,msvcp140_1.dll修复指南

在日常使用电脑的过程中&#xff0c;我们有时会遇到由于某些重要的DLL文件缺失而导致的程序无法正常启动的问题。很多用户可能都经历过由于缺少msvcp140_1.dll导致应用程序无法运行的情况。本文将为你提供解决msvcp140_1.dll缺失问题的详尽方法&#xff0c;附带对每种方法优点和…

(1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)

电子工业出版社 Publishing House Of Electronics Industry 北京BeiJing 版次&#xff1a;2018年10月第1版 印次&#xff1a;2023年2月第22次印刷 定价&#xff1a;68元 声明 作为项目管理协会&#xff08;PMI&#xff09;的标准和指南&#xff0c;本指南是通过相关人员的…

C语言IIR双向滤波

设计一个0.5~1Hz的IIR滤波器&#xff0c;用巴特沃斯或者契比雪夫2&#xff0c;看零极点图是稳定的。 设计如下&#xff1a; function Hd iir_highpass_05_1_buter %IIR_HIGHPASS_05_1_BUTER Returns a discrete-time filter object.% MATLAB Code % Generated by MATLAB(R) …

流畅的Python (节选)

0 前言 节选学习部分有用的内容 Fluent Python 2 序列构成的数组 Python 会忽略代码里 []、{} 和 () 中的换行&#xff0c;因此如果你的代码里有多行的列表、列表推导、生成器表达式、字典这一类的&#xff0c;可以省略不太好看的续行符 \。 元组其实是对数据的记录&#x…

苹果输入法怎么换行?3个换行技巧,速速掌握!

在日常打字的时候&#xff0c;我们经常会遇到需要换行的情况。比如&#xff0c;在聊天、写作、编辑文档等场景下&#xff0c;当一行文字输入完成后&#xff0c;我们通常需要将光标移动到下一行再继续输入文字。那么这时候就需要我们进行换行操作。 然而&#xff0c;很多用户对…