如何使用kubectl命令从k8s configmap中的yaml文件获取值?

问题描述 投票:1回答:2

假设配置图列出如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
  namespace: ${namespace}
data:
  my-config.yaml: |-
    keyA:
      keyB: a-value

如何使用keyB命令从configmap中获取a-value(即kubectl)的值?

PS:我当时正在考虑使用-o jsonpath-o 'go-template=...选项,但我无法弄清楚正确的语法。

kubernetes jq jsonpath go-templates
2个回答
0
投票

您可以使用data.my-config.yamljsonpath获得go-template值。

[jsonpath的示例:

$ kubectl get cm my-configmap -o "jsonpath={.data['my-config\.yaml']}"
keyA:
  keyB: a-value

[go-template的示例:

$ kubectl get cm my-configmap -o 'go-template={{index .data "my-config.yaml"}}'
keyA:
  keyB: a-value

注意,通过在YAML上使用|-,您正在定义Multiline YAML String,这意味着返回的值是一个带有换行符的单个字符串(\n)。

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

yq

0
投票

由于此问题被标记为jq,并且yq只是jq的包装,所以这是一个使用yq以及grep和sed的解决方案:

$ kubectl get cm my-configmap -o 'go-template={{index .data "my-config.yaml"}}' | yq -r .keyA.keyB
a-value

当然,最好使用与上面最后一行类似的grep / sed组合,而完全不使用yq。

© www.soinside.com 2019 - 2024. All rights reserved.