代码之家  ›  专栏  ›  技术社区  ›  Suhasini Subramaniam

如何列出库伯内特斯吊舱中有CharDevice?

  •  0
  • Suhasini Subramaniam  · 技术社区  · 2 年前

    如何列出库伯内特斯吊舱中有CharDevice?

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

    kubectl get pod -o jsonpath='{spec.volumes.hostPath.type=="CharDevice"}'
    
    0 回复  |  直到 2 年前
        1
  •  1
  •   Philippe    2 年前

    您可以先获取json并使用 jq 要获得期望的结果:

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

    我认为你所期待的过滤/解析是不可能的 jsonpath 供应 Kubectl .但是,您可以使用 go-template 如果你想用 kubectl 仅在不使用任何其他工具的情况下:

    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}}'
    

    为了便于阅读:

    你可以用 {{- 要修剪左边的空间, -}} 来修剪右边的空间。有了这些信息,上述相同的命令可以转换为:

    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 -}}'