【问题标题】:During a Helm upgrade is there a way to access the version I am upgrading from在 Helm 升级期间,是否可以访问我正在升级的版本
【发布时间】:2020-08-06 21:39:01
【问题描述】:

示例:当前版本是 1.2.3,我执行 helm 升级到版本 1.2.4,在 statefulset 升级期间是否有办法访问“来自”版本,例如1.2.3

【问题讨论】:

  • “访问”和“版本”是什么意思? (对现有 pod 的 HTTP 调用;将字符串作为参数传递给作业脚本;...?)你能举一个你正在尝试做的具体事情的例子吗?
  • 抱歉耽搁了,是的一个例子,我在 1.2.3,我执行 helm upgrade 到 1.2.4,在我的状态集中我检查了 {{- if .Release.IsUpgrade }下一行应该检查我要升级的版本是否小于 1.2.4 然后不要执行该块

标签: kubernetes kubernetes-helm


【解决方案1】:

不确定您是否可以在升级期间访问“来自”版本,但您可以在应用升级之前使用helm list 命令获取它

helm list --filter 'your-release' -n your-namespace -o json | jq '.[0]'
{
  "name": "your-release",
  "namespace": "your-namespace",
  "revision": "549",
  "updated": "2020-07-31 14:54:44.168919115 +0000 UTC",
  "status": "failed",
  "chart": "your-chart-0.1.0",
  "app_version": "0.2.1"
}

helm docs中所述

存储库中的包由名称加版本标识。

您可以从返回的chart 密钥中剪切版本

PREVIOUS_VERSION=$(helm list --filter 'your-release' -n your-namespace -o json | jq '.[0].chart' | grep -Po '(?<=your-chart-)[^;]+' | sed 's/.$//')
echo $PREVIOUS_VERSION
0.1.0

【讨论】:

  • 感谢您的建议,但这只能在升级时检查,例如,我在 1.2.3,我执行 helm upgrade 到 1.2.4,在我的有状态集中我有一个检查{{- if .Release.IsUpgrade }} 下一行应该检查我要升级的版本是否小于 1.2.4 然后不要执行该块
【解决方案2】:

据我所知,没有内置功能,也没有简单的方法可以访问以前的版本,但可能有一种解决方法。

您可以使用 edbighead 中提到的方法来获取之前的版本,并使用--set 传递它,如下所示:

helm upgrade --set previousVersion=$PREVIOUS_VERSION

然后在图表中使用这个条件语句:

{{- $var := semver .Values.previousVersion | (semver "1.2.4" ).Compare }}
{{- if ne $var 1 }}
  ...
{{- end }}

if 语句只有在previousVersion 大于或等于 1.2.4 时才为真。

这里有更多关于semantic version function (semver) in helm的信息。

【讨论】:

  • 感谢您的建议,但要求是完全按照逻辑执行此操作,没有新的值/集,因为进行升级的人不会更改他们的升级命令。正如您提到的,没有内置功能,我将不得不寻找替代解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2022-11-11
  • 2015-11-15
  • 2019-07-23
  • 1970-01-01
  • 2021-03-12
  • 2014-12-31
相关资源
最近更新 更多