如何在Kubernetes的Go模板中打印Pod指定metadata.labels值
如何在Kubernetes中打印Pod指定的Metadata标签值?
问题场景
现有如下Pod配置:
apiVersion: v1 kind: Pod metadata: annotations: kubernetes.io/psp: eks.privileged creationTimestamp: "2022-10-13T01:43:06Z" generateName: my-service-1-84bc99cfb5- labels: app.kubernetes.io/instance: my-service-1 app.kubernetes.io/name: my-service name: my-service-1-84bc99cfb5-sx7vm namespace: my-service spec: containers: ...
执行原kubectl命令:
kubectl get pods -n my-service -o go-template --template '{{range .items}}{{.metadata.name}} {{.metadata.namespace}} {{.metadata.creationTimestamp}} {{.metadata.labels}} {{"\n"}}{{end}}'
得到的输出会打印整个labels map:
my-service-1-84bc99cfb5-sx7vm my-service 2022-10-13T01:43:06Z map[app.kubernetes.io/instance:my-service-1 app.kubernetes.io/name:my-service]
但实际需要的是仅输出app.kubernetes.io/instance标签对应的具体值,期望输出:
my-service-1-84bc99cfb5-sx7vm my-service 2022-10-13T01:43:06Z my-service-1
解决方案
修改Go模板中的标签访问部分,使用index函数来指定要提取的标签键(因为标签键包含点和斜杠这类特殊字符,无法直接通过.访问)。
修改后的完整命令:
kubectl get pods -n my-service -o go-template --template '{{range .items}}{{.metadata.name}} {{.metadata.namespace}} {{.metadata.creationTimestamp}} {{index .metadata.labels "app.kubernetes.io/instance"}} {{"\n"}}{{end}}'
补充说明
index函数是Go模板中用于访问map、数组或切片元素的方法,语法为index <map> <key>- 如果需要提取多个标签值,只需依次添加对应的
index语句即可,例如同时提取app.kubernetes.io/name和app.kubernetes.io/instance:kubectl get pods -n my-service -o go-template --template '{{range .items}}{{.metadata.name}} {{.metadata.namespace}} {{.metadata.creationTimestamp}} {{index .metadata.labels "app.kubernetes.io/name"}} {{index .metadata.labels "app.kubernetes.io/instance"}} {{"\n"}}{{end}}'
内容的提问来源于stack exchange,提问作者Mohit Sharma
相关产品推荐
相关产品推荐

