我将迁移作业作为预安装钩子运行,因此我还使用DB值作为重量较小的预安装钩子创建了一个秘密(应该在迁移之前运行),并且秘密和迁移都可以正常工作。问题是机密随后被删除,这导致常规的pod失败,因为它找不到机密,我也不知道为什么。
apiVersion: v1
kind: Secret
metadata:
namespace: {{ .Release.Namespace }}
labels:
app: {{ .Values.secrets.name }}
chart: {{ .Values.secrets.name }}
name: {{ .Values.secrets.name }}
annotations:
"helm.sh/hook": pre-install,pre-upgrade
"helm.sh/hook-weight": "-5"
type: Opaque
data:
{{- range $key, $val := .Values.secrets.values }}
{{ $key }}: {{ $val }}
{{- end}}
这是迁移作业的样子:
kind: Job
metadata:
namespace: {{ .Release.Namespace }}
labels:
app: {{ .Values.migration.name }}
chart: {{ .Values.migration.name }}
name: {{ .Values.migration.name }}
annotations:
"helm.sh/hook": pre-install,pre-upgrade
"helm.sh/hook-weight": "-1"
"helm.sh/hook-delete-policy": hook-succeeded,hook-failed
spec:
backoffLimit: 4
template:
metadata:
labels:
app: {{ .Values.migration.name }}
release: {{ .Values.migration.name }}
spec:
containers:
#other config container values
env:
- name: APP_ROLE
value: {{ .Values.migration.role | quote }}
envFrom:
- secretRef:
name: {{ .Values.secrets.name }}
restartPolicy: Never
答案 0 :(得分:0)
您已经被使用图表钩子以一种非预期的方式捕获。
在此处查看图表挂钩的官方头盔文档:Helm Docs
滚动到最底端的“挂钩删除策略”,您将看到:
如果未指定任何钩子删除策略注释,则默认情况下将应用前钩子创建行为。
会发生什么情况,那就是头盔运行创建秘密的钩子,成功创建它,然后继续运行下一个钩子(您的迁移)并在执行之前再次删除秘密。
钩子无意创建保留的资源。您可以通过为秘密设置hook-failed
的钩子删除策略来尝试破解它,但我不确定结果如何。
理想情况下,您不会在应用程序的初始化容器中运行应用程序的迁移作业。这样,您可以正常创建机密信息,而无需使用钩子,并且init容器和应用程序可以重用相同的机密信息。