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

inj*_*joy 4 jsonpath go-templates jq kubernetes

假设 configmap 列出如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
  namespace: ${namespace}
data:
  my-config.yaml: |-
    keyA:
      keyB: a-value
Run Code Online (Sandbox Code Playgroud)

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

PS:我正在考虑使用-o jsonpathor-o 'go-template=...选项,但我无法找出正确的语法。

Edu*_*llo 5

您可以使用或data.my-config.yaml来获取该值。jsonpathgo-template

示例jsonpath

$ kubectl get cm my-configmap -o "jsonpath={.data['my-config\.yaml']}"
keyA:
  keyB: a-value
Run Code Online (Sandbox Code Playgroud)

示例go-template

$ kubectl get cm my-configmap -o 'go-template={{index .data "my-config.yaml"}}'
keyA:
  keyB: a-value
Run Code Online (Sandbox Code Playgroud)

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

如果您只需要keyB值,则可以使用输出来提供 YAML 处理器,例如yq. 例如:

$ kubectl get cm my-configmap -o 'go-template={{index .data "my-config.yaml"}}' | yq -r .keyA.keyB
a-value
Run Code Online (Sandbox Code Playgroud)