如何列出其中包含 CharDevice 的 kubernetes pod?

how to list the kubernetes pod which has CharDevice in it?

如何列出其中包含 CharDevice 的 Kubernetes pod?

我可以使用 CharDevice 获取 pod,但只需要打印 pod 名称

kubectl get pod -o jsonpath='{spec.volumes.hostPath.type=="CharDevice"}'

您可以先获得 json,然后使用 jq 获得想要的结果:

kubectl get pod -o json |
jq -r '.items[]|select(any(.spec.volumes[];.hostPath.type=="CharDevice")).metadata.name'

我认为使用 Kubectl 提供的 jsonpath 无法实现您期望的 filter/parsing。但是,如果您只想使用 kubectl 而不使用任何其他工具,则可以使用 go-template

kubectl get pod -A -o  go-template='{{range $index, $element := .items}}{{range $key, $vol := .spec.volumes}}{{range $sk ,$sv := .hostPath}}{{if (eq $sv "CharDevice") }}{{$element.metadata.name}}{{"\n"}}{{end}}{{end}}{{end}}{{end}}'

可读性:

您可以使用{{-来trim出左边的空格,-}}可以trim出右边的空格。使用此信息,可以将与上面相同的命令转换为:

kubectl get pod -A -o  go-template='{{- range $index, $element := .items -}}
  {{- range $key, $vol := .spec.volumes -}}
    {{- range $sk ,$sv := .hostPath -}}
      {{- if (eq $sv "CharDevice") -}}
        {{- $element.metadata.name -}}{{"\n"}}
      {{- end -}}
    {{- end -}}
  {{- end -}}
{{- end -}}'