从 helm chart 中提取 docker 图像

Pri*_*sco 2 python extract docker docker-image kubernetes-helm

有没有办法通过python从舵图中提取docker图像?

我想避免任何:

helm install --dry-run helm-chart > log

bash 脚本来提取此信息。

如果舵图包含两个图像(例如),我想提取这些图像

例子:

image: repo/image1:1.0     image1.yaml file
image: repo/image2:1.0     image2.yaml file
Run Code Online (Sandbox Code Playgroud)

Tho*_*son 5

迈克这里的一篇博客文章中提供了一个很好的答案,所有功劳都归功于他。

要列出给定 Helm 图表中的所有唯一图像:

helm template . \
    | yq '..|.image? | select(.)' \
    | sort -u
Run Code Online (Sandbox Code Playgroud)

helm template .

这假设您位于包含 Helm 图表的目录中。template 命令打印出通常通过 helm install 创建的所有 Kubernetes 对象。其输出格式为 yaml。

yq '..|.image? | select(.)'

yq 是流行的 jq 命令行工具的变体。jq 希望处理 JSON 流,而 yq 允许您对 yaml 执行相同的操作。

神奇之处在于 yq 提供的过滤器。过滤器作用于一些输入并执行一些操作以产生输出。在这种情况下,我们使用递归下降运算符来查找所有名为 image 的字段。这 ?在.image?表示 yq 应该生成图像值或 null 如果它不存在。将其传递给 select(.) 将忽略所有空值,最终返回一个换行分隔的图像字符串。

  • 如果您没有可用的 yq,可以使用 grep 和 sed 的组合来代替它: `helm template 。| grep 图像: | sed -e 's/[ ]*image:[ ]*//' -e 's/"//g' | sort -u` 此示例还删除引号,因为图表名称中经常包含引号。 (3认同)
  • 需要明确的是,要使用的“yq”工具是[这个](https://kislyuk.github.io/yq/)。 (2认同)
  • 对于 yq v4,命令将是 `helm template 。| yq e '..|.image? | 选择(.)' - | 排序 -u` (2认同)

Dav*_*aze 4

helm template会将 Helm 图表的内容渲染为 YAML 文件并将其打印到标准输出。一个快速而肮脏的答案是

helm template helm-chart | grep 'image:'
Run Code Online (Sandbox Code Playgroud)

但您也可以使用yq等工具基于 YAML 结构进行查询。

您确实必须使用某种 Helm 命令来渲染模板,因为它很常见,可以指定诸如

image: 'some/image:{{ .Values.tag }}'
Run Code Online (Sandbox Code Playgroud)

这取决于输入文件。另一方面,您可以使用常用的 Helm--set-f选项来指定值,因此,如果您在不同的环境(或不同的构建,或者仅包含一些基于设置的部署)中使用不同的映像,您将获得准确的结果反映将要部署的内容。