如何通过Kubectl的JsonPath或go-template正则匹配查询deployment的students数组值
需求说明
通过kubectl查询Deployment资源,同时输出两类信息:
- Deployment的
.metadata.name值 .spec.template.spec.containers[].students[]数组中符合正则模糊匹配条件的学生姓名
要求不依赖jq等第三方工具,使用kubectl原生支持的输出能力实现。
已知限制
Kubernetes原生JsonPath语法暂不支持正则匹配操作,仅能实现完全相等匹配,无法满足模糊查询需求。
可行方案:使用Go-Template输出
kubectl原生支持Go-Template格式输出,且内置的Sprig函数库提供正则匹配能力,可直接实现需求。
匹配含Jeff关键词的示例命令
kubectl get deployment -o go-template='{{range .items}}{{$depName := .metadata.name}}{{range .spec.template.spec.containers}}{{range .students}}{{if regexMatch ".*Jeff.*" .}}{{printf "%s:\t%s\n" $depName .}}{{end}}{{end}}{{end}}{{end}}'
输出示例
student-deployment: Jefferson
规则调整说明
可自行修改正则表达式实现不同匹配逻辑:
- 匹配以J开头的学生:正则填
^J.* - 忽略大小写匹配jeff:正则填
(?i).*jeff.* - 匹配包含e或f的姓名:正则填
.*[ef].*
内容的提问来源于stack exchange,提问作者calmmash
相关产品推荐
相关产品推荐

