列出集群中所有运行容器的镜像

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 如果你还没有集群,你可以通过 构建一 个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    要获知版本信息,请输入 .

    在本练习中,你将使用 kubectl 来获取集群中运行的所有 Pod,并格式化输出来提取每个 Pod 中的容器列表。

    列出所有命名空间下的所有容器

    • 使用 kubectl get pods --all-namespaces 获取所有命名空间下的所有 Pod
    • 使用 -o jsonpath={..image} 来格式化输出,以仅包含容器镜像名称。 这将以递归方式从返回的 json 中解析出 image 字段。
      • 参阅 获取更多关于如何使用 jsonpath 的信息。
    • 使用标准化工具来格式化输出:tr, sort, uniq
      • 使用 tr 以用换行符替换空格
      • 使用 来对结果进行排序
      • 使用 uniq 来聚合镜像计数

    作为替代方案,可以使用 Pod 的镜像字段的绝对路径。这确保即使字段名称重复的情况下也能检索到正确的字段,例如,特定项目中的许多字段都称为 name

      jsonpath 解释如下:

      • .items[*]: 对于每个返回的值
      • .spec: 获取 spec
      • .containers[*]: 对于每个容器
      • : 获取镜像

      列出以标签过滤后的 Pod 的所有容器

      要获取匹配特定标签的 Pod,请使用 -l 参数。以下匹配仅与标签 app=nginx 相符的 Pod。

      1. kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=nginx

      要获取匹配特定命名空间的 Pod,请使用 namespace 参数。以下仅匹配 kube-system 命名空间下的 Pod。

      使用 go-template 代替 jsonpath 来获取容器

      作为 jsonpath 的替代,Kubectl 支持使用 go-templates 来格式化输出:

      1. kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"