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

ax6ht2ek  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(3)|浏览(82)

有没有一种方法可以使用Helm来显示已安装图表的可用图表更新?
例如,我有一个“网络应用程序”图表安装为“测试”版本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

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

q35jwt9p

q35jwt9p1#

截至2022年8月28日,无法知道已经安装的舵图来自哪个存储库。
如果你想能够做某种自动化,目前你需要从外部跟踪哪个图表来自哪个repo的信息。
例如:在源代码控制中存储配置,将图表安装为argo应用程序(如果您使用argocd),两者的组合等。
既然这个问题没有描述这些方法的使用,我就做一个假设,给予一个基于我提到的方法的例子。
假设您将所有的Helm图表作为某个本Map表的依赖项存储在源代码控制中。
一个例子是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"

在这种情况下,您可以做的是遍历依赖项并执行查找以比较.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
mo49yndu

mo49yndu2#

与命令

helm search repo --regexp "myrepo/web-app" --versions

你可能会得到所有可用的版本。

91zkwejq

91zkwejq3#

如果你已经添加了存储库,你可以使用这个脚本来简化升级工作:

helm list --all-namespaces | awk -F "\t" '{ if (NR != 1) { print "Current version: "$6; system("helm search repo "$1); print "---\n\n" } }'

相关问题