防止创建已存在的机密

问题描述

目前我设置了以下秘密:

apiVersion: v1
kind: Secret
Metadata:
  name: my-repository-key
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: {{ template "imagePullSecret" . }}

不幸的是,我有 2 个使用相同密钥的子图,这在我尝试使用 helm 安装它们时出现问题。

根据 stackoverflow answer,我尝试使用以下行来防止重新创建机密:

{{- if not (lookup "v1" "Secret" "" "my-repository-key") }}

不幸的是它不起作用,我暂时无法调试查找,因为它是 impossible

如何通过查找阻止创建?有没有更好的办法?

解决方法

在 Helm 图表中,Kubernetes 对象通常以前缀命名,即当前版本的名称加上当前图表的名称。这将使名称唯一,即使存在声明类似秘密的相关子图。 (秘密非常小,在两个子图表之间复制它不应该是一个操作问题。)

metadata:
  name: "{{ .Release.Name }}-{{ .Chart.Name }}-key"

如果您使用 helm create 创建图表,则此模式很常见,以至于新图表模板 includes 是生成此模式的辅助模板。如果图表只有一个秘密,您可以使用默认名称:

metadata:
  name: "{{ include "chartname.fullname" . }}"

或者,在命名的一些极端情况下,您可以为其添加后缀

metadata:
  name: "{{ include "chartname.fullname" . }}-key"