helm upgrade install 提示语法报错问题解决

网友投稿 359 2022-09-30

helm upgrade install 提示语法报错问题解决

为什么需要helm?

k8s上的应用对象都有特定的资源描述组成,包括deployment、service等。都保存各自文件中或者集中写到一个配置文件,然后执行kubectl apply -f 进行部署。如果应用只由一个或几个这样的服务组成,上面部署方式足够了。

对于一个复杂的应用,会有很多类似上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个,几十个。如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,而这种组织和管理应用的方式就显得力不从心了。因此在这里我们线上的资源都是采用helm模板去进行管理。

但是最近线上环境使用helm的时候遇到了一个问题记录如下:

通过GitLab CICD发布了一个服务到k8s环境正常,这时候会生成一个Chart包并且会推送到自己的私有Chart仓库中,然后更新了模板再次发布该服务到k8s环境,会提示 helm语法问题如下:

Error: UPGRADE FAILED: template: allenjol-service/templates/virtualservice.yaml:18:13: executing "allenjol-service-service/templates/virtualservice.yaml" at : error calling eq: incompatible types for comparison

关于相关报错部分的模板内容如下:

...

domains:

{{- if eq .Values.config.appType "allenjol" }}

{{- range .domainPrefixes }}

- {{ . }}.ayunw.cn

{{- end }}

{{- end }}

...

一开始根据报错一度以为是我自己写错了语法,反复反复的对自己写的模板产生怀疑。于是查看了官网的语法。

官方的if/else流程语法例子如下:

{{ if PIPELINE }}

# Do something

{{ else if OTHER PIPELINE }}

# Do something else

{{ else }}

# Default case

{{ end }}

官方关于对if中使用条件判断的例子如下:

apiVersion: v1

kind: ConfigMap

metadata:

name: {{ .Release.Name }}-configmap

data:

myvalue: "Hello World"

drink: {{ .Values.favorite.drink | default "tea" | quote }}

food: {{ .Values.favorite.food | upper | quote }}

{{ if eq .Values.favorite.drink "coffee" }}mug: true{{ end }}

发现我似乎并没有写错什么。

到这里好像头绪断掉了,于是重新理了一下思路头绪。

发布到k8s环境中是通过GitLab CICD进行的。我将该allenjol-service服务相关的deployment和svc全部删除掉,然后重新用GitLab进行发布。发现似乎发布正常没任何的问题,也没有报错。

此处发布的命令为:

helm upgrade install allenjol-service ./allenjol-service-113-46a63a26.tgz -f values.yaml --namespace=allenjol

看上去这个命令没啥问题啊。是的,其实没啥问题,但是实际上在我这边的环境中遇到了这么个问题。也许是我自己对helm这个包管理工具不够熟悉导致吧。

问题分析如下:

1、首先通过GitLab CICD发布了一个allenjol-service的服务到k8s的sit环境中

2、然后由于需求改动,我更新了模板然后再次通过GitLab CICD发布服务

3、这时候之前的Release没有删除掉,更新了模板以后使用这个helm命令去install服务就报错了

经过这三个步骤以后,我尝试用​​helm uninstall​​​命令将这个Release删除掉,然后用更新后的模板再次使用​​helm upgrade install​​命令发布服务。谁知道这个时候居然是没问题的。

所以本次的问题原因已经找到:用模板发布了服务之后,服务正常。但是此时更新了模板,用老模板发布的服务Release依然存在,这时候用​​helm upgrade install​​命令再去发布的话就会报错。解决的方法目前就是将老的Release删除掉,然后重新发布。

注意: 生产中不应该三天两头的去更改模板。

github:​​https://ayunw.cn

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现简单的聊天室功能
下一篇:EasyDSS集群转码搭建后如何检查服务是否正常运行?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~