0

我有一个预安装挂钩,它创建一个动态 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 安装?

4

2 回答 2

5

您可以使用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 模板函数

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

于 2020-08-31T16:32:33.800 回答
3

对命令使用--no-hooks标志以helm忽略挂钩。

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

$ helm install <NAME> <CHART> --no-hooks
于 2020-08-19T13:18:57.890 回答