Kubernetes 如何使用kubectl命令从k8s配置映射内的yaml文件中获取值?

Kubernetes 如何使用kubectl命令从k8s配置映射内的yaml文件中获取值?,kubernetes,jq,jsonpath,go-templates,Kubernetes,Jq,Jsonpath,Go Templates,假设configmap如下所示: apiVersion: v1 kind: ConfigMap metadata: name: my-configmap namespace: ${namespace} data: my-config.yaml: |- keyA: keyB: a-value 如何使用kubectl命令从configmap获取keyB(即a-value)的值 PS:我想使用-o jsonpath或-o'go-template=…选项,但我想不出正确

假设configmap如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
  namespace: ${namespace}
data:
  my-config.yaml: |-
    keyA:
      keyB: a-value
如何使用
kubectl
命令从configmap获取
keyB
(即
a-value
)的值


PS:我想使用
-o jsonpath
-o'go-template=…
选项,但我想不出正确的语法。

您可以使用
jsonpath
go-template
获得
数据.my config.yaml

带有
jsonpath
的示例:

$ kubectl get cm my-configmap -o "jsonpath={.data['my-config\.yaml']}"
keyA:
  keyB: a-value
带有
go模板的示例

$ kubectl get cm my-configmap -o 'go-template={{index .data "my-config.yaml"}}'
keyA:
  keyB: a-value
请注意,通过在YAML上使用
|-
,您定义了一个,这意味着返回值是一个带换行符的字符串(
\n

如果只需要
keyB
值,可以使用输出为YAML处理器提供数据,如。例如:


因为这个问题被标记为jq,而且yq只是jq的包装,所以这里有一个单独使用yq的解决方案:

yq -r '.data."my-config.yaml"' configmap.yml |
  yq .keyA.keyB
当然,也可以使用grep/sed组合,如下所示:

 grep keyB: | sed 's/.*keyB: *//'

这可以通过上面所示的yq的第一次调用来完成,也可以根本不使用yq,不过当然,这种方法有很多注意事项。

-o jsonpath
是一种方法。看一看,我会提供一个完整的答案,但是我的
kubectl
生锈了,我手边没有集群。但下面的@Eduardo的回答(我刚刚注意到)似乎涵盖了这一点。JSONPath令人困惑,因为它使用了那些大括号,不像
jq
。祝你好运
 grep keyB: | sed 's/.*keyB: *//'