如何显示已安装图表的可用更新

mog*_*man 5 kubernetes kubernetes-helm

有没有办法使用 Helm 显示已安装图表的可用图表更新?

例如,我有一个“web-app”图表安装为“测试”,版本为 1.2.4,但在我的存储库中,1.2.7 可用:

# helm ls
NAME    NAMESPACE   REVISION    UPDATED                                 STATUS      CHART           APP VERSION
test    default     1           2020-06-04 07:33:07.822952298 +0000 UTC deployed    web-app-1.2.4   0.0.1

# helm search repo myrepo
NAME            CHART VERSION   APP VERSION DESCRIPTION
myrepo/ingress  0.1.0           1.16.0      A Helm chart for Kubernetes
myrepo/sandbox  1.2.3           1.16.0      A Helm chart for Kubernetes
myrepo/web-app  1.2.7           0.0.1       A Helm chart for Kubernetes
Run Code Online (Sandbox Code Playgroud)

我的目标是编写一个脚本来发送任何需要更新的图表的通知,以便我可以查看并运行更新。我很高兴听到任何可以做到这一点的 devOps 风格的工具,

Ale*_*itz 3

截至 2022 年 8 月 28 日,无法知道已安装的 Helm Chart 来自哪个存储库。

如果您希望能够进行某种自动化,当前您需要跟踪哪个图表来自外部哪个存储库的信息。
示例包括:在源代码管理中存储配置、将图表安装为 argo 应用程序(如果您使用的是 argocd)、两者的组合等。

现在,由于这个问题没有描述任何这些方法的使用,我将仅做出假设并根据我提到的方法给出一个示例。

假设您将所有 helm 图表存储为源代码管理中某些本地图表的依赖项。

一个例子是Chart.yaml这样的:

apiVersion: v2
name: chart-of-charts
description: A Helm chart for Kubernetes

type: application
version: 0.1.0
dependencies:
  - name: some-chart
    version: 0.5.1
    repository: "https://somechart.io"
  - name: web-app 
    version: 0.2.2
    repository: "https://myrepo.io"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以做的是遍历依赖项并执行查找以比较 .yaml 中的版本与可用版本。

bash 脚本的示例:

#!/bin/bash
# requires:
#  - helm
#  - yq (https://github.com/mikefarah/yq)
chart = Chart.yaml
length=$(yq '.dependencies | length' $chart)
for i in $(seq $length $END); do 
    iter=$(($i-1))

    repo=$(yq .dependencies[$iter].repository $chart)
    name=$(yq .dependencies[$iter].name $chart)
    version=$(yq .dependencies[$iter].version $chart)
    # only if this app points to an external helm chart
    if helm repo add "repo$iter" $repo > /dev/null 2>&1
    then
        available_version=$(helm search repo "repo$iter/$name" --versions | sed -n '2p' | awk '{print $2}')
        if [ "$available_version" != "$version" ]; then
            echo APP: $(echo $chart | sed 's|/Chart.yaml||')
            echo repository: $repo
            echo chart name: $name
            echo current version: $version Available version: $available_version
            echo
        fi
    fi
done
Run Code Online (Sandbox Code Playgroud)