如果资源已经存在,如何告诉 helm 不要创建/更改资源?

问题描述 投票:0回答:3

我有一个秘密资源模板,安装后将为数据生成随机值。

删除该图表(没有删除秘密资源,因为它们保留下来)并稍后重新安装后,我遇到了问题。

这导致它使用新生成的数据运行以前的秘密,这在我的情况下是不希望的。

我试图找到我需要包含在模板中的 if 条件是什么,以便它不会创建或修改秘密(如果它已经存在)。我该怎么做?

kubernetes kubernetes-helm
3个回答
26
投票

从 helm 3.1 版本开始,有一个查找功能可以检查给定的资源是否存在。使用此功能,如果资源已经存在,您可以跳过升级或安装。

查找功能

例如,请参阅此示例图表。我在 _helpers.tpl 中创建了一个名为

gen.secret
的函数,并在 Secret.yaml 中使用它


3
投票

抱歉,目前不能。

根据问题#4824如果资源策略为keep,则在安装时忽略现有资源),舵团队尚未支持,也没有任何计划。

UPD:秘密的解决方法:

使用 Ansible k8s 模块生成机密,并将其传递给 Helm 图表。有点难看,但是有用。


0
投票

我有类似的要求,但 helm 升级会删除该对象(如果存在),添加

helm.sh/resource-policy: keep
注释有所帮助,如下所示

{{- if not (lookup "networking.istio.io/v1beta1" "VirtualService" .Release.Namespace .Release.Name ) -}}
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: {{ .Release.Name }}
  annotations:
    # helm deletes the object is present due to above "if not" condition
    # add annotation to keep the object
    helm.sh/resource-policy: keep
spec:
  hosts:
    - {{ .Release.Name }}
  http:
  - route:
    - destination:
        host: {{ .Release.Name }}
        subset: v1
      weight: 90
    - destination:
        host: {{ .Release.Name }}
        subset: v2
      weight: 10

{{ end }}
© www.soinside.com 2019 - 2024. All rights reserved.