使用预安装挂钩创建K8s Secret

问题描述

我将迁移作业作为预安装钩子运行,因此我还使用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

解决方法

您已经被使用图表钩子以一种非预期的方式捕获。

在此处查看图表挂钩的官方头盔文档:Helm Docs

滚动到最底端的“挂钩删除策略”,您将看到:

如果未指定任何钩子删除策略注释,则默认情况下将应用前钩子创建行为。

会发生什么情况,那就是头盔运行创建秘密的钩子,成功创建它,然后继续运行下一个钩子(您的迁移)并在执行之前再次删除秘密。

钩子无意创建保留的资源。您可以通过为秘密设置hook-failed的钩子删除策略来尝试破解它,但我不确定结果如何。

理想情况下,您不会在应用程序的初始化容器中运行应用程序的迁移作业。这样,您可以正常创建机密信息,而无需使用钩子,并且init容器和应用程序可以重用相同的机密信息。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...