【问题标题】:helm Ignore pre-install hook failurehelm 忽略预安装钩子失败
【发布时间】:2020-12-08 18:21:48
【问题描述】:

我有一个预安装挂钩,它创建一个动态 PVC,看起来像这样

kind: PersistentVolumeClaim
metadata:
  name: my-dynamic-pv
  annotations:
    "helm.sh/resource-policy": keep
    "helm.sh/hook": "pre-install"
spec:
  storageClassName: {{ .Values.persistence.storageClass }}
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

我想在重新启动时保留相同的 PVC,这就是我提供 "helm.sh/resource-policy": keep 的原因。第一次启动服务时,我可以使用预安装挂钩创建 PVC。但随后的安装/重新启动失败并出现错误Error: persistentvolumeclaims "my-dynamic-pv" already exists

有没有办法忽略这个失败并继续 helm 安装?

【问题讨论】:

  • 您不需要将其标记为钩子; helm upgrade 不会删除未更改的对象。是否有更具体的helm 命令序列会导致问题,尤其是在没有钩子注释的情况下?
  • 我实际上正在这里做一个helm delhelm install。这导致了一个问题。根据我的用例,我应该始终清除并启动我的服务。
  • 请尽量按上述使用-stackoverflow.com/questions/49344501/…

标签: kubernetes kubernetes-helm kubernetes-pod helmfile


【解决方案1】:

helm 命令中使用--no-hooks 标志来忽略挂钩。

$ helm install --help | grep "no-hooks"
     
 --no-hooks                     prevent hooks from running during install

$ helm install <NAME> <CHART> --no-hooks

【讨论】:

  • 我已经探索过这个选项。这里的问题是它需要一个额外的选项--no-hookshelm install,这不是我的意图。我想使用 helm install 而不需要任何其他选项。
  • 如果你想忽略应该发生的事情,你肯定需要提供一些额外的东西。期间。
【解决方案2】:

您可以在创建pvc之前使用helm lookup函数检查pvc是否存在。

{{- $mypvc := (lookup "v1" "PersistentVolumeClaim" .Release.Namespace (printf "my- 
dynamic-pv")) }}
{{- if not $mypvc }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: my-dynamic-pv
  annotations:
    "helm.sh/resource-policy": keep
    "helm.sh/hook": "pre-install"
spec:
  storageClassName: {{ .Values.persistence.storageClass }}
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
{{- end -}}

更多关于 helm 查找功能 - Helm template functions

我正在使用 helm 3.2.1。您可能需要一个近似版本才能使用查找功能。

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 2021-11-24
    • 2021-12-10
    • 2020-02-24
    • 2019-06-15
    • 2022-12-05
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多