受影响的 helm 版本: v2.4.1
如果 <chart repo> 中的最新<chart>
<chart repo>
具有“预发布”版本,则helm [install | fetch] <chart repo>/<chart>
失败 - 也就是说,包含超出的附加值,例如v0.1.0
,例如v0.1.0-alpha.1
或v0.1.0-dev-sha.abc1234
。
在v2.3.1
工作:
$ helm version
Client: &version.Version{SemVer:"v2.3.1", GitCommit:"32562a3040bb5ca690339b9840b6f60f8ce25da4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.3.1", GitCommit:"32562a3040bb5ca690339b9840b6f60f8ce25da4", GitTreeState:"clean"}
$ helm search -r workflow-dev
NAME VERSION DESCRIPTION
workflow-dev/workflow v2.13.1-dev-20170504190907-sha.3d6bbf9 Deis Workflow
$ helm fetch workflow-dev/workflow
$ ls
workflow-v2.13.1-dev-20170504190907-sha.3d6bbf9.tgz
不在v2.4.1
中工作:
$ helm version
Client: &version.Version{SemVer:"v2.4.1", GitCommit:"46d9ea82e2c925186e1fc620a8320ce1314cbb02", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.4.1", GitCommit:"46d9ea82e2c925186e1fc620a8320ce1314cbb02", GitTreeState:"clean"}
$ helm search -r workflow-dev
NAME VERSION DESCRIPTION
workflow-dev/workflow v2.13.1-dev-20170504190907-sha.3d6bbf9 Deis Workflow
...
$ helm fetch workflow-dev/workflow
Error: chart "workflow" not found in workflow-dev index. (try 'helm repo update'). No chart version found for workflow-
但是,如果 repo 中的最新图表具有“官方”发布版本,则它们在v2.4.1
中成功获取:
$ helm search -r jenkins
NAME VERSION DESCRIPTION
stable/jenkins 0.6.2 Open source continuous integration server. It s..
$ helm fetch stable/jenkins
$ ls
jenkins-0.6.2.tgz
https://github.com/kubernetes/charts/issues/999是专门为stable/traefik
图表提交的。
事实上,正如我们所看到的,这个图表恰好有一些关于版本字符串的额外信息(完整版本: 1.2.1-a
,因此证实了这个问题的说法,即添加的信息(通常被认为是“预发布”)是打破安装/获取:
$ helm search -r traefik
NAME VERSION DESCRIPTION
stable/traefik 1.2.1-a A Traefik based Kubernetes ingress controller w...
$ helm fetch stable/traefik
Error: chart "traefik" not found in stable index. (try 'helm repo update'). No chart version found for traefik-
但是,重要的是要注意(并且可能有助于调试/查明问题),如果明确指定了“预发布”图表版本,则可以毫无问题地安装/获取它。 从上面继续:
$ helm fetch stable/traefik --version 1.2.1-a
$ ls
traefik-1.2.1-a.tgz
根据 SemVer 的说法,原因是 Traefik 的版本是一个预发布版本。 在 Helm 2.4.1 中,我们决定不安装预发布版本,除非明确给出版本。 #2279
解决方法是运行一些允许预发布满足范围标准的东西: helm fetch stable/traefik --debug --version=">1.0.0-a"
@vdice向我建议我们可以添加一个标志以允许不稳定的包满足请求。 我们在想也许--devel
@vdice向我建议我们可以添加一个标志以允许不稳定的包满足请求。
事实上,我们的一个用例是将整个图表存储库用于_only_ 'unstable/dev/pre-release' 版本化图表。 这样做的好处是不会“拥挤”我们仅包含官方版本的“官方”图表存储库。
在不指定任何版本或版本范围的情况下保持从所述开发存储库中提取最新图表的能力会很方便(可以在 helm pre-2.4.x 中完成): helm install dev-chart-repo/dev-chart
,而不是必须以某种方式跟踪最新的开发图表版本并通过--version
提供适当的范围。
如果需要--devel
标志来执行上述操作,那很好。
虽然我可以(在某种程度上)理解拒绝安装“预发布”图表的理由,但我看不出这对fetch
有什么用处。
此外,当前的错误消息具有误导性并导致时间浪费。
最有用的评论
根据 SemVer 的说法,原因是 Traefik 的版本是一个预发布版本。 在 Helm 2.4.1 中,我们决定不安装预发布版本,除非明确给出版本。 #2279
解决方法是运行一些允许预发布满足范围标准的东西:
helm fetch stable/traefik --debug --version=">1.0.0-a"
@vdice向我建议我们可以添加一个标志以允许不稳定的包满足请求。 我们在想也许
--devel