在头盔图表上,我有一个pre-install
钩子,需要在我的秘密中使用财产。但是,当我尝试安装头盔图表时,在我的pre-install
工作中出现以下错误:
错误:找不到机密“ SecretsFileName”
在Pod执行之前没有创建秘密吗?这是什么问题我该怎么解决?
注意:
"helm.sh/hook": pre-install,post-delete
和"helm.sh/hook-weight": "1"
,并在pod上使用"helm.sh/hook-weight": "2"
,但问题仍然存在。我的预安装作业:
apiVersion: batch/v1
kind: Job
metadata:
name: "MyPodName"
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
#some more code
spec:
template:
#some more code
spec:
dnsPolicy: {{ .Values.specPolicy.dnsPolicy }}
restartPolicy: {{ .Values.specPolicy.restartPolicy }}
volumes:
- name: {{ .Values.volume.name }}
persistentVolumeClaim:
claimName: {{ .Values.volume.claimName }}
securityContext:
{{- toYaml .Values.securityContext | nindent 8 }}
containers:
- name: "MyContainerName"
#some more code
env:
- name: SECRET_TO_USE
valueFrom:
secretKeyRef:
name: SecretsFileName
key: PROP_FROM_SCRETS
#some more code
我的机密文件:
apiVersion: v1
kind: Secret
metadata:
name: "SecretsFileName"
labels:
app: "MyAppName"
#some more code
type: Opaque
data:
PROP_FROM_SCRETS: eHB0bw==
答案 0 :(得分:2)
尽管Helm hooks通常是Jobs,但并不需要它们,而且Helm不会对钩子对象的内容进行任何分析,以了解它可能还依赖什么。如果通读了此处描述的安装顺序,则是(7)安装标记为钩子的东西,(8)等待它们准备就绪,然后(9)安装其他所有东西;它会等待作业完成,然后再安装依赖的机密。
那么,第一个答案是,您还需要将Secret标记为一个钩子,以便在预安装阶段将其安装,并具有更改的重量,以便在主要Job之前安装它(重量较小)发生得更快):
apiVersion: v1
kind: Secret
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": -5
下一个问题是何时将该秘密删除。 helm uninstall
不会删除挂钩资源的文档notes;您需要添加一个单独的helm.sh/hook-delete-policy
annotation,否则它将一直存在,直到下次计划运行该挂钩为止。这对我来说是在说,如果您修改Secret(或组成它的值)并升级(而不是删除并重新安装)图表,则Secret不会得到更新。
我可能只创建了两个Secret副本,一个副本在预安装时有用,一个副本在主要图表生命周期中有用。您可以创建一个模板来呈现Secret主体,然后调用两次:
{{- define "secret.content" -}}
type: Opaque
data:
PROP_FROM_SCRETS: eHB0bw==
{{- end -}}
---
apiVersion: v1
kind: Secret
metadata:
name: "SecretsFileName"
labels:
app: "MyAppName"
{{ include "secret.content" . }}
---
apiVersion: v1
kind: Secret
metadata:
name: "SecretsFileName-preinst"
labels:
app: "MyAppName"
annotations:
"helm.sh/hook": pre-install
"helm.sh/hook-weight": -5
"helm.sh/hook-delete-policy": hook-succeeded
{{ include "secret.content" . }}
答案 1 :(得分:0)
根据docs:
预安装:在渲染模板之后但在Kubernetes中创建任何资源之前执行